From 4982b6d1432efeefb97c12c0b87e446397ed5277 Mon Sep 17 00:00:00 2001 From: Webb Sledge Date: Fri, 1 Nov 2024 23:13:49 -0400 Subject: [PATCH 1/4] Added function to find individual company ticker from CIK value --- edgar/reference/tickers.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/edgar/reference/tickers.py b/edgar/reference/tickers.py index c5d5d2ad..77cf3df5 100644 --- a/edgar/reference/tickers.py +++ b/edgar/reference/tickers.py @@ -227,6 +227,11 @@ def find_company_cik(ticker): ticker = ticker.upper().replace('.', '-') return lookup.get(ticker) +def find_company_ticker(cik): + cik = str(cik).lstrip('0') + df = get_cik_tickers() + ticker = df[df['cik'] == int(cik)]['ticker'] + return ticker.values[0] def find_cik(ticker): """ From 210861e7865c0b126d7d079fec84a572448dedd6 Mon Sep 17 00:00:00 2001 From: Webb Sledge Date: Sat, 2 Nov 2024 11:20:51 -0400 Subject: [PATCH 2/4] Refactor find_company_tickers with more robust exception handling --- edgar/reference/tickers.py | 44 ++++++++++++++++++++++++++++++++++---- 1 file changed, 40 insertions(+), 4 deletions(-) diff --git a/edgar/reference/tickers.py b/edgar/reference/tickers.py index 77cf3df5..f0beda2a 100644 --- a/edgar/reference/tickers.py +++ b/edgar/reference/tickers.py @@ -227,11 +227,47 @@ def find_company_cik(ticker): ticker = ticker.upper().replace('.', '-') return lookup.get(ticker) -def find_company_ticker(cik): - cik = str(cik).lstrip('0') +def find_company_ticker(cik: Union[int, str]) -> Union[str, List[str]]: + """ + Find the ticker for a given CIK. + + Parameters: + cik (int or str): The CIK to look up + + Returns: + Union[str, List[str]]: A single ticker string if only one ticker is found, + a list of ticker strings if multiple tickers are found, + or an empty list if no tickers are found. + """ + try: + # Ensure cik is a string without leading zeros, then convert to int + cik = str(cik).lstrip('0') + cik = int(cik) + except (ValueError, TypeError): + return [] + + # Get DataFrame of CIK-Ticker mappings df = get_cik_tickers() - ticker = df[df['cik'] == int(cik)]['ticker'] - return ticker.values[0] + + # Ensure 'cik' and 'ticker' columns exist + if 'cik' not in df.columns or 'ticker' not in df.columns: + return [] + + # Filter DataFrame for the given CIK + ticker_series = df[df['cik'] == cik]['ticker'] + + # If no tickers found, return an empty list + if ticker_series.empty: + return [] + + # Filter out None values from tickers + tickers = [ticker for ticker in ticker_series.values if ticker is not None] + + # Return a single ticker if only one found + if len(tickers) == 1: + return tickers[0] + + return tickers def find_cik(ticker): """ From 0aa760c4cc442fc26ef3012ef80179502790c7e6 Mon Sep 17 00:00:00 2001 From: Webb Sledge Date: Sat, 2 Nov 2024 11:34:12 -0400 Subject: [PATCH 3/4] Minor refactor find_company_tickers to return None rather than list. Cleanup docstring. --- edgar/reference/tickers.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/edgar/reference/tickers.py b/edgar/reference/tickers.py index f0beda2a..5c04864d 100644 --- a/edgar/reference/tickers.py +++ b/edgar/reference/tickers.py @@ -227,38 +227,35 @@ def find_company_cik(ticker): ticker = ticker.upper().replace('.', '-') return lookup.get(ticker) -def find_company_ticker(cik: Union[int, str]) -> Union[str, List[str]]: +def find_company_ticker(cik: Union[int, str]) -> Union[str, List[str], None]: """ Find the ticker for a given CIK. - Parameters: - cik (int or str): The CIK to look up - - Returns: - Union[str, List[str]]: A single ticker string if only one ticker is found, - a list of ticker strings if multiple tickers are found, - or an empty list if no tickers are found. + :param cik (int or str): The CIK to look up + :return Union[str, List[str]]: A single ticker string if only one ticker is found, + a list of ticker strings if multiple tickers are found, + or an empty list if no tickers are found. """ try: # Ensure cik is a string without leading zeros, then convert to int cik = str(cik).lstrip('0') cik = int(cik) except (ValueError, TypeError): - return [] + return None # Get DataFrame of CIK-Ticker mappings df = get_cik_tickers() # Ensure 'cik' and 'ticker' columns exist if 'cik' not in df.columns or 'ticker' not in df.columns: - return [] + return None # Filter DataFrame for the given CIK ticker_series = df[df['cik'] == cik]['ticker'] # If no tickers found, return an empty list if ticker_series.empty: - return [] + return None # Filter out None values from tickers tickers = [ticker for ticker in ticker_series.values if ticker is not None] From 3887b551d7aa955ad79621e7fba281deaf45debf Mon Sep 17 00:00:00 2001 From: Webb Sledge Date: Sat, 2 Nov 2024 11:57:43 -0400 Subject: [PATCH 4/4] Fix code block comment; no code change --- edgar/reference/tickers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/edgar/reference/tickers.py b/edgar/reference/tickers.py index 5c04864d..ba8a55e2 100644 --- a/edgar/reference/tickers.py +++ b/edgar/reference/tickers.py @@ -253,7 +253,7 @@ def find_company_ticker(cik: Union[int, str]) -> Union[str, List[str], None]: # Filter DataFrame for the given CIK ticker_series = df[df['cik'] == cik]['ticker'] - # If no tickers found, return an empty list + # If no tickers found, return None if ticker_series.empty: return None