From 1eabbc30e75d5532ed0a9f5b7afca9107ba3bfe6 Mon Sep 17 00:00:00 2001 From: Paul Tomasula <31142705+ptomasula@users.noreply.github.com> Date: Thu, 21 Apr 2022 14:26:17 -0400 Subject: [PATCH 1/3] Metadata cleanup Relates to issue #2. After releasing package I noticed that much of the metadata displayed on PyPI has issues. These tweaks should address some of those formatting issues. --- setup.cfg | 12 ++++++------ src/odm2datamodels/base.py | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/setup.cfg b/setup.cfg index 015f3d2..e511511 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,15 +1,15 @@ [metadata] name = odm2datamodels -description = "Collection of object-relational mapping (ORM) data models for ODM2" +description = Collection of object-relational mapping (ORM) data models for ODM2 long_description = file: README.md -long_description_content = text/markdown -version = 0.0.1 -author = "ODM2 Team" -author_email = "" +long_description_content_type = text/markdown +version = 0.0.2 +author = ODM2 Team +author_email = ptomasula@limno.com url = https://github.com/ODM2/ODM2DataModels project_urls = - bugtracker = https://github.com/ODM2/ODM2DataModels/issueshttps://github.com/pypa/sampleproject/issues + bugtracker = https://github.com/ODM2/ODM2DataModels/issues keywords='Observations Data Model ODM2' [options] diff --git a/src/odm2datamodels/base.py b/src/odm2datamodels/base.py index d3f0dd9..3800924 100644 --- a/src/odm2datamodels/base.py +++ b/src/odm2datamodels/base.py @@ -30,7 +30,7 @@ class OutputFormats(Enum): - JSON ='JSON' + JSON = 'JSON' DATAFRAME = 'DATAFRAME' DICT = 'DICT' From 4e192e346fa194c9c8d6a7574c821b201bbf21d3 Mon Sep 17 00:00:00 2001 From: Xavier Nogueira <58796351+xaviernogueira@users.noreply.github.com> Date: Fri, 22 Apr 2022 17:13:50 -0400 Subject: [PATCH 2/3] Replaced Enum output_format control with strings json, dataframe, or dict formats possible --- src/odm2datamodels/base.py | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/odm2datamodels/base.py b/src/odm2datamodels/base.py index 3800924..05ecd8d 100644 --- a/src/odm2datamodels/base.py +++ b/src/odm2datamodels/base.py @@ -28,11 +28,8 @@ from .models import samplingfeatures from .models import simulation +OUTPUT_FORMATS = ('json', 'dataframe', 'dict') -class OutputFormats(Enum): - JSON = 'JSON' - DATAFRAME = 'DATAFRAME' - DICT = 'DICT' class Base(): @@ -82,19 +79,25 @@ def __init__(self, session_maker:sqlalchemy.orm.sessionmaker) -> None: def read_query(self, query: Union[Query, Select], - output_format:OutputFormats=OutputFormats.JSON, + output_format:str='json', orient:str='records') -> Union[str, pd.DataFrame]: + + # guard against invalid output_format strings + if output_format not in OUTPUT_FORMATS: + raise ValueError(f':param output_format = {output_format}, which is not one of the following valid output_format strings: {OUTPUT_FORMATS}') + + # use SQLAlchemy session to read_query and return response in the designated output_format with self.session_maker() as session: if isinstance(query, Select): df = pd.read_sql(query, session.bind) else: df = pd.read_sql(query.statement, session.bind) - if output_format == OutputFormats.JSON: + if output_format == 'json': return df.to_json(orient=orient) - elif output_format == OutputFormats.DATAFRAME: + elif output_format == 'dataframe': return df - elif output_format == OutputFormats.DICT: + elif output_format == 'dict': return df.to_dict() raise TypeError("Unknown output format") @@ -117,7 +120,7 @@ def create_object(self, obj:object) -> Union[int, str]: return pkey_value def read_object(self, model:Type[Base], pkey:Union[int, str], - output_format: OutputFormats=OutputFormats.DICT, + output_format:str='dict', orient:str='records') -> Dict[str, Any]: with self.session_maker() as session: @@ -126,8 +129,14 @@ def read_object(self, model:Type[Base], pkey:Union[int, str], if obj is None: raise ObjectNotFound(f"No '{model.__name__}' object found with {pkey_name} = {pkey}") session.commit() + # convert obj_dict to a dictionary if it isn't one already obj_dict = obj.to_dict() - if output_format == OutputFormats.DICT: + + # guard against invalid output_format strings + if output_format not in OUTPUT_FORMATS: + raise ValueError(f':param output_format = {output_format}, which is not one of the following valid output_format strings: {OUTPUT_FORMATS}') + + if output_format == 'dict': return obj_dict else: @@ -139,9 +148,9 @@ def read_object(self, model:Type[Base], pkey:Union[int, str], obj_dict[key] = new_value obj_df = pd.DataFrame.from_dict(obj_dict) - if output_format == OutputFormats.DATAFRAME: + if output_format == 'dataframe': return obj_df - elif output_format == OutputFormats.JSON: + elif output_format == 'json': return obj_df.to_json(orient=orient) raise TypeError("Unknown output format") From 5bc4abd981a14beed086a08ff118744831fc11ec Mon Sep 17 00:00:00 2001 From: Paul Tomasula <31142705+ptomasula@users.noreply.github.com> Date: Wed, 27 Apr 2022 16:32:34 -0400 Subject: [PATCH 3/3] Suppress Sqlalchemy SAWarnings --- src/odm2datamodels/base.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/odm2datamodels/base.py b/src/odm2datamodels/base.py index 05ecd8d..7c93b10 100644 --- a/src/odm2datamodels/base.py +++ b/src/odm2datamodels/base.py @@ -28,9 +28,13 @@ from .models import samplingfeatures from .models import simulation +import warnings +warnings.simplefilter("ignore", category=sqlalchemy.exc.SAWarning) + OUTPUT_FORMATS = ('json', 'dataframe', 'dict') + class Base(): @declared_attr @@ -84,7 +88,7 @@ def read_query(self, # guard against invalid output_format strings if output_format not in OUTPUT_FORMATS: - raise ValueError(f':param output_format = {output_format}, which is not one of the following valid output_format strings: {OUTPUT_FORMATS}') + raise ValueError(f':argument output_format={output_format}, is not a valid output_format strings: {OUTPUT_FORMATS}') # use SQLAlchemy session to read_query and return response in the designated output_format with self.session_maker() as session: