From 0ca7f4f7542d29ad514b38d2851bb03c5e1d8325 Mon Sep 17 00:00:00 2001 From: Joachim Meyer Date: Thu, 22 Aug 2024 17:03:11 -0600 Subject: [PATCH 1/2] Tables - Simplify inheritance structure Moving all common declaration into the `Base` class, which removes the `SnowData` class. --- snowexsql/db.py | 2 +- snowexsql/tables/__init__.py | 5 ----- snowexsql/tables/base.py | 23 ++++++++++++++--------- snowexsql/tables/image_data.py | 5 ++--- snowexsql/tables/layer_data.py | 1 - snowexsql/tables/point_data.py | 1 - tests/test_db.py | 2 +- 7 files changed, 18 insertions(+), 21 deletions(-) diff --git a/snowexsql/db.py b/snowexsql/db.py index a2642d4..5d5a4d8 100644 --- a/snowexsql/db.py +++ b/snowexsql/db.py @@ -8,7 +8,7 @@ from sqlalchemy import MetaData, create_engine from sqlalchemy.orm import sessionmaker -from snowexsql.tables import Base +from snowexsql.tables.base import Base def initialize(engine): diff --git a/snowexsql/tables/__init__.py b/snowexsql/tables/__init__.py index 16207bb..3a43124 100644 --- a/snowexsql/tables/__init__.py +++ b/snowexsql/tables/__init__.py @@ -1,16 +1,11 @@ -from .base import Base, Measurement, SingleLocationData, SnowData from .image_data import ImageData from .layer_data import LayerData from .point_data import PointData from .site_data import SiteData __all__ = [ - 'Base', 'ImageData', 'LayerData', - 'Measurement', 'PointData', - 'SingleLocationData', - 'SiteData' 'SnowData', ] diff --git a/snowexsql/tables/base.py b/snowexsql/tables/base.py index f311356..eb6a915 100644 --- a/snowexsql/tables/base.py +++ b/snowexsql/tables/base.py @@ -7,26 +7,31 @@ from geoalchemy2 import Geometry from sqlalchemy import Column, Date, DateTime, Float, Integer, String, Time -from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import DeclarativeBase from sqlalchemy.sql import func -Base = declarative_base() - -class SnowData(object): +class Base(DeclarativeBase): """ Base class for which all data will have these attributes """ - site_name = Column(String(250)) - date = Column(Date) + # SQL Alchemy + __table_args__ = {"schema": "public"} + + # Primary Key + id = Column(Integer, primary_key=True) + + # Standard table columns time_created = Column(DateTime(timezone=True), server_default=func.now()) time_updated = Column(DateTime(timezone=True), onupdate=func.now()) - id = Column(Integer, primary_key=True) - doi = Column(String(50)) + date_accessed = Column(Date) + site_name = Column(String(250)) + date = Column(Date) + doi = Column(String(50)) -class SingleLocationData(SnowData): +class SingleLocationData: """ Base class for points and profiles """ diff --git a/snowexsql/tables/image_data.py b/snowexsql/tables/image_data.py index 982929a..4e6e5bb 100644 --- a/snowexsql/tables/image_data.py +++ b/snowexsql/tables/image_data.py @@ -1,14 +1,13 @@ from geoalchemy2 import Raster from sqlalchemy import Column, String -from .base import Base, Measurement, SnowData +from .base import Base, Measurement -class ImageData(SnowData, Measurement, Base): +class ImageData(Base, Measurement): """ Class representing the images table. This table holds all images/rasters """ __tablename__ = 'images' - __table_args__ = {"schema": "public"} raster = Column(Raster) description = Column(String(1000)) diff --git a/snowexsql/tables/layer_data.py b/snowexsql/tables/layer_data.py index eae9f60..603da42 100644 --- a/snowexsql/tables/layer_data.py +++ b/snowexsql/tables/layer_data.py @@ -11,7 +11,6 @@ class LayerData(SingleLocationData, Measurement, Base): temperature etc... """ __tablename__ = 'layers' - __table_args__ = {"schema": "public"} depth = Column(Float) site_id = Column(String(50)) diff --git a/snowexsql/tables/point_data.py b/snowexsql/tables/point_data.py index cd7185e..c6189ee 100644 --- a/snowexsql/tables/point_data.py +++ b/snowexsql/tables/point_data.py @@ -10,7 +10,6 @@ class PointData(SingleLocationData, Measurement, Base): e.g. snow depths """ __tablename__ = 'points' - __table_args__ = {"schema": "public"} version_number = Column(Integer) equipment = Column(String(50)) diff --git a/tests/test_db.py b/tests/test_db.py index 20c2286..18d0df4 100644 --- a/tests/test_db.py +++ b/tests/test_db.py @@ -3,7 +3,7 @@ import pytest from sqlalchemy import Table -from snowexsql.db import * +from snowexsql.db import get_db, get_table_attributes from snowexsql.tables import ImageData, LayerData, PointData, SiteData from .sql_test_base import DBSetup From 9ddb65d6d7d8471dd615d488811d4073ce7f67fa Mon Sep 17 00:00:00 2001 From: Joachim Meyer Date: Thu, 22 Aug 2024 17:06:32 -0600 Subject: [PATCH 2/2] Root init - Use team name as author --- snowexsql/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snowexsql/__init__.py b/snowexsql/__init__.py index 91d5cbc..ad767ed 100644 --- a/snowexsql/__init__.py +++ b/snowexsql/__init__.py @@ -1,4 +1,4 @@ """Top-level package for snowexsql.""" -__author__ = """Micah Johnson""" +__author__ = """SnowEx SQL Development Team""" __version__ = '0.5.0'