From 9cbda635c762b3e47eed45800eab45f166c60493 Mon Sep 17 00:00:00 2001 From: Igor Radovanovic <74266147+IgorWounds@users.noreply.github.com> Date: Tue, 15 Aug 2023 13:17:51 +0200 Subject: [PATCH] Add more docstrings | @the-praxs --- .../core/openbb_core/app/static/package_builder.py | 5 ++++- .../provider/openbb_provider/abstract/__init__.py | 1 + .../sdk/provider/openbb_provider/abstract/data.py | 4 ++++ .../provider/openbb_provider/abstract/provider.py | 5 ++--- .../openbb_provider/abstract/query_params.py | 4 ++++ .../sdk/provider/openbb_provider/query_executor.py | 4 ++++ openbb_sdk/sdk/provider/openbb_provider/registry.py | 12 +++++++++++- .../sdk/provider/openbb_provider/registry_map.py | 2 ++ .../openbb_provider/standard_models/__init__.py | 1 + .../provider/openbb_provider/standard_models/base.py | 7 ++++++- .../standard_models/historical_dividends.py | 2 +- .../standard_models/stock_ownership.py | 1 - .../sdk/provider/openbb_provider/utils/__init__.py | 1 + .../sdk/provider/openbb_provider/utils/helpers.py | 1 + 14 files changed, 42 insertions(+), 8 deletions(-) diff --git a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py index 94e9813bfe8..534e2f4cd9d 100644 --- a/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py +++ b/openbb_sdk/sdk/core/openbb_core/app/static/package_builder.py @@ -1,3 +1,5 @@ +"""Package Builder Class.""" + import builtins import shutil import subprocess @@ -531,7 +533,6 @@ class MethodDefinition: od: OrderedDict[str, Parameter], model_name: Optional[str] = None ) -> OrderedDict[str, Parameter]: """Add the field description to the param signature.""" - if model_name: available_fields = ( get_provider_interface() @@ -561,6 +562,7 @@ class MethodDefinition: def build_func_params( parameter_map: Dict[str, Parameter], model_name: Optional[str] = None ) -> str: + """Build the function params.""" od = MethodDefinition.format_params(parameter_map=parameter_map) MethodDefinition.add_field_descriptions( od=od, model_name=model_name @@ -611,6 +613,7 @@ class MethodDefinition: return_type: type, model_name: Optional[str] = None, ) -> str: + """Build the command method signature.""" func_params = MethodDefinition.build_func_params(parameter_map, model_name) func_returns = MethodDefinition.build_func_returns(return_type) code = "\n @filter_call" diff --git a/openbb_sdk/sdk/provider/openbb_provider/abstract/__init__.py b/openbb_sdk/sdk/provider/openbb_provider/abstract/__init__.py index e69de29bb2d..3477d557024 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/abstract/__init__.py +++ b/openbb_sdk/sdk/provider/openbb_provider/abstract/__init__.py @@ -0,0 +1 @@ +"""OpenBB Provider Abstract Class.""" diff --git a/openbb_sdk/sdk/provider/openbb_provider/abstract/data.py b/openbb_sdk/sdk/provider/openbb_provider/abstract/data.py index 17f67b05c60..00bbcebc1c6 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/abstract/data.py +++ b/openbb_sdk/sdk/provider/openbb_provider/abstract/data.py @@ -1,3 +1,4 @@ +"""The OpenBB Standardized Data Model.""" from pydantic import BaseModel, Extra @@ -5,8 +6,11 @@ class Data(BaseModel): """The OpenBB Standardized Data Model.""" def __repr__(self): + """Return a string representation of the object.""" return f"{self.__class__.__name__}({', '.join([f'{k}={v}' for k, v in self.dict().items()])})" class Config: + """Pydantic configuration.""" + extra = Extra.allow allow_population_by_field_name = True diff --git a/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py b/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py index bb3f5d00b99..b4d62f925e7 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py +++ b/openbb_sdk/sdk/provider/openbb_provider/abstract/provider.py @@ -1,4 +1,4 @@ -"""Abstract class for providers.""" +"""Provider Abstract Class.""" from typing import Dict, List, Optional, Type @@ -6,8 +6,7 @@ from openbb_provider.abstract.fetcher import Fetcher class Provider: - """This class serves as provider extensions entry point and must be - created by each provider.""" + """Serves as provider extension entry point and must be created by each provider.""" def __init__( self, diff --git a/openbb_sdk/sdk/provider/openbb_provider/abstract/query_params.py b/openbb_sdk/sdk/provider/openbb_provider/abstract/query_params.py index 5d9bb9229e5..b42aab7123f 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/abstract/query_params.py +++ b/openbb_sdk/sdk/provider/openbb_provider/abstract/query_params.py @@ -1,3 +1,4 @@ +"""The OpenBB Standardized QueryParams Model that holds the query input parameters.""" from pydantic import BaseModel @@ -5,7 +6,10 @@ class QueryParams(BaseModel): """The OpenBB Standardized QueryParams Model that holds the query input parameters.""" class Config: + """Pydantic Config.""" + allow_population_by_field_name = True def __repr__(self): + """Return the string representation of the QueryParams object.""" return f"{self.__class__.__name__}({', '.join([f'{k}={v}' for k, v in self.dict().items()])})" diff --git a/openbb_sdk/sdk/provider/openbb_provider/query_executor.py b/openbb_sdk/sdk/provider/openbb_provider/query_executor.py index 6a1cf6352e6..74a18c89e21 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/query_executor.py +++ b/openbb_sdk/sdk/provider/openbb_provider/query_executor.py @@ -1,3 +1,4 @@ +"""Query executor module.""" from typing import Any, Dict, Optional, Type from openbb_provider.abstract.fetcher import Fetcher, GenericDataType @@ -6,6 +7,8 @@ from openbb_provider.registry import Registry, RegistryLoader class ProviderError(Exception): + """Exception raised for errors in the provider.""" + pass @@ -13,6 +16,7 @@ class QueryExecutor: """Class to execute queries from providers.""" def __init__(self, registry: Optional[Registry] = None) -> None: + """Initialize the query executor.""" self.registry = registry or RegistryLoader.from_extensions() def get_provider(self, provider_name: str) -> Provider: diff --git a/openbb_sdk/sdk/provider/openbb_provider/registry.py b/openbb_sdk/sdk/provider/openbb_provider/registry.py index a09aa7c5ab6..4699076ba83 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/registry.py +++ b/openbb_sdk/sdk/provider/openbb_provider/registry.py @@ -1,3 +1,5 @@ +"""Provider Registry Module.""" + from typing import Dict import importlib_metadata @@ -6,26 +8,34 @@ from openbb_provider.abstract.provider import Provider class Registry: - """Class to maintain registry of providers""" + """Maintain registry of providers.""" def __init__(self) -> None: + """Initialize the registry.""" self._providers: Dict[str, Provider] = {} @property def providers(self): + """Return a dictionary of providers.""" return self._providers def include_provider(self, provider: Provider) -> None: + """Include a provider in the registry.""" self._providers[provider.name.lower()] = provider class LoadingError(Exception): + """Error loading providers.""" + pass class RegistryLoader: + """Load providers from entry points.""" + @staticmethod def from_extensions() -> Registry: + """Load providers from entry points.""" registry = Registry() for entry_point in importlib_metadata.entry_points( group="openbb_provider_extension" diff --git a/openbb_sdk/sdk/provider/openbb_provider/registry_map.py b/openbb_sdk/sdk/provider/openbb_provider/registry_map.py index 7fb7da75e18..9197c59a2ad 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/registry_map.py +++ b/openbb_sdk/sdk/provider/openbb_provider/registry_map.py @@ -14,6 +14,7 @@ class RegistryMap: """Class to store information about providers in the registry.""" def __init__(self, registry: Optional[Registry] = None) -> None: + """Initialize Registry Map.""" self._registry = registry or RegistryLoader.from_extensions() self._required_credentials = self._get_required_credentials(self._registry) self._available_providers = self._get_available_providers(self._registry) @@ -42,6 +43,7 @@ class RegistryMap: @property def return_map(self) -> MapType: + """Get provider registry return map.""" return self._return_map @property diff --git a/openbb_sdk/sdk/provider/openbb_provider/standard_models/__init__.py b/openbb_sdk/sdk/provider/openbb_provider/standard_models/__init__.py index e69de29bb2d..00d46a14737 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/standard_models/__init__.py +++ b/openbb_sdk/sdk/provider/openbb_provider/standard_models/__init__.py @@ -0,0 +1 @@ +"""OpenBB Provider Package.""" diff --git a/openbb_sdk/sdk/provider/openbb_provider/standard_models/base.py b/openbb_sdk/sdk/provider/openbb_provider/standard_models/base.py index 53fc2436fb3..2fc5ad8942b 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/standard_models/base.py +++ b/openbb_sdk/sdk/provider/openbb_provider/standard_models/base.py @@ -1,4 +1,4 @@ -"""Base models for OpenBB Provider. """ +"""Base models for OpenBB Provider.""" from typing import List, Literal, Optional, Union from pydantic import BaseModel, Field, NonNegativeInt, validator @@ -8,16 +8,21 @@ from openbb_provider.utils.descriptions import QUERY_DESCRIPTIONS class BaseSymbol(BaseModel): + """Base model for symbol query params.""" + symbol: str = Field(description=QUERY_DESCRIPTIONS.get("symbol", "")) @validator("symbol", pre=True, check_fields=False, always=True) def upper_symbol(cls, v: Union[str, List[str], set[str]]): + """Convert symbol to uppercase.""" if isinstance(v, str): return v.upper() return ",".join([symbol.upper() for symbol in list(v)]) class FinancialStatementQueryParams(QueryParams, BaseSymbol): + """Base model for financial statement query params.""" + period: Literal["annually", "quarterly"] = Field( default="annually", description=QUERY_DESCRIPTIONS.get("period", "") ) diff --git a/openbb_sdk/sdk/provider/openbb_provider/standard_models/historical_dividends.py b/openbb_sdk/sdk/provider/openbb_provider/standard_models/historical_dividends.py index 14f56fb7fd5..73d7a21b9e6 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/standard_models/historical_dividends.py +++ b/openbb_sdk/sdk/provider/openbb_provider/standard_models/historical_dividends.py @@ -36,7 +36,7 @@ class HistoricalDividendsData(Data): @validator("declaration_date", pre=True, check_fields=False) def declaration_date_validate(cls, v: str): # pylint: disable=E0213 - """Declaration date validator.""" + """Validate declaration date.""" if not isinstance(v, str): return v return dateType.fromisoformat(v) if v else None diff --git a/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_ownership.py b/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_ownership.py index a6a0600be86..8df67cfc1e9 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_ownership.py +++ b/openbb_sdk/sdk/provider/openbb_provider/standard_models/stock_ownership.py @@ -28,7 +28,6 @@ def most_recent_quarter(base: dateType = dateType.today()) -> dateType: date : date The most recent quarter date. """ - base = min(base, dateType.today()) # This prevents dates from being in the future exacts = [(3, 31), (6, 30), (9, 30), (12, 31)] for exact in exacts: diff --git a/openbb_sdk/sdk/provider/openbb_provider/utils/__init__.py b/openbb_sdk/sdk/provider/openbb_provider/utils/__init__.py index e69de29bb2d..d824a05e8d0 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/utils/__init__.py +++ b/openbb_sdk/sdk/provider/openbb_provider/utils/__init__.py @@ -0,0 +1 @@ +"""OpenBB Provider Utils.""" diff --git a/openbb_sdk/sdk/provider/openbb_provider/utils/helpers.py b/openbb_sdk/sdk/provider/openbb_provider/utils/helpers.py index 65e49975298..47e0e847699 100644 --- a/openbb_sdk/sdk/provider/openbb_provider/utils/helpers.py +++ b/openbb_sdk/sdk/provider/openbb_provider/utils/helpers.py @@ -5,6 +5,7 @@ import re from typing import Callable, Dict, List, Optional, Type, Union import requests + from openbb_provider.abstract.fetcher import DataType, ProviderDataType