From eb90e0fcee29b03836e1ebb1766eaf3836a9488a Mon Sep 17 00:00:00 2001 From: petercarbsmith Date: Mon, 22 Dec 2025 14:16:32 -0700 Subject: [PATCH] adding database.py and config.py to datamodels folder. modifying ca_biositing.yaml to include the infrastructure models --- ...668dac367_added_test_column_to_resource.py | 34 ++ ...22d3d9ea6_adding_infrastructure_i_think.py | 346 +++++++++++++ census.survey.mmd | 53 -- .../ca_biositing/datamodels/config.py | 34 ++ .../ca_biositing/datamodels/database.py | 26 + .../datamodels/linkml/ca_biositing.yaml | 2 + .../linkml/modules/resource_information.yaml | 5 + .../schemas/generated/aim1_records.py | 3 +- .../schemas/generated/aim2_records.py | 3 +- .../schemas/generated/ca_biositing.py | 480 +++++++++++++++++- .../generated/data_sources_metadata.py | 3 +- .../schemas/generated/experiment_equipment.py | 3 +- .../schemas/generated/external_data.py | 3 +- .../schemas/generated/field_sampling.py | 3 +- .../schemas/generated/general_analysis.py | 3 +- .../schemas/generated/infrastructure.py | 3 +- .../generated/methods_parameters_units.py | 3 +- .../schemas/generated/resource_information.py | 3 +- .../schemas/generated/sample_preparation.py | 3 +- 19 files changed, 948 insertions(+), 65 deletions(-) create mode 100644 alembic/versions/5a6668dac367_added_test_column_to_resource.py create mode 100644 alembic/versions/fc422d3d9ea6_adding_infrastructure_i_think.py delete mode 100644 census.survey.mmd create mode 100644 src/ca_biositing/datamodels/ca_biositing/datamodels/config.py create mode 100644 src/ca_biositing/datamodels/ca_biositing/datamodels/database.py diff --git a/alembic/versions/5a6668dac367_added_test_column_to_resource.py b/alembic/versions/5a6668dac367_added_test_column_to_resource.py new file mode 100644 index 00000000..1b30aa8e --- /dev/null +++ b/alembic/versions/5a6668dac367_added_test_column_to_resource.py @@ -0,0 +1,34 @@ +"""added test column to Resource + +Revision ID: 5a6668dac367 +Revises: 184417c6d044 +Create Date: 2025-12-22 17:49:18.175092 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '5a6668dac367' +down_revision: Union[str, Sequence[str], None] = '184417c6d044' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('landiq_record', 'test') + op.add_column('resource', sa.Column('test', sa.Text(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('resource', 'test') + op.add_column('landiq_record', sa.Column('test', sa.TEXT(), autoincrement=False, nullable=True)) + # ### end Alembic commands ### diff --git a/alembic/versions/fc422d3d9ea6_adding_infrastructure_i_think.py b/alembic/versions/fc422d3d9ea6_adding_infrastructure_i_think.py new file mode 100644 index 00000000..68b1bd0f --- /dev/null +++ b/alembic/versions/fc422d3d9ea6_adding_infrastructure_i_think.py @@ -0,0 +1,346 @@ +"""adding infrastructure I think + +Revision ID: fc422d3d9ea6 +Revises: 5a6668dac367 +Create Date: 2025-12-22 21:13:56.161244 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'fc422d3d9ea6' +down_revision: Union[str, Sequence[str], None] = '5a6668dac367' +branch_labels: Union[str, Sequence[str], None] = None +depends_on: Union[str, Sequence[str], None] = None + + +def upgrade() -> None: + """Upgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('facility_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('facility_name', sa.Text(), nullable=True), + sa.Column('location_id', sa.Integer(), nullable=True), + sa.Column('capacity_mw', sa.Numeric(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('operator', sa.Text(), nullable=True), + sa.Column('start_year', sa.Integer(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('created_at', sa.DateTime(), nullable=True), + sa.Column('updated_at', sa.DateTime(), nullable=True), + sa.Column('etl_run_id', sa.Text(), nullable=True), + sa.Column('lineage_group_id', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('infrastructure_biodiesel_plants', + sa.Column('biodiesel_plant_id', sa.Integer(), nullable=False), + sa.Column('company', sa.Text(), nullable=True), + sa.Column('bbi_index', sa.Integer(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('capacity_mmg_per_y', sa.Integer(), nullable=True), + sa.Column('feedstock', sa.Text(), nullable=True), + sa.Column('status', sa.Text(), nullable=True), + sa.Column('address', sa.Text(), nullable=True), + sa.Column('coordinates', sa.Text(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.Column('source', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('biodiesel_plant_id') + ) + op.create_table('infrastructure_biosolids_facilities', + sa.Column('biosolid_facility_id', sa.Integer(), nullable=False), + sa.Column('report_submitted_date', sa.Date(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.Column('facility', sa.Text(), nullable=True), + sa.Column('authority', sa.Text(), nullable=True), + sa.Column('plant_type', sa.Text(), nullable=True), + sa.Column('aqmd', sa.Text(), nullable=True), + sa.Column('facility_address', sa.Text(), nullable=True), + sa.Column('facility_city', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('facility_zip', sa.Text(), nullable=True), + sa.Column('facility_county', sa.Text(), nullable=True), + sa.Column('mailing_street_1', sa.Text(), nullable=True), + sa.Column('mailing_city', sa.Text(), nullable=True), + sa.Column('mailing_state', sa.Text(), nullable=True), + sa.Column('mailing_zip', sa.Text(), nullable=True), + sa.Column('biosolids_number', sa.Text(), nullable=True), + sa.Column('biosolids_contact', sa.Text(), nullable=True), + sa.Column('biosolids_contact_phone', sa.Text(), nullable=True), + sa.Column('biosolids_contact_email', sa.Text(), nullable=True), + sa.Column('adwf', sa.Numeric(), nullable=True), + sa.Column('potw_biosolids_generated', sa.Integer(), nullable=True), + sa.Column('twtds_biosolids_treated', sa.Integer(), nullable=True), + sa.Column('class_b_land_app', sa.Integer(), nullable=True), + sa.Column('class_b_applier', sa.Text(), nullable=True), + sa.Column('class_a_compost', sa.Integer(), nullable=True), + sa.Column('class_a_heat_dried', sa.Integer(), nullable=True), + sa.Column('class_a_other', sa.Integer(), nullable=True), + sa.Column('class_a_other_applier', sa.Text(), nullable=True), + sa.Column('twtds_transfer_to_second_preparer', sa.Integer(), nullable=True), + sa.Column('twtds_second_preparer_name', sa.Text(), nullable=True), + sa.Column('adc_or_final_c', sa.Integer(), nullable=True), + sa.Column('landfill', sa.Integer(), nullable=True), + sa.Column('landfill_name', sa.Text(), nullable=True), + sa.Column('surface_disposal', sa.Integer(), nullable=True), + sa.Column('deepwell_injection', sa.Text(), nullable=True), + sa.Column('stored', sa.Integer(), nullable=True), + sa.Column('longterm_treatment', sa.Integer(), nullable=True), + sa.Column('other', sa.Integer(), nullable=True), + sa.Column('name_of_other', sa.Text(), nullable=True), + sa.Column('incineration', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('biosolid_facility_id') + ) + op.create_table('infrastructure_cafo_manure_locations', + sa.Column('cafo_manure_id', sa.Integer(), nullable=False), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.Column('owner_name', sa.Text(), nullable=True), + sa.Column('facility_name', sa.Text(), nullable=True), + sa.Column('address', sa.Text(), nullable=True), + sa.Column('town', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('zip', sa.Text(), nullable=True), + sa.Column('animal', sa.Text(), nullable=True), + sa.Column('animal_feed_operation_type', sa.Text(), nullable=True), + sa.Column('animal_units', sa.Integer(), nullable=True), + sa.Column('animal_count', sa.Integer(), nullable=True), + sa.Column('manure_total_solids', sa.Numeric(), nullable=True), + sa.Column('source', sa.Text(), nullable=True), + sa.Column('date_accessed', sa.Date(), nullable=True), + sa.PrimaryKeyConstraint('cafo_manure_id') + ) + op.create_table('infrastructure_combustion_plants', + sa.Column('combustion_fid', sa.Integer(), nullable=False), + sa.Column('objectid', sa.Integer(), nullable=True), + sa.Column('status', sa.Text(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('county', sa.Text(), nullable=True), + sa.Column('equivalent_generation', sa.Numeric(), nullable=True), + sa.Column('np_mw', sa.Numeric(), nullable=True), + sa.Column('cf', sa.Numeric(), nullable=True), + sa.Column('yearload', sa.Integer(), nullable=True), + sa.Column('fuel', sa.Text(), nullable=True), + sa.Column('notes', sa.Text(), nullable=True), + sa.Column('type', sa.Text(), nullable=True), + sa.Column('wkt_geom', sa.Text(), nullable=True), + sa.Column('geom', sa.Text(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.PrimaryKeyConstraint('combustion_fid') + ) + op.create_table('infrastructure_district_energy_systems', + sa.Column('des_fid', sa.Integer(), nullable=False), + sa.Column('cbg_id', sa.Integer(), nullable=True), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('system', sa.Text(), nullable=True), + sa.Column('object_id', sa.Integer(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('primary_fuel', sa.Text(), nullable=True), + sa.Column('secondary_fuel', sa.Text(), nullable=True), + sa.Column('usetype', sa.Text(), nullable=True), + sa.Column('cap_st', sa.Numeric(), nullable=True), + sa.Column('cap_hw', sa.Numeric(), nullable=True), + sa.Column('cap_cw', sa.Numeric(), nullable=True), + sa.Column('chpcg_cap', sa.Numeric(), nullable=True), + sa.Column('excess_c', sa.Numeric(), nullable=True), + sa.Column('excess_h', sa.Numeric(), nullable=True), + sa.Column('type', sa.Text(), nullable=True), + sa.Column('wkt_geom', sa.Text(), nullable=True), + sa.Column('geom', sa.Text(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.PrimaryKeyConstraint('des_fid') + ) + op.create_table('infrastructure_ethanol_biorefineries', + sa.Column('ethanol_biorefinery_id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('address', sa.Text(), nullable=True), + sa.Column('type', sa.Text(), nullable=True), + sa.Column('capacity_mgy', sa.Integer(), nullable=True), + sa.Column('production_mgy', sa.Integer(), nullable=True), + sa.Column('constr_exp', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('ethanol_biorefinery_id') + ) + op.create_table('infrastructure_food_processing_facilities', + sa.Column('processing_facility_id', sa.Integer(), nullable=False), + sa.Column('address', sa.Text(), nullable=True), + sa.Column('county', sa.Text(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('company', sa.Text(), nullable=True), + sa.Column('join_count', sa.Integer(), nullable=True), + sa.Column('master_type', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('subtype', sa.Text(), nullable=True), + sa.Column('target_fid', sa.Integer(), nullable=True), + sa.Column('processing_type', sa.Text(), nullable=True), + sa.Column('zip', sa.Text(), nullable=True), + sa.Column('type', sa.Text(), nullable=True), + sa.Column('wkt_geom', sa.Text(), nullable=True), + sa.Column('geom', sa.Text(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.PrimaryKeyConstraint('processing_facility_id') + ) + op.create_table('infrastructure_landfills', + sa.Column('project_id', sa.Text(), nullable=False), + sa.Column('project_int_id', sa.Integer(), nullable=True), + sa.Column('ghgrp_id', sa.Text(), nullable=True), + sa.Column('landfill_id', sa.Integer(), nullable=True), + sa.Column('landfill_name', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('physical_address', sa.Text(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('county', sa.Text(), nullable=True), + sa.Column('zip_code', sa.Text(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.Column('ownership_type', sa.Text(), nullable=True), + sa.Column('landfill_owner_orgs', sa.Text(), nullable=True), + sa.Column('landfill_opened_year', sa.Date(), nullable=True), + sa.Column('landfill_closure_year', sa.Date(), nullable=True), + sa.Column('landfill_status', sa.Text(), nullable=True), + sa.Column('waste_in_place', sa.Integer(), nullable=True), + sa.Column('waste_in_place_year', sa.Date(), nullable=True), + sa.Column('lfg_system_in_place', sa.Boolean(), nullable=True), + sa.Column('lfg_collected', sa.Numeric(), nullable=True), + sa.Column('lfg_flared', sa.Numeric(), nullable=True), + sa.Column('project_status', sa.Text(), nullable=True), + sa.Column('project_name', sa.Text(), nullable=True), + sa.Column('project_start_date', sa.Date(), nullable=True), + sa.Column('project_shutdown_date', sa.Date(), nullable=True), + sa.Column('project_type_category', sa.Text(), nullable=True), + sa.Column('lfg_energy_project_type', sa.Text(), nullable=True), + sa.Column('rng_delivery_method', sa.Text(), nullable=True), + sa.Column('actual_mw_generation', sa.Numeric(), nullable=True), + sa.Column('rated_mw_capacity', sa.Numeric(), nullable=True), + sa.Column('lfg_flow_to_project', sa.Numeric(), nullable=True), + sa.Column('direct_emission_reductions', sa.Numeric(), nullable=True), + sa.Column('avoided_emission_reductions', sa.Numeric(), nullable=True), + sa.PrimaryKeyConstraint('project_id') + ) + op.create_table('infrastructure_livestock_anaerobic_digesters', + sa.Column('digester_id', sa.Integer(), nullable=False), + sa.Column('project_name', sa.Text(), nullable=True), + sa.Column('project_type', sa.Text(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('digester_type', sa.Text(), nullable=True), + sa.Column('profile', sa.Text(), nullable=True), + sa.Column('year_operational', sa.Date(), nullable=True), + sa.Column('animal_type_class', sa.Text(), nullable=True), + sa.Column('animal_types', sa.Text(), nullable=True), + sa.Column('pop_feeding_digester', sa.Text(), nullable=True), + sa.Column('total_pop_feeding_digester', sa.Integer(), nullable=True), + sa.Column('cattle', sa.Integer(), nullable=True), + sa.Column('dairy', sa.Integer(), nullable=True), + sa.Column('poultry', sa.Integer(), nullable=True), + sa.Column('swine', sa.Integer(), nullable=True), + sa.Column('codigestion', sa.Text(), nullable=True), + sa.Column('biogas_generation_estimate', sa.Integer(), nullable=True), + sa.Column('electricity_generated', sa.Integer(), nullable=True), + sa.Column('biogas_end_uses', sa.Text(), nullable=True), + sa.Column('methane_emission_reductions', sa.Integer(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.PrimaryKeyConstraint('digester_id') + ) + op.create_table('infrastructure_msw_to_energy_anaerobic_digesters', + sa.Column('wte_id', sa.Integer(), nullable=False), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('county', sa.Text(), nullable=True), + sa.Column('equivalent_generation', sa.Numeric(), nullable=True), + sa.Column('feedstock', sa.Text(), nullable=True), + sa.Column('dayload', sa.Numeric(), nullable=True), + sa.Column('dayload_bdt', sa.Numeric(), nullable=True), + sa.Column('facility_type', sa.Text(), nullable=True), + sa.Column('status', sa.Text(), nullable=True), + sa.Column('notes', sa.Text(), nullable=True), + sa.Column('source', sa.Text(), nullable=True), + sa.Column('type', sa.Text(), nullable=True), + sa.Column('wkt_geom', sa.Text(), nullable=True), + sa.Column('geom', sa.Text(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.PrimaryKeyConstraint('wte_id') + ) + op.create_table('infrastructure_saf_and_renewable_diesel_plants', + sa.Column('ibcc_index', sa.Integer(), nullable=False), + sa.Column('company', sa.Text(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('country', sa.Text(), nullable=True), + sa.Column('capacity', sa.Text(), nullable=True), + sa.Column('feedstock', sa.Text(), nullable=True), + sa.Column('products', sa.Text(), nullable=True), + sa.Column('status', sa.Text(), nullable=True), + sa.Column('address', sa.Text(), nullable=True), + sa.Column('coordinates', sa.Text(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.PrimaryKeyConstraint('ibcc_index') + ) + op.create_table('infrastructure_wastewater_treatment_plants', + sa.Column('plant_id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('state', sa.Text(), nullable=True), + sa.Column('codigestion', sa.Text(), nullable=True), + sa.Column('flow_design_adjusted', sa.Numeric(), nullable=True), + sa.Column('flow_average', sa.Numeric(), nullable=True), + sa.Column('biosolids', sa.Numeric(), nullable=True), + sa.Column('excess_flow', sa.Numeric(), nullable=True), + sa.Column('biogas_utilized', sa.Boolean(), nullable=True), + sa.Column('flaring', sa.Boolean(), nullable=True), + sa.Column('excess_mass_loading_rate', sa.Numeric(), nullable=True), + sa.Column('excess_mass_loading_rate_wet', sa.Numeric(), nullable=True), + sa.Column('methane_production', sa.Numeric(), nullable=True), + sa.Column('energy_content', sa.Numeric(), nullable=True), + sa.Column('electric_kw', sa.Numeric(), nullable=True), + sa.Column('thermal_mmbtu_d', sa.Numeric(), nullable=True), + sa.Column('electric_kwh', sa.Numeric(), nullable=True), + sa.Column('thermal_annual_mmbtu_y', sa.Numeric(), nullable=True), + sa.Column('anaerobic_digestion_facility', sa.Text(), nullable=True), + sa.Column('county', sa.Text(), nullable=True), + sa.Column('dayload_bdt', sa.Numeric(), nullable=True), + sa.Column('dayload', sa.Numeric(), nullable=True), + sa.Column('equivalent_generation', sa.Numeric(), nullable=True), + sa.Column('facility_type', sa.Text(), nullable=True), + sa.Column('feedstock', sa.Text(), nullable=True), + sa.Column('type', sa.Text(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('latitude', sa.Numeric(), nullable=True), + sa.Column('longitude', sa.Numeric(), nullable=True), + sa.Column('zipcode', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('plant_id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('infrastructure_wastewater_treatment_plants') + op.drop_table('infrastructure_saf_and_renewable_diesel_plants') + op.drop_table('infrastructure_msw_to_energy_anaerobic_digesters') + op.drop_table('infrastructure_livestock_anaerobic_digesters') + op.drop_table('infrastructure_landfills') + op.drop_table('infrastructure_food_processing_facilities') + op.drop_table('infrastructure_ethanol_biorefineries') + op.drop_table('infrastructure_district_energy_systems') + op.drop_table('infrastructure_combustion_plants') + op.drop_table('infrastructure_cafo_manure_locations') + op.drop_table('infrastructure_biosolids_facilities') + op.drop_table('infrastructure_biodiesel_plants') + op.drop_table('facility_record') + # ### end Alembic commands ### diff --git a/census.survey.mmd b/census.survey.mmd deleted file mode 100644 index 8ff952c9..00000000 --- a/census.survey.mmd +++ /dev/null @@ -1,53 +0,0 @@ -erDiagram -CensusRecord { - integer year - CropEnum crop - VariableEnum variable - UnitEnum unit - float value - BearingStatusEnum bearing_status - string class_desc - string domain_desc - string source - string notes -} -Geography { - string state_name - string state_fips - string county_name - string county_fips - string geoid - string region_name - string agg_level_desc -} -SurveyRecord { - string period_desc - string freq_desc - string program_desc - integer year - CropEnum crop - VariableEnum variable - UnitEnum unit - float value - BearingStatusEnum bearing_status - string class_desc - string domain_desc - string source - string notes -} -UsdaRecord { - integer year - CropEnum crop - VariableEnum variable - UnitEnum unit - float value - BearingStatusEnum bearing_status - string class_desc - string domain_desc - string source - string notes -} - -CensusRecord ||--|o Geography : "geography" -SurveyRecord ||--|o Geography : "geography" -UsdaRecord ||--|o Geography : "geography" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/config.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/config.py new file mode 100644 index 00000000..9ea419ec --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/config.py @@ -0,0 +1,34 @@ +from pydantic_settings import BaseSettings, SettingsConfigDict +from typing import Optional + +class Settings(BaseSettings): + """ + Application settings and configuration for the datamodels package. + + Uses Pydantic Settings to load configuration from environment variables + and .env files. + """ + POSTGRES_USER: str = "postgres" + POSTGRES_PASSWORD: str = "postgres" + POSTGRES_DB: str = "biositing" + POSTGRES_HOST: str = "db" + POSTGRES_PORT: int = 5432 + DATABASE_URL: Optional[str] = None + + model_config = SettingsConfigDict( + env_file=".env", + env_file_encoding="utf-8", + extra="ignore", + case_sensitive=True + ) + + @property + def database_url(self) -> str: + """ + Constructs the database URL from components if not explicitly set. + """ + if self.DATABASE_URL: + return self.DATABASE_URL + return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}" + +settings = Settings() diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/database.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/database.py new file mode 100644 index 00000000..00dc9b3c --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/database.py @@ -0,0 +1,26 @@ +from sqlmodel import SQLModel, create_engine, Session +from .config import settings + +# Create engine using the database URL from settings +# echo=False by default to avoid verbose SQL logging +engine = create_engine(settings.database_url, echo=False) + +def get_session(): + """ + Dependency that yields a database session. + Useful for FastAPI dependencies. + """ + with Session(engine) as session: + yield session + +def create_db_and_tables(): + """ + Create all tables defined in SQLModel metadata. + """ + SQLModel.metadata.create_all(engine) + +def get_engine(): + """ + Returns the database engine. + """ + return engine diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/ca_biositing.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/ca_biositing.yaml index 94d9f8d2..fed17afb 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/ca_biositing.yaml +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/ca_biositing.yaml @@ -30,3 +30,5 @@ imports: - modules/aim1_records - modules/aim2_records - modules/external_data + - modules/infrastructure + - modules/geography diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/resource_information.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/resource_information.yaml index eb2ca5ed..f06fa29d 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/resource_information.yaml +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/resource_information.yaml @@ -26,6 +26,7 @@ classes: - resource_class_id - resource_subclass_id - note + - test ResourceClass: is_a: LookupBase @@ -100,6 +101,10 @@ slots: range: integer description: Reference to ResourceSubclass. + test: + range: string + description: Test field. + #ResourceAvailability slots resource_id: diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim1_records.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim1_records.py index ef08780e..075f0de2 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim1_records.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim1_records.py @@ -896,6 +896,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -904,7 +905,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim2_records.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim2_records.py index db37c954..45edb52c 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim2_records.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim2_records.py @@ -922,6 +922,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -930,7 +931,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/ca_biositing.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/ca_biositing.py index 7cdc3fb0..734d1d17 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/ca_biositing.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/ca_biositing.py @@ -288,6 +288,449 @@ def __repr__(self): +class InfrastructureBiodieselPlants(Base): + """ + Biodiesel plants infrastructure. + """ + __tablename__ = 'infrastructure_biodiesel_plants' + + biodiesel_plant_id = Column(Integer(), primary_key=True, nullable=False ) + company = Column(Text()) + bbi_index = Column(Integer()) + city = Column(Text()) + state = Column(Text()) + capacity_mmg_per_y = Column(Integer()) + feedstock = Column(Text()) + status = Column(Text()) + address = Column(Text()) + coordinates = Column(Text()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + source = Column(Text()) + + + def __repr__(self): + return f"InfrastructureBiodieselPlants(biodiesel_plant_id={self.biodiesel_plant_id},company={self.company},bbi_index={self.bbi_index},city={self.city},state={self.state},capacity_mmg_per_y={self.capacity_mmg_per_y},feedstock={self.feedstock},status={self.status},address={self.address},coordinates={self.coordinates},latitude={self.latitude},longitude={self.longitude},source={self.source},)" + + + + + + +class InfrastructureBiosolidsFacilities(Base): + """ + Biosolids facilities infrastructure. + """ + __tablename__ = 'infrastructure_biosolids_facilities' + + biosolid_facility_id = Column(Integer(), primary_key=True, nullable=False ) + report_submitted_date = Column(Date()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + facility = Column(Text()) + authority = Column(Text()) + plant_type = Column(Text()) + aqmd = Column(Text()) + facility_address = Column(Text()) + facility_city = Column(Text()) + state = Column(Text()) + facility_zip = Column(Text()) + facility_county = Column(Text()) + mailing_street_1 = Column(Text()) + mailing_city = Column(Text()) + mailing_state = Column(Text()) + mailing_zip = Column(Text()) + biosolids_number = Column(Text()) + biosolids_contact = Column(Text()) + biosolids_contact_phone = Column(Text()) + biosolids_contact_email = Column(Text()) + adwf = Column(Numeric()) + potw_biosolids_generated = Column(Integer()) + twtds_biosolids_treated = Column(Integer()) + class_b_land_app = Column(Integer()) + class_b_applier = Column(Text()) + class_a_compost = Column(Integer()) + class_a_heat_dried = Column(Integer()) + class_a_other = Column(Integer()) + class_a_other_applier = Column(Text()) + twtds_transfer_to_second_preparer = Column(Integer()) + twtds_second_preparer_name = Column(Text()) + adc_or_final_c = Column(Integer()) + landfill = Column(Integer()) + landfill_name = Column(Text()) + surface_disposal = Column(Integer()) + deepwell_injection = Column(Text()) + stored = Column(Integer()) + longterm_treatment = Column(Integer()) + other = Column(Integer()) + name_of_other = Column(Text()) + incineration = Column(Integer()) + + + def __repr__(self): + return f"InfrastructureBiosolidsFacilities(biosolid_facility_id={self.biosolid_facility_id},report_submitted_date={self.report_submitted_date},latitude={self.latitude},longitude={self.longitude},facility={self.facility},authority={self.authority},plant_type={self.plant_type},aqmd={self.aqmd},facility_address={self.facility_address},facility_city={self.facility_city},state={self.state},facility_zip={self.facility_zip},facility_county={self.facility_county},mailing_street_1={self.mailing_street_1},mailing_city={self.mailing_city},mailing_state={self.mailing_state},mailing_zip={self.mailing_zip},biosolids_number={self.biosolids_number},biosolids_contact={self.biosolids_contact},biosolids_contact_phone={self.biosolids_contact_phone},biosolids_contact_email={self.biosolids_contact_email},adwf={self.adwf},potw_biosolids_generated={self.potw_biosolids_generated},twtds_biosolids_treated={self.twtds_biosolids_treated},class_b_land_app={self.class_b_land_app},class_b_applier={self.class_b_applier},class_a_compost={self.class_a_compost},class_a_heat_dried={self.class_a_heat_dried},class_a_other={self.class_a_other},class_a_other_applier={self.class_a_other_applier},twtds_transfer_to_second_preparer={self.twtds_transfer_to_second_preparer},twtds_second_preparer_name={self.twtds_second_preparer_name},adc_or_final_c={self.adc_or_final_c},landfill={self.landfill},landfill_name={self.landfill_name},surface_disposal={self.surface_disposal},deepwell_injection={self.deepwell_injection},stored={self.stored},longterm_treatment={self.longterm_treatment},other={self.other},name_of_other={self.name_of_other},incineration={self.incineration},)" + + + + + + +class InfrastructureCafoManureLocations(Base): + """ + CAFO manure locations infrastructure. + """ + __tablename__ = 'infrastructure_cafo_manure_locations' + + cafo_manure_id = Column(Integer(), primary_key=True, nullable=False ) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + owner_name = Column(Text()) + facility_name = Column(Text()) + address = Column(Text()) + town = Column(Text()) + state = Column(Text()) + zip = Column(Text()) + animal = Column(Text()) + animal_feed_operation_type = Column(Text()) + animal_units = Column(Integer()) + animal_count = Column(Integer()) + manure_total_solids = Column(Numeric()) + source = Column(Text()) + date_accessed = Column(Date()) + + + def __repr__(self): + return f"InfrastructureCafoManureLocations(cafo_manure_id={self.cafo_manure_id},latitude={self.latitude},longitude={self.longitude},owner_name={self.owner_name},facility_name={self.facility_name},address={self.address},town={self.town},state={self.state},zip={self.zip},animal={self.animal},animal_feed_operation_type={self.animal_feed_operation_type},animal_units={self.animal_units},animal_count={self.animal_count},manure_total_solids={self.manure_total_solids},source={self.source},date_accessed={self.date_accessed},)" + + + + + + +class InfrastructureEthanolBiorefineries(Base): + """ + Ethanol biorefineries infrastructure. + """ + __tablename__ = 'infrastructure_ethanol_biorefineries' + + ethanol_biorefinery_id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + city = Column(Text()) + state = Column(Text()) + address = Column(Text()) + type = Column(Text()) + capacity_mgy = Column(Integer()) + production_mgy = Column(Integer()) + constr_exp = Column(Integer()) + + + def __repr__(self): + return f"InfrastructureEthanolBiorefineries(ethanol_biorefinery_id={self.ethanol_biorefinery_id},name={self.name},city={self.city},state={self.state},address={self.address},type={self.type},capacity_mgy={self.capacity_mgy},production_mgy={self.production_mgy},constr_exp={self.constr_exp},)" + + + + + + +class InfrastructureLandfills(Base): + """ + Landfills infrastructure. + """ + __tablename__ = 'infrastructure_landfills' + + project_id = Column(Text(), primary_key=True, nullable=False ) + project_int_id = Column(Integer()) + ghgrp_id = Column(Text()) + landfill_id = Column(Integer()) + landfill_name = Column(Text()) + state = Column(Text()) + physical_address = Column(Text()) + city = Column(Text()) + county = Column(Text()) + zip_code = Column(Text()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + ownership_type = Column(Text()) + landfill_owner_orgs = Column(Text()) + landfill_opened_year = Column(Date()) + landfill_closure_year = Column(Date()) + landfill_status = Column(Text()) + waste_in_place = Column(Integer()) + waste_in_place_year = Column(Date()) + lfg_system_in_place = Column(Boolean()) + lfg_collected = Column(Numeric()) + lfg_flared = Column(Numeric()) + project_status = Column(Text()) + project_name = Column(Text()) + project_start_date = Column(Date()) + project_shutdown_date = Column(Date()) + project_type_category = Column(Text()) + lfg_energy_project_type = Column(Text()) + rng_delivery_method = Column(Text()) + actual_mw_generation = Column(Numeric()) + rated_mw_capacity = Column(Numeric()) + lfg_flow_to_project = Column(Numeric()) + direct_emission_reductions = Column(Numeric()) + avoided_emission_reductions = Column(Numeric()) + + + def __repr__(self): + return f"InfrastructureLandfills(project_id={self.project_id},project_int_id={self.project_int_id},ghgrp_id={self.ghgrp_id},landfill_id={self.landfill_id},landfill_name={self.landfill_name},state={self.state},physical_address={self.physical_address},city={self.city},county={self.county},zip_code={self.zip_code},latitude={self.latitude},longitude={self.longitude},ownership_type={self.ownership_type},landfill_owner_orgs={self.landfill_owner_orgs},landfill_opened_year={self.landfill_opened_year},landfill_closure_year={self.landfill_closure_year},landfill_status={self.landfill_status},waste_in_place={self.waste_in_place},waste_in_place_year={self.waste_in_place_year},lfg_system_in_place={self.lfg_system_in_place},lfg_collected={self.lfg_collected},lfg_flared={self.lfg_flared},project_status={self.project_status},project_name={self.project_name},project_start_date={self.project_start_date},project_shutdown_date={self.project_shutdown_date},project_type_category={self.project_type_category},lfg_energy_project_type={self.lfg_energy_project_type},rng_delivery_method={self.rng_delivery_method},actual_mw_generation={self.actual_mw_generation},rated_mw_capacity={self.rated_mw_capacity},lfg_flow_to_project={self.lfg_flow_to_project},direct_emission_reductions={self.direct_emission_reductions},avoided_emission_reductions={self.avoided_emission_reductions},)" + + + + + + +class InfrastructureLivestockAnaerobicDigesters(Base): + """ + Livestock anaerobic digesters infrastructure. + """ + __tablename__ = 'infrastructure_livestock_anaerobic_digesters' + + digester_id = Column(Integer(), primary_key=True, nullable=False ) + project_name = Column(Text()) + project_type = Column(Text()) + city = Column(Text()) + state = Column(Text()) + digester_type = Column(Text()) + profile = Column(Text()) + year_operational = Column(Date()) + animal_type_class = Column(Text()) + animal_types = Column(Text()) + pop_feeding_digester = Column(Text()) + total_pop_feeding_digester = Column(Integer()) + cattle = Column(Integer()) + dairy = Column(Integer()) + poultry = Column(Integer()) + swine = Column(Integer()) + codigestion = Column(Text()) + biogas_generation_estimate = Column(Integer()) + electricity_generated = Column(Integer()) + biogas_end_uses = Column(Text()) + methane_emission_reductions = Column(Integer()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + + + def __repr__(self): + return f"InfrastructureLivestockAnaerobicDigesters(digester_id={self.digester_id},project_name={self.project_name},project_type={self.project_type},city={self.city},state={self.state},digester_type={self.digester_type},profile={self.profile},year_operational={self.year_operational},animal_type_class={self.animal_type_class},animal_types={self.animal_types},pop_feeding_digester={self.pop_feeding_digester},total_pop_feeding_digester={self.total_pop_feeding_digester},cattle={self.cattle},dairy={self.dairy},poultry={self.poultry},swine={self.swine},codigestion={self.codigestion},biogas_generation_estimate={self.biogas_generation_estimate},electricity_generated={self.electricity_generated},biogas_end_uses={self.biogas_end_uses},methane_emission_reductions={self.methane_emission_reductions},latitude={self.latitude},longitude={self.longitude},)" + + + + + + +class InfrastructureSafAndRenewableDieselPlants(Base): + """ + SAF and renewable diesel plants infrastructure. + """ + __tablename__ = 'infrastructure_saf_and_renewable_diesel_plants' + + ibcc_index = Column(Integer(), primary_key=True, nullable=False ) + company = Column(Text()) + city = Column(Text()) + state = Column(Text()) + country = Column(Text()) + capacity = Column(Text()) + feedstock = Column(Text()) + products = Column(Text()) + status = Column(Text()) + address = Column(Text()) + coordinates = Column(Text()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + + + def __repr__(self): + return f"InfrastructureSafAndRenewableDieselPlants(ibcc_index={self.ibcc_index},company={self.company},city={self.city},state={self.state},country={self.country},capacity={self.capacity},feedstock={self.feedstock},products={self.products},status={self.status},address={self.address},coordinates={self.coordinates},latitude={self.latitude},longitude={self.longitude},)" + + + + + + +class InfrastructureWastewaterTreatmentPlants(Base): + """ + Wastewater treatment plants infrastructure. + """ + __tablename__ = 'infrastructure_wastewater_treatment_plants' + + plant_id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + state = Column(Text()) + codigestion = Column(Text()) + flow_design_adjusted = Column(Numeric()) + flow_average = Column(Numeric()) + biosolids = Column(Numeric()) + excess_flow = Column(Numeric()) + biogas_utilized = Column(Boolean()) + flaring = Column(Boolean()) + excess_mass_loading_rate = Column(Numeric()) + excess_mass_loading_rate_wet = Column(Numeric()) + methane_production = Column(Numeric()) + energy_content = Column(Numeric()) + electric_kw = Column(Numeric()) + thermal_mmbtu_d = Column(Numeric()) + electric_kwh = Column(Numeric()) + thermal_annual_mmbtu_y = Column(Numeric()) + anaerobic_digestion_facility = Column(Text()) + county = Column(Text()) + dayload_bdt = Column(Numeric()) + dayload = Column(Numeric()) + equivalent_generation = Column(Numeric()) + facility_type = Column(Text()) + feedstock = Column(Text()) + type = Column(Text()) + city = Column(Text()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + zipcode = Column(Text()) + + + def __repr__(self): + return f"InfrastructureWastewaterTreatmentPlants(plant_id={self.plant_id},name={self.name},state={self.state},codigestion={self.codigestion},flow_design_adjusted={self.flow_design_adjusted},flow_average={self.flow_average},biosolids={self.biosolids},excess_flow={self.excess_flow},biogas_utilized={self.biogas_utilized},flaring={self.flaring},excess_mass_loading_rate={self.excess_mass_loading_rate},excess_mass_loading_rate_wet={self.excess_mass_loading_rate_wet},methane_production={self.methane_production},energy_content={self.energy_content},electric_kw={self.electric_kw},thermal_mmbtu_d={self.thermal_mmbtu_d},electric_kwh={self.electric_kwh},thermal_annual_mmbtu_y={self.thermal_annual_mmbtu_y},anaerobic_digestion_facility={self.anaerobic_digestion_facility},county={self.county},dayload_bdt={self.dayload_bdt},dayload={self.dayload},equivalent_generation={self.equivalent_generation},facility_type={self.facility_type},feedstock={self.feedstock},type={self.type},city={self.city},latitude={self.latitude},longitude={self.longitude},zipcode={self.zipcode},)" + + + + + + +class InfrastructureCombustionPlants(Base): + """ + Combustion plants infrastructure. + """ + __tablename__ = 'infrastructure_combustion_plants' + + combustion_fid = Column(Integer(), primary_key=True, nullable=False ) + objectid = Column(Integer()) + status = Column(Text()) + city = Column(Text()) + name = Column(Text()) + county = Column(Text()) + equivalent_generation = Column(Numeric()) + np_mw = Column(Numeric()) + cf = Column(Numeric()) + yearload = Column(Integer()) + fuel = Column(Text()) + notes = Column(Text()) + type = Column(Text()) + wkt_geom = Column(Text()) + geom = Column(Text()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + + + def __repr__(self): + return f"InfrastructureCombustionPlants(combustion_fid={self.combustion_fid},objectid={self.objectid},status={self.status},city={self.city},name={self.name},county={self.county},equivalent_generation={self.equivalent_generation},np_mw={self.np_mw},cf={self.cf},yearload={self.yearload},fuel={self.fuel},notes={self.notes},type={self.type},wkt_geom={self.wkt_geom},geom={self.geom},latitude={self.latitude},longitude={self.longitude},)" + + + + + + +class InfrastructureDistrictEnergySystems(Base): + """ + District energy systems infrastructure. + """ + __tablename__ = 'infrastructure_district_energy_systems' + + des_fid = Column(Integer(), primary_key=True, nullable=False ) + cbg_id = Column(Integer()) + name = Column(Text()) + system = Column(Text()) + object_id = Column(Integer()) + city = Column(Text()) + state = Column(Text()) + primary_fuel = Column(Text()) + secondary_fuel = Column(Text()) + usetype = Column(Text()) + cap_st = Column(Numeric()) + cap_hw = Column(Numeric()) + cap_cw = Column(Numeric()) + chpcg_cap = Column(Numeric()) + excess_c = Column(Numeric()) + excess_h = Column(Numeric()) + type = Column(Text()) + wkt_geom = Column(Text()) + geom = Column(Text()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + + + def __repr__(self): + return f"InfrastructureDistrictEnergySystems(des_fid={self.des_fid},cbg_id={self.cbg_id},name={self.name},system={self.system},object_id={self.object_id},city={self.city},state={self.state},primary_fuel={self.primary_fuel},secondary_fuel={self.secondary_fuel},usetype={self.usetype},cap_st={self.cap_st},cap_hw={self.cap_hw},cap_cw={self.cap_cw},chpcg_cap={self.chpcg_cap},excess_c={self.excess_c},excess_h={self.excess_h},type={self.type},wkt_geom={self.wkt_geom},geom={self.geom},latitude={self.latitude},longitude={self.longitude},)" + + + + + + +class InfrastructureFoodProcessingFacilities(Base): + """ + Food processing facilities infrastructure. + """ + __tablename__ = 'infrastructure_food_processing_facilities' + + processing_facility_id = Column(Integer(), primary_key=True, nullable=False ) + address = Column(Text()) + county = Column(Text()) + city = Column(Text()) + company = Column(Text()) + join_count = Column(Integer()) + master_type = Column(Text()) + state = Column(Text()) + subtype = Column(Text()) + target_fid = Column(Integer()) + processing_type = Column(Text()) + zip = Column(Text()) + type = Column(Text()) + wkt_geom = Column(Text()) + geom = Column(Text()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + + + def __repr__(self): + return f"InfrastructureFoodProcessingFacilities(processing_facility_id={self.processing_facility_id},address={self.address},county={self.county},city={self.city},company={self.company},join_count={self.join_count},master_type={self.master_type},state={self.state},subtype={self.subtype},target_fid={self.target_fid},processing_type={self.processing_type},zip={self.zip},type={self.type},wkt_geom={self.wkt_geom},geom={self.geom},latitude={self.latitude},longitude={self.longitude},)" + + + + + + +class InfrastructureMswToEnergyAnaerobicDigesters(Base): + """ + MSW to energy anaerobic digesters infrastructure. + """ + __tablename__ = 'infrastructure_msw_to_energy_anaerobic_digesters' + + wte_id = Column(Integer(), primary_key=True, nullable=False ) + city = Column(Text()) + county = Column(Text()) + equivalent_generation = Column(Numeric()) + feedstock = Column(Text()) + dayload = Column(Numeric()) + dayload_bdt = Column(Numeric()) + facility_type = Column(Text()) + status = Column(Text()) + notes = Column(Text()) + source = Column(Text()) + type = Column(Text()) + wkt_geom = Column(Text()) + geom = Column(Text()) + latitude = Column(Numeric()) + longitude = Column(Numeric()) + + + def __repr__(self): + return f"InfrastructureMswToEnergyAnaerobicDigesters(wte_id={self.wte_id},city={self.city},county={self.county},equivalent_generation={self.equivalent_generation},feedstock={self.feedstock},dayload={self.dayload},dayload_bdt={self.dayload_bdt},facility_type={self.facility_type},status={self.status},notes={self.notes},source={self.source},type={self.type},wkt_geom={self.wkt_geom},geom={self.geom},latitude={self.latitude},longitude={self.longitude},)" + + + + + + class Resource(BaseEntity): """ Biomass resource definition. @@ -299,6 +742,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -307,7 +751,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" @@ -1943,6 +2387,40 @@ def __repr__(self): +class FacilityRecord(BaseEntity): + """ + Facility record. + """ + __tablename__ = 'facility_record' + + dataset_id = Column(Integer()) + facility_name = Column(Text()) + location_id = Column(Integer()) + capacity_mw = Column(Numeric()) + resource_id = Column(Integer()) + operator = Column(Text()) + start_year = Column(Integer()) + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + created_at = Column(DateTime()) + updated_at = Column(DateTime()) + etl_run_id = Column(Text()) + lineage_group_id = Column(Integer()) + + + def __repr__(self): + return f"FacilityRecord(dataset_id={self.dataset_id},facility_name={self.facility_name},location_id={self.location_id},capacity_mw={self.capacity_mw},resource_id={self.resource_id},operator={self.operator},start_year={self.start_year},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + class ProximateRecord(Aim1RecordBase): """ Proximate analysis record. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/data_sources_metadata.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/data_sources_metadata.py index 975b6bd5..9183431c 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/data_sources_metadata.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/data_sources_metadata.py @@ -387,6 +387,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -395,7 +396,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/experiment_equipment.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/experiment_equipment.py index b93abd1f..ae56a768 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/experiment_equipment.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/experiment_equipment.py @@ -1082,6 +1082,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -1090,7 +1091,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/external_data.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/external_data.py index d86817b3..d854df67 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/external_data.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/external_data.py @@ -1045,6 +1045,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -1053,7 +1054,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/field_sampling.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/field_sampling.py index f699dc79..822de073 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/field_sampling.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/field_sampling.py @@ -516,6 +516,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -524,7 +525,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/general_analysis.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/general_analysis.py index 88195134..6470faba 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/general_analysis.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/general_analysis.py @@ -505,6 +505,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -513,7 +514,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/infrastructure.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/infrastructure.py index 833b7951..796558e4 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/infrastructure.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/infrastructure.py @@ -864,6 +864,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -872,7 +873,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/methods_parameters_units.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/methods_parameters_units.py index 61f06d91..6be929f8 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/methods_parameters_units.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/methods_parameters_units.py @@ -420,6 +420,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -428,7 +429,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/resource_information.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/resource_information.py index b1d3d70e..bc84a0af 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/resource_information.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/resource_information.py @@ -103,6 +103,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -111,7 +112,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/sample_preparation.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/sample_preparation.py index db5d6386..b543fbaa 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/sample_preparation.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/sample_preparation.py @@ -321,6 +321,7 @@ class Resource(BaseEntity): resource_class_id = Column(Integer()) resource_subclass_id = Column(Integer()) note = Column(Text()) + test = Column(Text()) id = Column(Integer(), primary_key=True, nullable=False ) created_at = Column(DateTime()) updated_at = Column(DateTime()) @@ -329,7 +330,7 @@ class Resource(BaseEntity): def __repr__(self): - return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)" + return f"Resource(name={self.name},primary_crop_id={self.primary_crop_id},resource_class_id={self.resource_class_id},resource_subclass_id={self.resource_subclass_id},note={self.note},test={self.test},id={self.id},created_at={self.created_at},updated_at={self.updated_at},etl_run_id={self.etl_run_id},lineage_group_id={self.lineage_group_id},)"