diff --git a/README.md b/README.md index 114d504c..3eacc3b9 100644 --- a/README.md +++ b/README.md @@ -10,8 +10,8 @@ data access. This project uses a **PEP 420 namespace package** structure with three main components: -- **`ca_biositing.datamodels`**: Shared SQLModel database models and database - configuration +- **`ca_biositing.datamodels`**: Shared LinkML/SQLModel database models and + database configuration - **`ca_biositing.pipeline`**: ETL pipelines orchestrated with Prefect, deployed via Docker - **`ca_biositing.webservice`**: FastAPI REST API for data access @@ -152,6 +152,7 @@ Key tasks: - **Development**: `test`, `test-cov`, `pre-commit`, `pre-commit-all` - **Applications**: `start-webservice`, `qgis` - **Database**: `access-db`, `check-db-health` +- **Datamodels**: `update-schema`, `migrate` ## Architecture @@ -181,6 +182,15 @@ Pipeline architecture: ### Database Models +We use a **LinkML-first approach** for defining our data schema. The workflow +is: + +1. **LinkML Schema**: The schema is defined in YAML files (source of truth). +2. **SQLAlchemy Generation**: Python classes are automatically generated from + LinkML. +3. **Alembic Migrations**: Database migrations are generated from the Python + classes. + SQLModel-based models provide: - Type-safe database operations diff --git a/alembic/env.py b/alembic/env.py index cd3a09ea..068e73bb 100644 --- a/alembic/env.py +++ b/alembic/env.py @@ -13,17 +13,18 @@ load_dotenv(dotenv_path=PROJECT_ROOT / ".env") # Looks for .env in the project root by default # --- Import your models so Alembic knows about them --- -from ca_biositing.datamodels.biomass import * -from ca_biositing.datamodels.data_and_references import * -from ca_biositing.datamodels.experiments_analysis import * -from ca_biositing.datamodels.external_datasets import * -from ca_biositing.datamodels.geographic_locations import * -from ca_biositing.datamodels.metadata_samples import * -from ca_biositing.datamodels.organizations import * -from ca_biositing.datamodels.people_contacts import * -from ca_biositing.datamodels.sample_preprocessing import * -from ca_biositing.datamodels.specific_aalysis_results import * -from ca_biositing.datamodels.user import * +# from ca_biositing.datamodels.biomass import * +# from ca_biositing.datamodels.data_and_references import * +# from ca_biositing.datamodels.experiments_analysis import * +# from ca_biositing.datamodels.external_datasets import * +# from ca_biositing.datamodels.geographic_locations import * +# from ca_biositing.datamodels.metadata_samples import * +# from ca_biositing.datamodels.organizations import * +# from ca_biositing.datamodels.people_contacts import * +# from ca_biositing.datamodels.sample_preprocessing import * +# from ca_biositing.datamodels.specific_aalysis_results import * +# from ca_biositing.datamodels.user import * +from ca_biositing.datamodels.schemas.generated.ca_biositing import * from sqlmodel import SQLModel import importlib.util from pathlib import Path @@ -51,7 +52,8 @@ # See: https://alembic.sqlalchemy.org/en/latest/autogenerate.html#affecting-the-autogenerate-process # Start with the default SQLModel metadata -target_metadata = SQLModel.metadata +# target_metadata = SQLModel.metadata +target_metadata = Base.metadata # Manually merge metadata from generated modules # for table in census_metadata.tables.values(): diff --git a/alembic/versions/301006b4795f_initial_migration.py b/alembic/versions/184417c6d044_deleted_duplicate_yaml_files.py similarity index 72% rename from alembic/versions/301006b4795f_initial_migration.py rename to alembic/versions/184417c6d044_deleted_duplicate_yaml_files.py index 8e4f7afd..1afa0f71 100644 --- a/alembic/versions/301006b4795f_initial_migration.py +++ b/alembic/versions/184417c6d044_deleted_duplicate_yaml_files.py @@ -1,8 +1,8 @@ -"""Initial migration +"""Deleted duplicate .yaml files -Revision ID: 301006b4795f -Revises: e15bda744fef -Create Date: 2025-11-12 20:54:01.573577 +Revision ID: 184417c6d044 +Revises: bfa07351a507 +Create Date: 2025-12-17 19:03:32.278635 """ from typing import Sequence, Union @@ -12,8 +12,8 @@ # revision identifiers, used by Alembic. -revision: str = '301006b4795f' -down_revision: Union[str, Sequence[str], None] = 'e15bda744fef' +revision: str = '184417c6d044' +down_revision: Union[str, Sequence[str], None] = 'bfa07351a507' branch_labels: Union[str, Sequence[str], None] = None depends_on: Union[str, Sequence[str], None] = None diff --git a/alembic/versions/1e9784d75e62_initial_migration.py b/alembic/versions/1e9784d75e62_initial_migration.py new file mode 100644 index 00000000..83745dc2 --- /dev/null +++ b/alembic/versions/1e9784d75e62_initial_migration.py @@ -0,0 +1,1112 @@ +"""Initial migration + +Revision ID: 1e9784d75e62 +Revises: +Create Date: 2025-12-08 22:50:05.973054 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = '1e9784d75e62' +down_revision: Union[str, Sequence[str], None] = None +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('ag_treatment', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('aim1_record_base', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('aim2_record_base', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('analyst_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), 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('analysis_type', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('autoclave_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('analyst_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), 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('base_entity', + 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('billion_ton2023_record', + sa.Column('subclass_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('geoid', sa.Text(), nullable=True), + sa.Column('county_square_miles', sa.Float(), nullable=True), + sa.Column('model_name', sa.Text(), nullable=True), + sa.Column('scenario_name', sa.Text(), nullable=True), + sa.Column('price_offered_usd', sa.Numeric(), nullable=True), + sa.Column('production', sa.Integer(), nullable=True), + sa.Column('production_unit_id', sa.Integer(), nullable=True), + sa.Column('btu_ton', sa.Integer(), nullable=True), + sa.Column('production_energy_content', sa.Integer(), nullable=True), + sa.Column('energy_content_unit_id', sa.Integer(), nullable=True), + sa.Column('product_density_dtpersqmi', sa.Numeric(), nullable=True), + sa.Column('land_source', 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('calorimetry_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('collection_method', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('compositional_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('contact', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('first_name', sa.Text(), nullable=True), + sa.Column('last_name', sa.Text(), nullable=True), + sa.Column('email', sa.Text(), nullable=True), + sa.Column('affiliation', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('data_source', + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.Column('publication_date', sa.Date(), nullable=True), + sa.Column('version', sa.Text(), nullable=True), + sa.Column('publisher', sa.Text(), nullable=True), + sa.Column('author', sa.Text(), nullable=True), + sa.Column('license', sa.Text(), 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('data_source_type', + sa.Column('source_type_id', sa.Integer(), 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('dataset', + sa.Column('name', sa.Text(), nullable=True), + sa.Column('record_type', sa.Text(), nullable=True), + sa.Column('source_id', sa.Integer(), nullable=True), + sa.Column('start_date', sa.Date(), nullable=True), + sa.Column('end_date', sa.Date(), nullable=True), + sa.Column('description', 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('dimension_type', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('entity_lineage', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('lineage_group_id', sa.Integer(), nullable=True), + sa.Column('source_table', sa.Text(), nullable=True), + sa.Column('source_row_id', sa.Text(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('equipment', + sa.Column('equipment_location_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('etl_run', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('started_at', sa.DateTime(), nullable=True), + sa.Column('completed_at', sa.DateTime(), nullable=True), + sa.Column('pipeline_name', sa.Text(), nullable=True), + sa.Column('status', sa.Text(), nullable=True), + sa.Column('records_ingested', sa.Integer(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('experiment', + sa.Column('analyst_id', sa.Integer(), nullable=True), + sa.Column('exper_start_date', sa.Date(), nullable=True), + sa.Column('exper_duration', sa.Numeric(), nullable=True), + sa.Column('exper_duration_unit_id', sa.Integer(), nullable=True), + sa.Column('exper_location_id', sa.Integer(), nullable=True), + sa.Column('description', 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('experiment_analysis', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('analysis_type_id', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('experiment_equipment', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('equipment_id', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('experiment_method', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('experiment_prepared_sample', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('prepared_sample_id', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('fermentation_record', + sa.Column('strain_id', sa.Integer(), nullable=True), + sa.Column('pretreatment_method_id', sa.Integer(), nullable=True), + sa.Column('eh_method_id', sa.Integer(), nullable=True), + sa.Column('replicate_no', sa.Integer(), nullable=True), + sa.Column('well_position', sa.Text(), nullable=True), + sa.Column('temperature', sa.Numeric(), nullable=True), + sa.Column('agitation_rpm', sa.Numeric(), nullable=True), + sa.Column('vessel_id', sa.Integer(), nullable=True), + sa.Column('analyte_detection_equipment_id', sa.Integer(), nullable=True), + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('analyst_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), 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('field_sample', + sa.Column('name', sa.Text(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('provider_id', sa.Integer(), nullable=True), + sa.Column('collector_id', sa.Integer(), nullable=True), + sa.Column('sample_collection_source', sa.Text(), nullable=True), + sa.Column('amount_collected', sa.Numeric(), nullable=True), + sa.Column('amount_collected_unit_id', sa.Integer(), nullable=True), + sa.Column('sampling_location_id', sa.Integer(), nullable=True), + sa.Column('field_storage_method_id', sa.Integer(), nullable=True), + sa.Column('field_storage_duration_value', sa.Numeric(), nullable=True), + sa.Column('field_storage_duration_unit_id', sa.Integer(), nullable=True), + sa.Column('field_storage_location_id', sa.Integer(), nullable=True), + sa.Column('collection_timestamp', sa.DateTime(), nullable=True), + sa.Column('collection_method_id', sa.Integer(), nullable=True), + sa.Column('harvest_method_id', sa.Integer(), nullable=True), + sa.Column('harvest_date', sa.Date(), nullable=True), + sa.Column('field_sample_storage_location_id', 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('field_sample_condition', + sa.Column('field_sample_id', sa.Integer(), nullable=True), + sa.Column('ag_treatment_id', sa.Integer(), nullable=True), + sa.Column('last_application_date', sa.Date(), nullable=True), + sa.Column('treatment_amount_per_acre', sa.Float(), nullable=True), + sa.Column('processing_method_id', sa.Integer(), 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('field_storage_method', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('file_object_metadata', + sa.Column('data_source_id', sa.Integer(), nullable=True), + sa.Column('bucket_path', sa.Text(), nullable=True), + sa.Column('file_format', sa.Text(), nullable=True), + sa.Column('file_size', sa.Integer(), nullable=True), + sa.Column('checksum_md5', sa.Text(), nullable=True), + sa.Column('checksum_sha256', 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('ftnir_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('gasification_record', + sa.Column('feedstock_mass', sa.Numeric(), nullable=True), + sa.Column('bed_temperature', sa.Numeric(), nullable=True), + sa.Column('gas_flow_rate', sa.Numeric(), nullable=True), + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('analyst_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), 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('geography', + sa.Column('geoid', sa.Text(), nullable=False), + sa.Column('state_name', sa.Text(), nullable=True), + sa.Column('state_fips', sa.Text(), nullable=True), + sa.Column('county_name', sa.Text(), nullable=True), + sa.Column('county_fips', sa.Text(), nullable=True), + sa.Column('region_name', sa.Text(), nullable=True), + sa.Column('agg_level_desc', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('geoid') + ) + op.create_table('harvest_method', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('icp_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('landiq_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('polygon_id', sa.Integer(), nullable=True), + sa.Column('main_crop', sa.Integer(), nullable=True), + sa.Column('secondary_crop', sa.Integer(), nullable=True), + sa.Column('tertiary_crop', sa.Integer(), nullable=True), + sa.Column('quaternary_crop', sa.Integer(), nullable=True), + sa.Column('confidence', sa.Integer(), nullable=True), + sa.Column('irrigated', sa.Boolean(), nullable=True), + sa.Column('acres', sa.Float(), nullable=True), + sa.Column('version', sa.Text(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.Column('test', 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('lineage_group', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('etl_run_id', sa.Text(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('location_address', + sa.Column('geography_id', sa.Text(), nullable=True), + sa.Column('address_line1', sa.Text(), nullable=True), + sa.Column('address_line2', sa.Text(), nullable=True), + sa.Column('city', sa.Text(), nullable=True), + sa.Column('zip', sa.Text(), nullable=True), + sa.Column('lat', sa.Float(), nullable=True), + sa.Column('lon', sa.Float(), nullable=True), + sa.Column('is_anonymous', sa.Boolean(), 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('location_resolution', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('location_soil_type', + sa.Column('location_id', sa.Integer(), nullable=True), + sa.Column('soil_type_id', sa.Integer(), 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('lookup_base', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('method', + sa.Column('name', sa.Text(), nullable=True), + sa.Column('method_abbrev_id', sa.Integer(), nullable=True), + sa.Column('method_category_id', sa.Integer(), nullable=True), + sa.Column('method_standard_id', sa.Integer(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('detection_limits', sa.Text(), nullable=True), + sa.Column('source_id', sa.Integer(), 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('method_abbrev', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('method_category', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('method_standard', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('observation', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('record_type', sa.Text(), nullable=True), + sa.Column('record_id', sa.Integer(), nullable=True), + sa.Column('parameter_id', sa.Integer(), nullable=True), + sa.Column('value', sa.Numeric(), nullable=True), + sa.Column('unit_id', sa.Integer(), nullable=True), + sa.Column('dimension_type_id', sa.Integer(), nullable=True), + sa.Column('dimension_value', sa.Numeric(), nullable=True), + sa.Column('dimension_unit_id', 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('parameter', + sa.Column('name', sa.Text(), nullable=True), + sa.Column('standard_unit_id', sa.Integer(), nullable=True), + sa.Column('calculated', sa.Boolean(), nullable=True), + sa.Column('description', 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('parameter_category', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('parameter_category_parameter', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('parameter_id', sa.Integer(), nullable=True), + sa.Column('parameter_category_id', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('parameter_unit', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('parameter_id', sa.Integer(), nullable=True), + sa.Column('alternate_unit_id', sa.Integer(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('physical_characteristic', + sa.Column('field_sample_id', sa.Integer(), nullable=True), + sa.Column('particle_length', sa.Numeric(), nullable=True), + sa.Column('particle_width', sa.Numeric(), nullable=True), + sa.Column('particle_height', sa.Numeric(), nullable=True), + sa.Column('particle_unit_id', sa.Integer(), 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('polygon', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('geoid', sa.Text(), nullable=True), + sa.Column('geom', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('preparation_method', + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('prep_method_abbrev_id', sa.Integer(), nullable=True), + sa.Column('prep_temp_c', sa.Numeric(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.Column('drying_step', sa.Boolean(), 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('preparation_method_abbreviation', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('prepared_sample', + sa.Column('name', sa.Text(), nullable=True), + sa.Column('field_sample_id', sa.Integer(), nullable=True), + sa.Column('prep_method_id', sa.Integer(), nullable=True), + sa.Column('prep_date', sa.Date(), nullable=True), + sa.Column('preparer_id', 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('pretreatment_record', + sa.Column('pretreatment_method_id', sa.Integer(), nullable=True), + sa.Column('eh_method_id', sa.Integer(), nullable=True), + sa.Column('reaction_block_id', sa.Integer(), nullable=True), + sa.Column('block_position', sa.Text(), nullable=True), + sa.Column('temperature', sa.Numeric(), nullable=True), + sa.Column('replicate_no', sa.Integer(), nullable=True), + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('analyst_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), nullable=True), + sa.Column('note', sa.Text(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), 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('primary_crop', + sa.Column('note', sa.Text(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('processing_method', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('provider', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('codename', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('proximate_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('resource', + sa.Column('name', sa.Text(), nullable=True), + sa.Column('primary_crop_id', sa.Integer(), nullable=True), + sa.Column('resource_class_id', sa.Integer(), nullable=True), + sa.Column('resource_subclass_id', 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('resource_availability', + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('geoid', sa.Text(), nullable=True), + sa.Column('from_month', sa.Integer(), nullable=True), + sa.Column('to_month', sa.Integer(), nullable=True), + sa.Column('year_round', sa.Boolean(), 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('resource_class', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('resource_counterfactual', + sa.Column('geoid', sa.Text(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('counterfactual_description', sa.Text(), nullable=True), + sa.Column('animal_bedding_percent', sa.Numeric(), nullable=True), + sa.Column('animal_bedding_source_id', sa.Integer(), nullable=True), + sa.Column('animal_feed_percent', sa.Numeric(), nullable=True), + sa.Column('animal_feed_source_id', sa.Integer(), nullable=True), + sa.Column('bioelectricty_percent', sa.Numeric(), nullable=True), + sa.Column('bioelectricty_source_id', sa.Integer(), nullable=True), + sa.Column('burn_percent', sa.Numeric(), nullable=True), + sa.Column('burn_source_id', sa.Integer(), nullable=True), + sa.Column('compost_percent', sa.Numeric(), nullable=True), + sa.Column('compost_source_id', sa.Integer(), nullable=True), + sa.Column('landfill_percent', sa.Numeric(), nullable=True), + sa.Column('landfill_source_id', sa.Integer(), nullable=True), + sa.Column('counterfactual_date', sa.Date(), 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('resource_morphology', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('morphology_uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('resource_subclass', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('resource_usda_commodity_map', + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('primary_crop_id', sa.Integer(), nullable=True), + sa.Column('usda_commodity_id', sa.Integer(), nullable=True), + sa.Column('match_tier', sa.Text(), 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('rgb_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('soil_type', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('source_type', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('strain', + sa.Column('parent_strain_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('ultimate_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('unit', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('usda_census_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('geoid', sa.Text(), nullable=True), + sa.Column('commodity_code', sa.Integer(), nullable=True), + sa.Column('year', sa.Integer(), nullable=True), + sa.Column('source_reference', sa.Text(), 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('usda_commodity', + sa.Column('usda_source', sa.Text(), nullable=True), + sa.Column('usda_code', sa.Text(), nullable=True), + sa.Column('parent_commodity_id', sa.Integer(), nullable=True), + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('usda_domain', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('usda_market_record', + sa.Column('report_id', sa.Integer(), nullable=True), + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('report_begin_date', sa.DateTime(), nullable=True), + sa.Column('report_end_date', sa.DateTime(), nullable=True), + sa.Column('report_date', sa.DateTime(), nullable=True), + sa.Column('commodity_id', sa.Integer(), nullable=True), + sa.Column('market_type_id', sa.Integer(), nullable=True), + sa.Column('market_type_catagory', sa.Text(), nullable=True), + sa.Column('grp', sa.Text(), nullable=True), + sa.Column('market_catagory_id', sa.Integer(), nullable=True), + sa.Column('class_', sa.Text(), nullable=True), + sa.Column('grade', sa.Text(), nullable=True), + sa.Column('variety', sa.Text(), nullable=True), + sa.Column('protein_pct', sa.Numeric(), nullable=True), + sa.Column('application', sa.Text(), nullable=True), + sa.Column('pkg', sa.Text(), nullable=True), + sa.Column('sale_type', sa.Text(), nullable=True), + sa.Column('price_unit_id', sa.Integer(), nullable=True), + sa.Column('freight', sa.Text(), nullable=True), + sa.Column('trans_mode', 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('usda_market_report', + sa.Column('slug_id', sa.Integer(), nullable=True), + sa.Column('slug_name', sa.Text(), nullable=True), + sa.Column('report_series_title', sa.Text(), nullable=True), + sa.Column('frequency', sa.Text(), nullable=True), + sa.Column('office_name', sa.Text(), nullable=True), + sa.Column('office_city_id', sa.Integer(), nullable=True), + sa.Column('office_state_fips', sa.Text(), nullable=True), + sa.Column('source_id', sa.Integer(), 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('usda_statistic_category', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('usda_survey_program', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('name', sa.Text(), nullable=True), + sa.Column('description', sa.Text(), nullable=True), + sa.Column('uri', sa.Text(), nullable=True), + sa.PrimaryKeyConstraint('id') + ) + op.create_table('usda_survey_record', + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('geoid', sa.Text(), nullable=True), + sa.Column('commodity_code', sa.Integer(), nullable=True), + sa.Column('year', sa.Integer(), nullable=True), + sa.Column('survey_program_id', sa.Integer(), nullable=True), + sa.Column('survey_period', sa.Text(), nullable=True), + sa.Column('reference_month', sa.Text(), nullable=True), + sa.Column('seasonal_flag', sa.Boolean(), 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('usda_term_map', + sa.Column('source_system', sa.Text(), nullable=True), + sa.Column('source_context', sa.Text(), nullable=True), + sa.Column('raw_term', sa.Text(), nullable=True), + sa.Column('usda_commodity_id', sa.Integer(), nullable=True), + sa.Column('is_verified', sa.Boolean(), 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('xrd_record', + sa.Column('maybe_scan_low_nm', sa.Integer(), nullable=True), + sa.Column('maybe_scan_high_nm', sa.Integer(), nullable=True), + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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('xrf_record', + sa.Column('maybe_wavelength_nm', sa.Numeric(), nullable=True), + sa.Column('maybe_intensity', sa.Numeric(), nullable=True), + sa.Column('maybe_energy_slope', sa.Numeric(), nullable=True), + sa.Column('maybe_energy_offset', sa.Numeric(), nullable=True), + sa.Column('dataset_id', sa.Integer(), nullable=True), + sa.Column('experiment_id', sa.Integer(), nullable=True), + sa.Column('resource_id', sa.Integer(), nullable=True), + sa.Column('sample_id', sa.Integer(), nullable=True), + sa.Column('technical_replicate_no', sa.Integer(), nullable=True), + sa.Column('technical_replicate_total', sa.Integer(), nullable=True), + sa.Column('method_id', sa.Integer(), nullable=True), + sa.Column('raw_data_id', sa.Integer(), nullable=True), + sa.Column('qc_pass', sa.Boolean(), 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') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('xrf_record') + op.drop_table('xrd_record') + op.drop_table('usda_term_map') + op.drop_table('usda_survey_record') + op.drop_table('usda_survey_program') + op.drop_table('usda_statistic_category') + op.drop_table('usda_market_report') + op.drop_table('usda_market_record') + op.drop_table('usda_domain') + op.drop_table('usda_commodity') + op.drop_table('usda_census_record') + op.drop_table('unit') + op.drop_table('ultimate_record') + op.drop_table('strain') + op.drop_table('source_type') + op.drop_table('soil_type') + op.drop_table('rgb_record') + op.drop_table('resource_usda_commodity_map') + op.drop_table('resource_subclass') + op.drop_table('resource_morphology') + op.drop_table('resource_counterfactual') + op.drop_table('resource_class') + op.drop_table('resource_availability') + op.drop_table('resource') + op.drop_table('proximate_record') + op.drop_table('provider') + op.drop_table('processing_method') + op.drop_table('primary_crop') + op.drop_table('pretreatment_record') + op.drop_table('prepared_sample') + op.drop_table('preparation_method_abbreviation') + op.drop_table('preparation_method') + op.drop_table('polygon') + op.drop_table('physical_characteristic') + op.drop_table('parameter_unit') + op.drop_table('parameter_category_parameter') + op.drop_table('parameter_category') + op.drop_table('parameter') + op.drop_table('observation') + op.drop_table('method_standard') + op.drop_table('method_category') + op.drop_table('method_abbrev') + op.drop_table('method') + op.drop_table('lookup_base') + op.drop_table('location_soil_type') + op.drop_table('location_resolution') + op.drop_table('location_address') + op.drop_table('lineage_group') + op.drop_table('landiq_record') + op.drop_table('icp_record') + op.drop_table('harvest_method') + op.drop_table('geography') + op.drop_table('gasification_record') + op.drop_table('ftnir_record') + op.drop_table('file_object_metadata') + op.drop_table('field_storage_method') + op.drop_table('field_sample_condition') + op.drop_table('field_sample') + op.drop_table('fermentation_record') + op.drop_table('experiment_prepared_sample') + op.drop_table('experiment_method') + op.drop_table('experiment_equipment') + op.drop_table('experiment_analysis') + op.drop_table('experiment') + op.drop_table('etl_run') + op.drop_table('equipment') + op.drop_table('entity_lineage') + op.drop_table('dimension_type') + op.drop_table('dataset') + op.drop_table('data_source_type') + op.drop_table('data_source') + op.drop_table('contact') + op.drop_table('compositional_record') + op.drop_table('collection_method') + op.drop_table('calorimetry_record') + op.drop_table('billion_ton2023_record') + op.drop_table('base_entity') + op.drop_table('autoclave_record') + op.drop_table('analysis_type') + op.drop_table('aim2_record_base') + op.drop_table('aim1_record_base') + op.drop_table('ag_treatment') + # ### end Alembic commands ### diff --git a/alembic/versions/bfa07351a507_remove_hallucinations.py b/alembic/versions/bfa07351a507_remove_hallucinations.py new file mode 100644 index 00000000..68d853dd --- /dev/null +++ b/alembic/versions/bfa07351a507_remove_hallucinations.py @@ -0,0 +1,138 @@ +"""Remove hallucinations\ + +Revision ID: bfa07351a507 +Revises: d82910ff757e +Create Date: 2025-12-17 00:05:46.750313 + +""" +from typing import Sequence, Union + +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision: str = 'bfa07351a507' +down_revision: Union[str, Sequence[str], None] = '1e9784d75e62' +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.add_column('aim1_record_base', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('aim2_record_base', sa.Column('calc_method_id', sa.Integer(), nullable=True)) + op.add_column('aim2_record_base', sa.Column('calc_analyst_id', sa.Integer(), nullable=True)) + op.drop_column('aim2_record_base', 'analyst_id') + op.add_column('autoclave_record', sa.Column('calc_method_id', sa.Integer(), nullable=True)) + op.add_column('autoclave_record', sa.Column('calc_analyst_id', sa.Integer(), nullable=True)) + op.drop_column('autoclave_record', 'analyst_id') + op.add_column('calorimetry_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('compositional_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('contact', sa.Column('created_at', sa.DateTime(), nullable=True)) + op.add_column('contact', sa.Column('updated_at', sa.DateTime(), nullable=True)) + op.add_column('contact', sa.Column('etl_run_id', sa.Text(), nullable=True)) + op.add_column('contact', sa.Column('lineage_group_id', sa.Integer(), nullable=True)) + op.add_column('data_source', sa.Column('data_source_type_id', sa.Integer(), nullable=True)) + op.add_column('data_source', sa.Column('full_title', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('creator', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('subject', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('contributor', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('date', sa.DateTime(), nullable=True)) + op.add_column('data_source', sa.Column('type', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('biocirv', sa.Boolean(), nullable=True)) + op.add_column('data_source', sa.Column('format', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('language', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('relation', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('temporal_coverage', sa.Text(), nullable=True)) + op.add_column('data_source', sa.Column('location_coverage_id', sa.Integer(), nullable=True)) + op.add_column('data_source', sa.Column('rights', sa.Text(), nullable=True)) + op.drop_column('data_source', 'publication_date') + op.drop_column('data_source', 'version') + op.drop_column('data_source', 'author') + op.add_column('fermentation_record', sa.Column('calc_method_id', sa.Integer(), nullable=True)) + op.add_column('fermentation_record', sa.Column('calc_analyst_id', sa.Integer(), nullable=True)) + op.drop_column('fermentation_record', 'analyst_id') + op.add_column('ftnir_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('gasification_record', sa.Column('calc_method_id', sa.Integer(), nullable=True)) + op.add_column('gasification_record', sa.Column('calc_analyst_id', sa.Integer(), nullable=True)) + op.drop_column('gasification_record', 'analyst_id') + op.add_column('icp_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('pretreatment_record', sa.Column('calc_method_id', sa.Integer(), nullable=True)) + op.add_column('pretreatment_record', sa.Column('calc_analyst_id', sa.Integer(), nullable=True)) + op.drop_column('pretreatment_record', 'analyst_id') + op.add_column('provider', sa.Column('created_at', sa.DateTime(), nullable=True)) + op.add_column('provider', sa.Column('updated_at', sa.DateTime(), nullable=True)) + op.add_column('provider', sa.Column('etl_run_id', sa.Text(), nullable=True)) + op.add_column('provider', sa.Column('lineage_group_id', sa.Integer(), nullable=True)) + op.add_column('proximate_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('rgb_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('ultimate_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('usda_market_record', sa.Column('market_type_category', sa.Text(), nullable=True)) + op.add_column('usda_market_record', sa.Column('market_category_id', sa.Integer(), nullable=True)) + op.drop_column('usda_market_record', 'market_type_catagory') + op.drop_column('usda_market_record', 'market_catagory_id') + op.add_column('xrd_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + op.add_column('xrf_record', sa.Column('analyst_id', sa.Integer(), nullable=True)) + # ### end Alembic commands ### + + +def downgrade() -> None: + """Downgrade schema.""" + # ### commands auto generated by Alembic - please adjust! ### + op.drop_column('xrf_record', 'analyst_id') + op.drop_column('xrd_record', 'analyst_id') + op.add_column('usda_market_record', sa.Column('market_catagory_id', sa.INTEGER(), autoincrement=False, nullable=True)) + op.add_column('usda_market_record', sa.Column('market_type_catagory', sa.TEXT(), autoincrement=False, nullable=True)) + op.drop_column('usda_market_record', 'market_category_id') + op.drop_column('usda_market_record', 'market_type_category') + op.drop_column('ultimate_record', 'analyst_id') + op.drop_column('rgb_record', 'analyst_id') + op.drop_column('proximate_record', 'analyst_id') + op.drop_column('provider', 'lineage_group_id') + op.drop_column('provider', 'etl_run_id') + op.drop_column('provider', 'updated_at') + op.drop_column('provider', 'created_at') + op.add_column('pretreatment_record', sa.Column('analyst_id', sa.INTEGER(), autoincrement=False, nullable=True)) + op.drop_column('pretreatment_record', 'calc_analyst_id') + op.drop_column('pretreatment_record', 'calc_method_id') + op.drop_column('icp_record', 'analyst_id') + op.add_column('gasification_record', sa.Column('analyst_id', sa.INTEGER(), autoincrement=False, nullable=True)) + op.drop_column('gasification_record', 'calc_analyst_id') + op.drop_column('gasification_record', 'calc_method_id') + op.drop_column('ftnir_record', 'analyst_id') + op.add_column('fermentation_record', sa.Column('analyst_id', sa.INTEGER(), autoincrement=False, nullable=True)) + op.drop_column('fermentation_record', 'calc_analyst_id') + op.drop_column('fermentation_record', 'calc_method_id') + op.add_column('data_source', sa.Column('author', sa.TEXT(), autoincrement=False, nullable=True)) + op.add_column('data_source', sa.Column('version', sa.TEXT(), autoincrement=False, nullable=True)) + op.add_column('data_source', sa.Column('publication_date', sa.DATE(), autoincrement=False, nullable=True)) + op.drop_column('data_source', 'rights') + op.drop_column('data_source', 'location_coverage_id') + op.drop_column('data_source', 'temporal_coverage') + op.drop_column('data_source', 'relation') + op.drop_column('data_source', 'language') + op.drop_column('data_source', 'format') + op.drop_column('data_source', 'biocirv') + op.drop_column('data_source', 'type') + op.drop_column('data_source', 'date') + op.drop_column('data_source', 'contributor') + op.drop_column('data_source', 'subject') + op.drop_column('data_source', 'creator') + op.drop_column('data_source', 'full_title') + op.drop_column('data_source', 'data_source_type_id') + op.drop_column('contact', 'lineage_group_id') + op.drop_column('contact', 'etl_run_id') + op.drop_column('contact', 'updated_at') + op.drop_column('contact', 'created_at') + op.drop_column('compositional_record', 'analyst_id') + op.drop_column('calorimetry_record', 'analyst_id') + op.add_column('autoclave_record', sa.Column('analyst_id', sa.INTEGER(), autoincrement=False, nullable=True)) + op.drop_column('autoclave_record', 'calc_analyst_id') + op.drop_column('autoclave_record', 'calc_method_id') + op.add_column('aim2_record_base', sa.Column('analyst_id', sa.INTEGER(), autoincrement=False, nullable=True)) + op.drop_column('aim2_record_base', 'calc_analyst_id') + op.drop_column('aim2_record_base', 'calc_method_id') + op.drop_column('aim1_record_base', 'analyst_id') + # ### end Alembic commands ### diff --git a/docs/README.md b/docs/README.md index 32d46ee8..94389aee 120000 --- a/docs/README.md +++ b/docs/README.md @@ -1 +1 @@ -../README.md \ No newline at end of file +../README.md diff --git a/docs/datamodels/README.md b/docs/datamodels/README.md index b62101ad..f3c7aa23 120000 --- a/docs/datamodels/README.md +++ b/docs/datamodels/README.md @@ -1 +1 @@ -../../src/ca_biositing/datamodels/README.md \ No newline at end of file +../../src/ca_biositing/datamodels/README.md diff --git a/docs/deployment/README.md b/docs/deployment/README.md index d5c46ad4..5159bcfe 120000 --- a/docs/deployment/README.md +++ b/docs/deployment/README.md @@ -1 +1 @@ -../../deployment/README.md \ No newline at end of file +../../deployment/README.md diff --git a/docs/pipeline/README.md b/docs/pipeline/README.md index 82a8c831..544d50b1 120000 --- a/docs/pipeline/README.md +++ b/docs/pipeline/README.md @@ -1 +1 @@ -../../src/ca_biositing/pipeline/README.md \ No newline at end of file +../../src/ca_biositing/pipeline/README.md diff --git a/docs/resources/README.md b/docs/resources/README.md index 9f21ec35..ea34ca59 120000 --- a/docs/resources/README.md +++ b/docs/resources/README.md @@ -1 +1 @@ -../../resources/README.md \ No newline at end of file +../../resources/README.md diff --git a/docs/webservice/README.md b/docs/webservice/README.md index 749a635e..24ea2883 120000 --- a/docs/webservice/README.md +++ b/docs/webservice/README.md @@ -1 +1 @@ -../../src/ca_biositing/webservice/README.md \ No newline at end of file +../../src/ca_biositing/webservice/README.md diff --git a/pixi.lock b/pixi.lock index ef5c0419..913ed5c8 100644 --- a/pixi.lock +++ b/pixi.lock @@ -124,21 +124,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py312h5253ce2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -148,15 +159,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/9f/5a4f7d959d4feba5e203ff0c31889e74d1ca3153122be4a46dca7d92bf7c/lupa-2.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -167,6 +187,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -174,9 +195,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/01/7e/62517dddcfce6d53a39543cd74d0dccfcbdf53967017c58af68822100272/orjson-3.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/5d/f7a1d693e5c0f789185117d5c1d5bee104f5b0d9fbf061d715fb61c840a8/pendulum-3.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/30/da/4e42788fb811bbbfd7b7f045570c062f49e350e1d1f3df056c3fb5763353/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -189,16 +213,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/84/bd/9ce9f629fcb714ffc2c3faf62b6766ecb7a585e1e885eb699bcf130a5209/regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -206,8 +240,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/79/2e/415119c9ab3e62249e18c2b082c07aff907a273741b3f8160414b0e9193c/scipy-1.16.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -217,8 +263,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/4c/f82603979cc94dec109c85f46a53597882c8e7de70518542d795adc829e2/uv-0.9.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl - pypi: ./src/ca_biositing/datamodels @@ -339,21 +388,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.25.0-py313h62ef0ea_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-hbcf94c1_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -363,15 +423,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/6c/0e9ded061916877253c2266074060eb71ed99fb21d73c8c114a76725bce2/lupa-2.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -382,6 +451,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -389,8 +459,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/55/b9/ae8d34899ff0c012039b5a7cb96a389b2476e917733294e498586b45472d/orjson-3.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/32/b2ffe8f3853c181e88f0a157c5fb4e383102238d73c52ac6d93a5c8bffe6/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -403,16 +476,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fb/8c/f5987895bf42b8ddeea1b315c9fedcfe07cadee28b9c98cf50d00adcb14d/regex-2025.11.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/8a/a18c2f4a61b3407e56175f6aab6deacdf9d360191a3d6f38566e1eaf7266/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -420,8 +503,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/7d/6b/3f911e1ebc364cb81320223a3422aab7d26c9c7973109a9cd0f27c64c6c0/scipy-1.16.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/bb/43e246cfe0e81c018076a16036d9b548c4cc649de241fa27d8d9ca6f85ab/sqlalchemy-2.0.44-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -431,8 +526,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/47/6b49ee2c0ea5108f39eaf9ac5a27c11e52a4e895c39ee52ec95ecedf63c9/uv-0.9.12-py3-none-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/c0/ed/80080d1b9bf5bfa2458691d2c97ac50132ea6ab1ac87b36b1e0d5435a8e9/whenever-0.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl @@ -547,21 +645,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.25.0-py312h01f6755_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -571,15 +680,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/be/3d6b5f9a8588c01a4d88129284c726017b2089f3a3fd3ba8bd977292fea0/lupa-2.6-cp312-cp312-macosx_11_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -590,6 +708,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -597,9 +716,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/63/51/6b556192a04595b93e277a9ff71cd0cc06c21a7df98bcce5963fa0f5e36f/orjson-3.11.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/d7/b1bfe15a742f2c2713acb1fdc7dc3594ff46ef9418ac6a96fcb12a6ba60b/pendulum-3.1.0-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/91/f870a02f51be4a65987b45a7de4c2e1897dd0d01051e2b559a38fa634e3e/psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -612,16 +734,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/3f/37fcdd0d2b1e78909108a876580485ea37c91e1acf66d3bb8e736348f441/regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -629,8 +761,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/40/41/5bf55c3f386b1643812f3a5674edf74b26184378ef0f3e7c7a09a7e2ca7f/scipy-1.16.3-cp312-cp312-macosx_10_14_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -640,8 +784,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/d0/e584af6a8e26fdd83678b8fb0b6c543a2ef7c735be4ade3ef742c54bfdd1/uv-0.9.12-py3-none-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl - pypi: ./src/ca_biositing/datamodels @@ -756,21 +903,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py312h37e1c23_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -780,15 +938,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/86/ce243390535c39d53ea17ccf0240815e6e457e413e40428a658ea4ee4b8d/lupa-2.6-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -799,6 +966,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -806,9 +974,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/63/51/6b556192a04595b93e277a9ff71cd0cc06c21a7df98bcce5963fa0f5e36f/orjson-3.11.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/87/0392da0c603c828b926d9f7097fbdddaafc01388cb8a00888635d04758c3/pendulum-3.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/fa/cae40e06849b6c9a95eb5c04d419942f00d9eaac8d81626107461e268821/psycopg2_binary-2.9.11-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -821,16 +992,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/26/0a575f58eb23b7ebd67a45fccbc02ac030b737b896b7e7a909ffe43ffd6a/regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -838,8 +1019,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/1e/0f/65582071948cfc45d43e9870bf7ca5f0e0684e165d7c9ef4e50d783073eb/scipy-1.16.3-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -849,8 +1042,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/d7/d409a604ecae95e765375a054b703458b468e301baf5ea73b3417b0c41bc/uv-0.9.12-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl - pypi: ./src/ca_biositing/datamodels @@ -963,21 +1159,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/df/343d125241f8cd3c9af58fd09688cf2bf59cc1edfd609adafef3556ce8ec/apprise-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2a/fbcbf5a025d3e71ddafad7efd43e34ec4362f4d523c3c471b457148fb211/beartype-0.22.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/29/9e1e82e16e9a1763d3b55bfbe9b2fa39d7175a1fd97685c482fa402e111d/fastapi-0.124.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/c7/b64cae5dba3a1b138d7123ec36bb5ccd39d39939f18454407e5468f4763f/fsspec-2025.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -987,15 +1194,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/b4/55e885834c847ea610e111d87b9ed4768f0afdaeebc00cd46810f25029f6/lupa-2.6-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -1006,6 +1222,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/85/d831a9bc0a9e0e1a304ff3d12c1489a5fbc9bf6690a15dcbdae372bbca45/opentelemetry_api-1.39.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/18/18b662a6ecb8252db9e7457fd3c836729bf28b055b60505cbd4763ea9300/opentelemetry_exporter_prometheus-0.60b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/b4/2adc8bc83eb1055ecb592708efb6f0c520cc2eb68970b02b0f6ecda149cf/opentelemetry_sdk-1.39.0-py3-none-any.whl @@ -1013,8 +1230,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/95/fe/792cc06a84808dbdc20ac6eab6811c53091b42f8e51ecebf14b540e9cfe4/orjson-3.11.5-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/95/9d90c3e9f0b5334ed8ddd69bb13680093cc53eb1bcc7a2a34eeb5671f24c/prefect-3.6.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/2d/1bb683f64737bbb1f86c82b7359db1eb2be4e2c0c13b947f80efefa7d3e5/psycopg2_binary-2.9.11-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -1027,16 +1247,26 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/14/a2b6e1e47b342339a880af265dacaa034bbc3573ff2eda63006e863bfacc/pyjanitor-0.32.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/00/6e29bb314e271a743170e53649db0fdb8e8ff0b64b4f425f5602f4eb9014/regex-2025.11.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -1044,8 +1274,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/cd/01/1204382461fcbfeb05b6161b594f4007e78b6eba9b375382f79153172b4d/scipy-1.16.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/51/665617fe4f8c6450f42a6d8d69243f9420f5677395572c2fe9d21b493b7b/sqlalchemy-2.0.44-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -1055,8 +1297,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/21/6ecf7db074235552d7b0be84c48d934e9916809d7dafb96d9a1019dd2ded/uv-0.9.16-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7d/8d/70ed8ad284cf228d5ae89a6d3d99f21ccc78b270e8ddea4a0ca4575c5185/whenever-0.9.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/e4/62a677feefde05b12a70a4fc9bdc8558010182a801fbcab68cb56c2b0986/xarray-2025.12.0-py3-none-any.whl @@ -1066,12 +1311,16 @@ environments: deployment: channels: - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/asyncpg-0.29.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -1080,6 +1329,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.1-py312h06ac9bb_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/coverage-7.10.6-py312h8a5da7c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/cryptography-46.0.3-py312hee9fe19_0.conda @@ -1096,6 +1346,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda @@ -1110,6 +1361,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-hb9d3cd8_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-3.0.2-py312h178313f_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.0-h26f9b46_0.conda @@ -1123,12 +1375,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda @@ -1144,15 +1400,77 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/watchdog-6.0.0-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.0.1-py312h4c3975b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/asyncpg-0.29.0-py312hb2c0f52_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bcrypt-5.0.0-py312h5eb8f6c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py312h1ab2c47_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda @@ -1161,6 +1479,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cffi-2.0.0-py312h1b372e3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/coverage-7.12.0-py312hd077ced_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/cryptography-46.0.3-py312h4cd2d69_0.conda @@ -1177,6 +1496,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_104.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-hd65408f_0.conda @@ -1191,6 +1511,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.41.2-h3e4203c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/markupsafe-3.0.3-py312hd077ced_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.6.0-h8e36d6e_0.conda @@ -1204,12 +1525,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pynacl-1.6.1-py312hcd1a082_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.12-h91f4b29_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py312ha4530ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8382b9d_2.conda @@ -1225,15 +1550,77 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ukkonen-1.0.1-py312h4f740d2_6.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchdog-6.0.0-py312h8025657_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.0.1-py312hcd1a082_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.25.0-py312hd41f8a7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-hbcf94c1_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/ba/411d414ed99ea1afdd185bbabeeaac00624bd1e4b22840b5e9967ade6337/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/d5/2ebbabe0379418eda8041c06b0b551f213576bfe4c2f09d77c06c07c8cc5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/asyncpg-0.29.0-py312hb553811_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bcrypt-5.0.0-py312h8a6388b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312haafddd8_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda @@ -1242,6 +1629,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/cffi-1.17.1-py312hf857d28_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/coverage-7.10.6-py312hacf3034_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/cryptography-46.0.3-py312hb922d34_0.conda @@ -1258,6 +1646,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-20.1.8-h3d58e20_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda @@ -1265,6 +1654,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/libsodium-1.0.20-hfdf4475_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.50.4-h39a8b3b_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.3.1-hd23fc13_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/markupsafe-3.0.2-py312h3520af0_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.5-h0622a9a_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/openssl-3.6.0-h230baf5_0.conda @@ -1278,12 +1668,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.6.1-py312h80b0991_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.11-h9ccd52b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.2-py312h3520af0_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda @@ -1299,14 +1693,76 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/ukkonen-1.0.1-py312hc5c4d5f_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/watchdog-6.0.0-py312h80b0991_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.0.1-py312h80b0991_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h01d7ebd_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/asyncpg-0.29.0-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-5.0.0-py312h6ef9ec0_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hd8f9ff3_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -1315,6 +1771,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cffi-1.17.1-py312h0fad829_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/coverage-7.10.6-py312h5748b74_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/cryptography-46.0.3-py312h05a80bc_0.conda @@ -1332,6 +1789,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.8-hf598326_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda @@ -1339,6 +1797,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsodium-1.0.20-h99b78c6_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/markupsafe-3.0.2-py312h998013c_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.6.0-h5503f6c_0.conda @@ -1352,12 +1811,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.6.1-py312h4409184_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.11-hc22306f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h998013c_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda @@ -1373,14 +1836,75 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchdog-6.0.0-py312h4409184_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.0.1-py312h4409184_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/asyncpg-0.29.0-py312h4389bb4_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bcrypt-5.0.0-py312hdabe01f_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py312hbb81ca0_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda @@ -1389,6 +1913,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-2.0.0-py312he06e257_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.3.1-pyha7b4d00_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/coverage-7.12.0-py312h05f76fc_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/cryptography-46.0.3-py312h232196e_1.conda @@ -1405,12 +1930,14 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h52bdfb6_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsodium-1.0.20-hc70643c_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.51.1-hf5d6505_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-3.0.3-py312h05f76fc_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/nodeenv-1.9.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.6.0-h725018a_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/opentofu-1.10.7-h57928b3_0.conda @@ -1423,12 +1950,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pynacl-1.6.1-py312he06e257_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.12-h0159041_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py312h829343e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh07e9846_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_0.conda @@ -1448,6 +1979,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_32.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_32.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/watchdog-6.0.0-py312h2e8e312_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda @@ -1455,6 +1987,65 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py312he5662c2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6c/79/3912a94cf27ec503e51ba493692d6db1e3cd8ac7ac52b0b47c8e33d7f4f9/greenlet-3.3.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/83/24690e9dfc241e6ab062df82cc0df7f4231c79ba98b273fa496fb3dd78ed/sqlalchemy-2.0.44-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl docs: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -1840,6 +2431,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/asyncpg-0.29.0-py312h66e93f0_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -1904,6 +2496,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda @@ -1929,6 +2522,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/watchdog-6.0.0-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.0.1-py312h4c3975b_1.conda @@ -1937,19 +2531,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -1959,14 +2563,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/9f/5a4f7d959d4feba5e203ff0c31889e74d1ca3153122be4a46dca7d92bf7c/lupa-2.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl @@ -1974,14 +2587,18 @@ environments: - pypi: https://files.pythonhosted.org/packages/51/c0/00c9809d8b9346eb238a6bbd5f83e846a4ce4503da94a4c08cb7284c325b/multipledispatch-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/7d/c88d7b15ba8fe5c6b8f93be50fc11795e9fc05386c44afaf6b76fe191f9b/opentelemetry_semantic_conventions-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/01/7e/62517dddcfce6d53a39543cd74d0dccfcbdf53967017c58af68822100272/orjson-3.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/5d/f7a1d693e5c0f789185117d5c1d5bee104f5b0d9fbf061d715fb61c840a8/pendulum-3.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/30/da/4e42788fb811bbbfd7b7f045570c062f49e350e1d1f3df056c3fb5763353/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -1994,15 +2611,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/84/bd/9ce9f629fcb714ffc2c3faf62b6766ecb7a585e1e885eb699bcf130a5209/regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -2010,8 +2636,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/79/2e/415119c9ab3e62249e18c2b082c07aff907a273741b3f8160414b0e9193c/scipy-1.16.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -2019,8 +2657,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/00/22/35617eee79080a5d071d0f14ad698d325ee6b3bf824fc0467c03b30e7fa8/typer-0.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/4c/f82603979cc94dec109c85f46a53597882c8e7de70518542d795adc829e2/uv-0.9.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/pipeline @@ -2029,6 +2669,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/asyncpg-0.29.0-py312hb2c0f52_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bcrypt-5.0.0-py312h5eb8f6c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py312h1ab2c47_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda @@ -2093,6 +2734,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pynacl-1.6.1-py312hcd1a082_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda @@ -2118,6 +2760,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ukkonen-1.0.1-py312h4f740d2_6.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchdog-6.0.0-py312h8025657_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.0.1-py312hcd1a082_1.conda @@ -2127,19 +2770,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.25.0-py312hd41f8a7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-hbcf94c1_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -2149,14 +2802,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/40/4e/e7c0583083db9d7f1fd023800a9767d8e4391e8330d56c2373d890ac971b/lupa-2.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl @@ -2164,14 +2826,18 @@ environments: - pypi: https://files.pythonhosted.org/packages/51/c0/00c9809d8b9346eb238a6bbd5f83e846a4ce4503da94a4c08cb7284c325b/multipledispatch-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/7d/c88d7b15ba8fe5c6b8f93be50fc11795e9fc05386c44afaf6b76fe191f9b/opentelemetry_semantic_conventions-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4e/47/bf85dcf95f7a3a12bf223394a4f849430acd82633848d52def09fa3f46ad/orjson-3.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/61/95f1eec25796be6dddf71440ee16ec1fd0c573fc61a73bd1ef6daacd529a/pendulum-3.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/75/364847b879eb630b3ac8293798e380e441a957c53657995053c5ec39a316/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -2184,15 +2850,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/98/6a8dff667d1af907150432cf5abc05a17ccd32c72a3615410d5365ac167a/regex-2025.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/75/ba/411d414ed99ea1afdd185bbabeeaac00624bd1e4b22840b5e9967ade6337/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -2200,8 +2875,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/46/d1146ff536d034d02f83c8afc3c4bab2eddb634624d6529a8512f3afc9da/scipy-1.16.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/d5/2ebbabe0379418eda8041c06b0b551f213576bfe4c2f09d77c06c07c8cc5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -2209,8 +2896,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/00/22/35617eee79080a5d071d0f14ad698d325ee6b3bf824fc0467c03b30e7fa8/typer-0.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/47/6b49ee2c0ea5108f39eaf9ac5a27c11e52a4e895c39ee52ec95ecedf63c9/uv-0.9.12-py3-none-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/pipeline @@ -2218,6 +2907,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/asyncpg-0.29.0-py312hb553811_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bcrypt-5.0.0-py312h8a6388b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312haafddd8_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda @@ -2276,6 +2966,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.6.1-py312h80b0991_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda @@ -2301,6 +2992,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/ukkonen-1.0.1-py312hc5c4d5f_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/watchdog-6.0.0-py312h80b0991_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.0.1-py312h80b0991_1.conda @@ -2309,19 +3001,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h01d7ebd_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -2331,14 +3033,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/be/3d6b5f9a8588c01a4d88129284c726017b2089f3a3fd3ba8bd977292fea0/lupa-2.6-cp312-cp312-macosx_11_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl @@ -2346,14 +3057,18 @@ environments: - pypi: https://files.pythonhosted.org/packages/51/c0/00c9809d8b9346eb238a6bbd5f83e846a4ce4503da94a4c08cb7284c325b/multipledispatch-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/7d/c88d7b15ba8fe5c6b8f93be50fc11795e9fc05386c44afaf6b76fe191f9b/opentelemetry_semantic_conventions-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/51/6b556192a04595b93e277a9ff71cd0cc06c21a7df98bcce5963fa0f5e36f/orjson-3.11.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/d7/b1bfe15a742f2c2713acb1fdc7dc3594ff46ef9418ac6a96fcb12a6ba60b/pendulum-3.1.0-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/91/f870a02f51be4a65987b45a7de4c2e1897dd0d01051e2b559a38fa634e3e/psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -2366,15 +3081,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/3f/37fcdd0d2b1e78909108a876580485ea37c91e1acf66d3bb8e736348f441/regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -2382,8 +3106,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/40/41/5bf55c3f386b1643812f3a5674edf74b26184378ef0f3e7c7a09a7e2ca7f/scipy-1.16.3-cp312-cp312-macosx_10_14_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -2391,8 +3127,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/00/22/35617eee79080a5d071d0f14ad698d325ee6b3bf824fc0467c03b30e7fa8/typer-0.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/d0/e584af6a8e26fdd83678b8fb0b6c543a2ef7c735be4ade3ef742c54bfdd1/uv-0.9.12-py3-none-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/pipeline @@ -2400,6 +3138,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/asyncpg-0.29.0-py312h024a12e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-5.0.0-py312h6ef9ec0_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hd8f9ff3_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -2459,6 +3198,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.6.1-py312h4409184_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda @@ -2484,6 +3224,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchdog-6.0.0-py312h4409184_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.0.1-py312h4409184_1.conda @@ -2492,19 +3233,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.23.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -2514,14 +3265,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/86/ce243390535c39d53ea17ccf0240815e6e457e413e40428a658ea4ee4b8d/lupa-2.6-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl @@ -2529,14 +3289,18 @@ environments: - pypi: https://files.pythonhosted.org/packages/51/c0/00c9809d8b9346eb238a6bbd5f83e846a4ce4503da94a4c08cb7284c325b/multipledispatch-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/7d/c88d7b15ba8fe5c6b8f93be50fc11795e9fc05386c44afaf6b76fe191f9b/opentelemetry_semantic_conventions-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/63/51/6b556192a04595b93e277a9ff71cd0cc06c21a7df98bcce5963fa0f5e36f/orjson-3.11.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/87/0392da0c603c828b926d9f7097fbdddaafc01388cb8a00888635d04758c3/pendulum-3.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/fa/cae40e06849b6c9a95eb5c04d419942f00d9eaac8d81626107461e268821/psycopg2_binary-2.9.11-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -2549,15 +3313,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/26/0a575f58eb23b7ebd67a45fccbc02ac030b737b896b7e7a909ffe43ffd6a/regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -2565,8 +3338,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/1e/0f/65582071948cfc45d43e9870bf7ca5f0e0684e165d7c9ef4e50d783073eb/scipy-1.16.3-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -2574,8 +3359,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/00/22/35617eee79080a5d071d0f14ad698d325ee6b3bf824fc0467c03b30e7fa8/typer-0.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/d7/d409a604ecae95e765375a054b703458b468e301baf5ea73b3417b0c41bc/uv-0.9.12-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/pipeline @@ -2583,6 +3370,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/asyncpg-0.29.0-py312h4389bb4_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bcrypt-5.0.0-py312hdabe01f_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py312hbb81ca0_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda @@ -2641,6 +3429,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pynacl-1.6.1-py312he06e257_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda @@ -2671,6 +3460,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_32.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_32.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/watchdog-6.0.0-py312h2e8e312_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda @@ -2681,19 +3471,29 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py312he5662c2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/df/343d125241f8cd3c9af58fd09688cf2bf59cc1edfd609adafef3556ce8ec/apprise-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2a/fbcbf5a025d3e71ddafad7efd43e34ec4362f4d523c3c471b457148fb211/beartype-0.22.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/29/9e1e82e16e9a1763d3b55bfbe9b2fa39d7175a1fd97685c482fa402e111d/fastapi-0.124.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/c7/b64cae5dba3a1b138d7123ec36bb5ccd39d39939f18454407e5468f4763f/fsspec-2025.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -2703,14 +3503,23 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/15/5121e68aad3584e26e1425a5c9a79cd898f8a152292059e128c206ee817c/lupa-2.6-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/54/e7d793b573f298e1c9013b8c4dade17d481164aa517d1d7148619c2cedbf/markdown_it_py-4.0.0-py3-none-any.whl @@ -2718,14 +3527,18 @@ environments: - pypi: https://files.pythonhosted.org/packages/51/c0/00c9809d8b9346eb238a6bbd5f83e846a4ce4503da94a4c08cb7284c325b/multipledispatch-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/85/d831a9bc0a9e0e1a304ff3d12c1489a5fbc9bf6690a15dcbdae372bbca45/opentelemetry_api-1.39.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/18/18b662a6ecb8252db9e7457fd3c836729bf28b055b60505cbd4763ea9300/opentelemetry_exporter_prometheus-0.60b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/b4/2adc8bc83eb1055ecb592708efb6f0c520cc2eb68970b02b0f6ecda149cf/opentelemetry_sdk-1.39.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d0/56/af0306666f91bae47db14d620775604688361f0f76a872e0005277311131/opentelemetry_semantic_conventions-0.60b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d4/fb/f05646c43d5450492cb387de5549f6de90a71001682c17882d9f66476af5/orjson-3.11.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/f3/aefb579aa3cebd6f2866b205fc7a60d33e9a696e9e629024752107dc3cf5/pendulum-3.1.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/48/95/9d90c3e9f0b5334ed8ddd69bb13680093cc53eb1bcc7a2a34eeb5671f24c/prefect-3.6.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/d2/99b55e85832ccde77b211738ff3925a5d73ad183c0b37bcbbe5a8ff04978/psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -2738,15 +3551,24 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/14/a2b6e1e47b342339a880af265dacaa034bbc3573ff2eda63006e863bfacc/pyjanitor-0.32.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/67/3b92df89f179d7c367be654ab5626ae311cb28f7d5c237b6bb976cd5fbbb/regex-2025.11.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -2754,8 +3576,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/c2/7f/acbd28c97e990b421af7d6d6cd416358c9c293fc958b8529e0bd5d2a2a19/scipy-1.16.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/83/24690e9dfc241e6ab062df82cc0df7f4231c79ba98b273fa496fb3dd78ed/sqlalchemy-2.0.44-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -2763,8 +3597,10 @@ environments: - pypi: https://files.pythonhosted.org/packages/00/22/35617eee79080a5d071d0f14ad698d325ee6b3bf824fc0467c03b30e7fa8/typer-0.19.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/21/6ecf7db074235552d7b0be84c48d934e9916809d7dafb96d9a1019dd2ded/uv-0.9.16-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/pipeline @@ -2824,6 +3660,8 @@ environments: gis: channels: - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 @@ -2852,6 +3690,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.13.0-h3cf044e_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.8.0-h736e048_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.12.0-ha633028_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/blosc-1.21.6-he440d0b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_3.conda @@ -3175,6 +4014,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/watchdog-6.0.0-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.0.1-py312h4c3975b_1.conda @@ -3201,6 +4041,65 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-hb9d3cd8_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda @@ -3227,6 +4126,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-blobs-cpp-12.13.0-h185ecfd_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-common-cpp-12.8.0-h1b94036_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/azure-storage-files-datalake-cpp-12.12.0-h37d6d07_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bcrypt-5.0.0-py312h5eb8f6c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/blosc-1.21.6-hb4dfabd_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py312h1ab2c47_4.conda @@ -3533,6 +4433,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/uriparser-0.9.8-h0a1ffab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchdog-6.0.0-py312h8025657_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.0.1-py312hcd1a082_1.conda @@ -3559,6 +4460,65 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zlib-1.3.1-h86ecc28_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.25.0-py312hd41f8a7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-hbcf94c1_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/ba/411d414ed99ea1afdd185bbabeeaac00624bd1e4b22840b5e9967ade6337/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/d5/2ebbabe0379418eda8041c06b0b551f213576bfe4c2f09d77c06c07c8cc5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/aom-3.9.1-hf036a51_0.conda @@ -3583,6 +4543,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-blobs-cpp-12.13.0-h3d2f5f1_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-common-cpp-12.8.0-h1ccc5ac_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/azure-storage-files-datalake-cpp-12.12.0-h86941f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bcrypt-5.0.0-py312h8a6388b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/blosc-1.21.6-hd145fbb_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312haafddd8_3.conda @@ -3873,6 +4834,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/uriparser-0.9.8-h6aefe2f_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/watchdog-6.0.0-py312h80b0991_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.0.1-py312h80b0991_1.conda @@ -3883,6 +4845,65 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zlib-1.3.1-hd23fc13_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h01d7ebd_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/aom-3.9.1-h7bae524_0.conda @@ -3907,6 +4928,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-blobs-cpp-12.13.0-h7585a09_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-common-cpp-12.8.0-h9ca1f76_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/azure-storage-files-datalake-cpp-12.12.0-hcdd55da_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-5.0.0-py312h6ef9ec0_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/blosc-1.21.6-h7dd00d9_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hd8f9ff3_3.conda @@ -4197,6 +5219,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/uriparser-0.9.8-h00cdb27_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchdog-6.0.0-py312h4409184_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.0.1-py312h4409184_1.conda @@ -4207,6 +5230,64 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zlib-1.3.1-h8359307_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/affine-2.4.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda @@ -4229,6 +5310,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/azure-identity-cpp-1.10.0-hd6deed7_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/azure-storage-blobs-cpp-12.13.0-h3241184_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/azure-storage-common-cpp-12.8.0-hd6deed7_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bcrypt-5.0.0-py312hdabe01f_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/blosc-1.21.6-hfd34d9b_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py312hbb81ca0_4.conda @@ -4470,6 +5552,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_32.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.44.35208-h38c0c73_32.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/watchdog-6.0.0-py312h2e8e312_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda @@ -4480,6 +5563,65 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py312he5662c2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6c/79/3912a94cf27ec503e51ba493692d6db1e3cd8ac7ac52b0b47c8e33d7f4f9/greenlet-3.3.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/83/24690e9dfc241e6ab062df82cc0df7f4231c79ba98b273fa496fb3dd78ed/sqlalchemy-2.0.44-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl py312: channels: - url: https://conda.anaconda.org/conda-forge/ @@ -4571,21 +5713,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py312h5253ce2_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -4595,16 +5748,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1c/9f/5a4f7d959d4feba5e203ff0c31889e74d1ca3153122be4a46dca7d92bf7c/lupa-2.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -4615,6 +5777,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b6/23/2a1b231b8ff672b4c450dac27164a8b2ca7d9b7144f9c02d2396518352eb/numpy-2.3.5-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -4622,9 +5785,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/01/7e/62517dddcfce6d53a39543cd74d0dccfcbdf53967017c58af68822100272/orjson-3.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e5/63/cd7d615331b328e287d8233ba9fdf191a9c2d11b6af0c7a59cfcec23de68/pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/5d/f7a1d693e5c0f789185117d5c1d5bee104f5b0d9fbf061d715fb61c840a8/pendulum-3.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/30/da/4e42788fb811bbbfd7b7f045570c062f49e350e1d1f3df056c3fb5763353/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -4637,17 +5803,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/84/bd/9ce9f629fcb714ffc2c3faf62b6766ecb7a585e1e885eb699bcf130a5209/regex-2025.11.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -4655,8 +5831,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/79/2e/415119c9ab3e62249e18c2b082c07aff907a273741b3f8160414b0e9193c/scipy-1.16.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -4666,8 +5854,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/4c/f82603979cc94dec109c85f46a53597882c8e7de70518542d795adc829e2/uv-0.9.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/8f/aa61f528fba38578ec553c145857a181384c72b98156f858ca5c8e82d9d3/websockets-15.0.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl @@ -4756,21 +5947,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.25.0-py312hd41f8a7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-hbcf94c1_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -4780,16 +5982,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/40/4e/e7c0583083db9d7f1fd023800a9767d8e4391e8330d56c2373d890ac971b/lupa-2.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -4800,6 +6011,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/74/78/fcd41e5a0ce4f3f7b003da85825acddae6d7ecb60cf25194741b036ca7d6/numpy-2.3.5-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -4807,9 +6019,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/4e/47/bf85dcf95f7a3a12bf223394a4f849430acd82633848d52def09fa3f46ad/orjson-3.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/57/56/cf2dbe1a3f5271370669475ead12ce77c61726ffd19a35546e31aa8edf4e/pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c0/61/95f1eec25796be6dddf71440ee16ec1fd0c573fc61a73bd1ef6daacd529a/pendulum-3.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/75/364847b879eb630b3ac8293798e380e441a957c53657995053c5ec39a316/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -4822,17 +6037,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ea/98/6a8dff667d1af907150432cf5abc05a17ccd32c72a3615410d5365ac167a/regex-2025.11.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/75/ba/411d414ed99ea1afdd185bbabeeaac00624bd1e4b22840b5e9967ade6337/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -4840,8 +6065,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/fa/46/d1146ff536d034d02f83c8afc3c4bab2eddb634624d6529a8512f3afc9da/scipy-1.16.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/d5/2ebbabe0379418eda8041c06b0b551f213576bfe4c2f09d77c06c07c8cc5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -4851,8 +6088,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/47/6b49ee2c0ea5108f39eaf9ac5a27c11e52a4e895c39ee52ec95ecedf63c9/uv-0.9.12-py3-none-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a6/02/0073b3952f5bce97eafbb35757f8d0d54812b6174ed8dd952aa08429bcc3/websockets-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl @@ -4933,21 +6173,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.25.0-py312h01f6755_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -4957,16 +6208,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/24/be/3d6b5f9a8588c01a4d88129284c726017b2089f3a3fd3ba8bd977292fea0/lupa-2.6-cp312-cp312-macosx_11_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -4977,6 +6237,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/37/e669fe6cbb2b96c62f6bbedc6a81c0f3b7362f6a59230b23caa673a85721/numpy-2.3.5-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -4984,9 +6245,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/63/51/6b556192a04595b93e277a9ff71cd0cc06c21a7df98bcce5963fa0f5e36f/orjson-3.11.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/9c/fb/231d89e8637c808b997d172b18e9d4a4bc7bf31296196c260526055d1ea0/pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/d7/b1bfe15a742f2c2713acb1fdc7dc3594ff46ef9418ac6a96fcb12a6ba60b/pendulum-3.1.0-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/91/f870a02f51be4a65987b45a7de4c2e1897dd0d01051e2b559a38fa634e3e/psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -4999,17 +6263,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/3f/37fcdd0d2b1e78909108a876580485ea37c91e1acf66d3bb8e736348f441/regex-2025.11.3-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -5017,8 +6291,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/40/41/5bf55c3f386b1643812f3a5674edf74b26184378ef0f3e7c7a09a7e2ca7f/scipy-1.16.3-cp312-cp312-macosx_10_14_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -5028,8 +6314,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/d0/e584af6a8e26fdd83678b8fb0b6c543a2ef7c735be4ade3ef742c54bfdd1/uv-0.9.12-py3-none-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f4/71/809a0f5f6a06522af902e0f2ea2757f71ead94610010cf570ab5c98e99ed/websockets-15.0.1-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl @@ -5111,21 +6400,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py312h37e1c23_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -5135,16 +6435,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/94/86/ce243390535c39d53ea17ccf0240815e6e457e413e40428a658ea4ee4b8d/lupa-2.6-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -5155,6 +6464,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c5/65/df0db6c097892c9380851ab9e44b52d4f7ba576b833996e0080181c0c439/numpy-2.3.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -5162,9 +6472,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/63/51/6b556192a04595b93e277a9ff71cd0cc06c21a7df98bcce5963fa0f5e36f/orjson-3.11.4-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/5c/bd/bf8064d9cfa214294356c2d6702b716d3cf3bb24be59287a6a21e24cae6b/pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/87/0392da0c603c828b926d9f7097fbdddaafc01388cb8a00888635d04758c3/pendulum-3.1.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/fa/cae40e06849b6c9a95eb5c04d419942f00d9eaac8d81626107461e268821/psycopg2_binary-2.9.11-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -5177,17 +6490,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/26/0a575f58eb23b7ebd67a45fccbc02ac030b737b896b7e7a909ffe43ffd6a/regex-2025.11.3-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -5195,8 +6518,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/1e/0f/65582071948cfc45d43e9870bf7ca5f0e0684e165d7c9ef4e50d783073eb/scipy-1.16.3-cp312-cp312-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -5206,8 +6541,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/d7/d409a604ecae95e765375a054b703458b468e301baf5ea73b3417b0c41bc/uv-0.9.12-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3d/69/1a681dd6f02180916f116894181eab8b2e25b31e484c5d0eae637ec01f7c/websockets-15.0.1-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl @@ -5291,21 +6629,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/df/343d125241f8cd3c9af58fd09688cf2bf59cc1edfd609adafef3556ce8ec/apprise-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2a/fbcbf5a025d3e71ddafad7efd43e34ec4362f4d523c3c471b457148fb211/beartype-0.22.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/29/9e1e82e16e9a1763d3b55bfbe9b2fa39d7175a1fd97685c482fa402e111d/fastapi-0.124.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/c7/b64cae5dba3a1b138d7123ec36bb5ccd39d39939f18454407e5468f4763f/fsspec-2025.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -5315,16 +6664,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/15/5121e68aad3584e26e1425a5c9a79cd898f8a152292059e128c206ee817c/lupa-2.6-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -5335,6 +6693,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/57/8aeaf160312f7f489dea47ab61e430b5cb051f59a98ae68b7133ce8fa06a/numpy-2.3.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/85/d831a9bc0a9e0e1a304ff3d12c1489a5fbc9bf6690a15dcbdae372bbca45/opentelemetry_api-1.39.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/18/18b662a6ecb8252db9e7457fd3c836729bf28b055b60505cbd4763ea9300/opentelemetry_exporter_prometheus-0.60b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/b4/2adc8bc83eb1055ecb592708efb6f0c520cc2eb68970b02b0f6ecda149cf/opentelemetry_sdk-1.39.0-py3-none-any.whl @@ -5342,9 +6701,12 @@ environments: - pypi: https://files.pythonhosted.org/packages/d4/fb/f05646c43d5450492cb387de5549f6de90a71001682c17882d9f66476af5/orjson-3.11.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/86/41/585a168330ff063014880a80d744219dbf1dd7a1c706e75ab3425a987384/pandas-2.3.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/99/f3/aefb579aa3cebd6f2866b205fc7a60d33e9a696e9e629024752107dc3cf5/pendulum-3.1.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/48/95/9d90c3e9f0b5334ed8ddd69bb13680093cc53eb1bcc7a2a34eeb5671f24c/prefect-3.6.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/d2/99b55e85832ccde77b211738ff3925a5d73ad183c0b37bcbbe5a8ff04978/psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -5357,17 +6719,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/14/a2b6e1e47b342339a880af265dacaa034bbc3573ff2eda63006e863bfacc/pyjanitor-0.32.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1a/67/3b92df89f179d7c367be654ab5626ae311cb28f7d5c237b6bb976cd5fbbb/regex-2025.11.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -5375,8 +6747,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/c2/7f/acbd28c97e990b421af7d6d6cd416358c9c293fc958b8529e0bd5d2a2a19/scipy-1.16.3-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/83/24690e9dfc241e6ab062df82cc0df7f4231c79ba98b273fa496fb3dd78ed/sqlalchemy-2.0.44-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -5386,8 +6770,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/21/6ecf7db074235552d7b0be84c48d934e9916809d7dafb96d9a1019dd2ded/uv-0.9.16-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7d/71/abf2ebc3bbfa40f391ce1428c7168fb20582d0ff57019b69ea20fa698043/websockets-15.0.1-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/e4/62a677feefde05b12a70a4fc9bdc8558010182a801fbcab68cb56c2b0986/xarray-2025.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl @@ -5483,21 +6870,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.25.0-py313h54dd161_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb8e6e7a_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -5507,16 +6905,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dd/ef/f8c32e454ef9f3fe909f6c7d57a39f950996c37a3deb7b391fec7903dab7/lupa-2.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -5527,6 +6934,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f5/10/ca162f45a102738958dcec8023062dad0cbc17d1ab99d68c4e4a6c45fb2b/numpy-2.3.5-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -5534,8 +6942,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/aa/fd/d0733fcb9086b8be4ebcfcda2d0312865d17d0d9884378b7cffb29d0763f/orjson-3.11.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/15/07/284f757f63f8a8d69ed4472bfd85122bd086e637bf4ed09de572d575a693/pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3c/7e/6a1a38f86412df101435809f225d57c1a021307dd0689f7a5e7fe83588b1/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -5548,17 +6959,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/11/9bcef2d1445665b180ac7f230406ad80671f0fc2a6ffb93493b5dd8cd64c/regex-2025.11.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/42/555b4ee17508beafac135c8b450816ace5a96194ce97fefc49d58e5652ea/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -5566,8 +6987,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/21/f6/4bfb5695d8941e5c570a04d9fcd0d36bce7511b7d78e6e75c8f9791f82d0/scipy-1.16.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b9/96/c6105ed9a880abe346b64d3b6ddef269ddfcab04f7f3d90a0bf3c5a88e82/sqlalchemy-2.0.44-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -5577,8 +7010,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/4c/f82603979cc94dec109c85f46a53597882c8e7de70518542d795adc829e2/uv-0.9.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/b2/83a6ddf56cdcbad4e3d841fcc55d6ba7d19aeb89c50f24dd7e859ec0805f/websockets-15.0.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/5c/55/238408391f365958286ec2038ff9d2a05959595703d2980cd635a2d846f5/whenever-0.9.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl @@ -5666,21 +7102,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.25.0-py313h62ef0ea_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-hbcf94c1_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -5690,16 +7137,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/09/6c/0e9ded061916877253c2266074060eb71ed99fb21d73c8c114a76725bce2/lupa-2.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -5710,6 +7166,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/95/03/dc0723a013c7d7c19de5ef29e932c3081df1c14ba582b8b86b5de9db7f0f/numpy-2.3.5-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -5717,8 +7174,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/55/b9/ae8d34899ff0c012039b5a7cb96a389b2476e917733294e498586b45472d/orjson-3.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/16/87/9472cf4a487d848476865321de18cc8c920b8cab98453ab79dbbc98db63a/pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/32/b2ffe8f3853c181e88f0a157c5fb4e383102238d73c52ac6d93a5c8bffe6/psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -5731,17 +7191,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fb/8c/f5987895bf42b8ddeea1b315c9fedcfe07cadee28b9c98cf50d00adcb14d/regex-2025.11.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/92/8a/a18c2f4a61b3407e56175f6aab6deacdf9d360191a3d6f38566e1eaf7266/rpds_py-0.29.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -5749,8 +7219,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/7d/6b/3f911e1ebc364cb81320223a3422aab7d26c9c7973109a9cd0f27c64c6c0/scipy-1.16.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b0/bb/43e246cfe0e81c018076a16036d9b548c4cc649de241fa27d8d9ca6f85ab/sqlalchemy-2.0.44-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -5760,8 +7242,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/47/6b49ee2c0ea5108f39eaf9ac5a27c11e52a4e895c39ee52ec95ecedf63c9/uv-0.9.12-py3-none-manylinux_2_28_aarch64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/31/1d/063b25dcc01faa8fada1469bdf769de3768b7044eac9d41f734fd7b6ad6d/websockets-15.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/c0/ed/80080d1b9bf5bfa2458691d2c97ac50132ea6ab1ac87b36b1e0d5435a8e9/whenever-0.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl @@ -5843,21 +7328,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.25.0-py313hcb05632_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstd-1.5.7-h8210216_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -5867,16 +7363,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/66/8e/ad22b0a19454dfd08662237a84c792d6d420d36b061f239e084f29d1a4f3/lupa-2.6-cp313-cp313-macosx_11_0_x86_64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -5887,6 +7392,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/db/69/9cde09f36da4b5a505341180a3f2e6fadc352fd4d2b7096ce9778db83f1a/numpy-2.3.5-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -5894,8 +7400,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/23/15/c52aa7112006b0f3d6180386c3a46ae057f932ab3425bc6f6ac50431cca1/orjson-3.11.4-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/cd/4b/18b035ee18f97c1040d94debd8f2e737000ad70ccc8f5513f4eefad75f4b/pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/a8/a2709681b3ac11b0b1786def10006b8995125ba268c9a54bea6f5ae8bd3e/psycopg2_binary-2.9.11-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -5908,17 +7417,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/22/af2dc751aacf88089836aa088a1a11c4f21a04707eb1b0478e8e8fb32847/regex-2025.11.3-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/fd/d9/c5de60d9d371bbb186c3e9bf75f4fc5665e11117a25a06a6b2e0afb7380e/rpds_py-0.29.0-cp313-cp313-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -5926,8 +7445,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/72/f1/57e8327ab1508272029e27eeef34f2302ffc156b69e7e233e906c2a5c379/scipy-1.16.3-cp313-cp313-macosx_10_14_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/d3/c67077a2249fdb455246e6853166360054c331db4613cda3e31ab1cadbef/sqlalchemy-2.0.44-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -5937,8 +7468,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/53/d0/e584af6a8e26fdd83678b8fb0b6c543a2ef7c735be4ade3ef742c54bfdd1/uv-0.9.12-py3-none-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8a/05/aa116ec9943c718905997412c5989f7ed671bc0188ee2ba89520e8765d7b/websockets-15.0.1-cp313-cp313-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/b4/01/543ce9ecaa8dd288b5bd830db221a1508b3662196022f001818f4de36ef3/whenever-0.9.3-cp313-cp313-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl @@ -6021,21 +7555,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.25.0-py313h9734d34_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstd-1.5.7-h6491c7d_2.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/c9/ceecc71fe2c9495a1d8e08d44f5f31f5bca1350d5b2e27a4b6265424f59e/beartype-0.22.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/eb/02/a6b21098b1d5d6249b7c5ab69dde30108a71e4e819d4a9778f1de1d5b70d/fsspec-2025.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -6045,16 +7590,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/1d/21176b682ca5469001199d8b95fa1737e29957a3d185186e7a8b55345f2e/lupa-2.6-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -6065,6 +7619,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/fb/f505c95ceddd7027347b067689db71ca80bd5ecc926f913f1a23e65cf09b/numpy-2.3.5-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ae/a2/d86e01c28300bd41bab8f18afd613676e2bd63515417b77636fc1add426f/opentelemetry_api-1.38.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/ea/3005a732002242fd86203989520bdd5a752e1fd30dc225d5d45751ea19fb/opentelemetry_exporter_prometheus-0.59b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/2e/e93777a95d7d9c40d270a371392b6d6f1ff170c2a3cb32d6176741b5b723/opentelemetry_sdk-1.38.0-py3-none-any.whl @@ -6072,8 +7627,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/23/15/c52aa7112006b0f3d6180386c3a46ae057f932ab3425bc6f6ac50431cca1/orjson-3.11.4-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl - pypi: https://files.pythonhosted.org/packages/31/94/72fac03573102779920099bcac1c3b05975c2cb5f01eac609faf34bed1ca/pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6d/29/ac233c37002da25f87566b7974f0b368d81167b2784dc3af3d7c15725d2b/prefect-3.6.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/e1/c2b38d256d0dafd32713e9f31982a5b028f4a3651f446be70785f484f472/psycopg2_binary-2.9.11-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -6086,17 +7644,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/af/9a7f6d474336bcb94068ed7e56975680879890a52c8213e490d5d89bccdf/pyjanitor-0.32.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a3/88/1a3ea5672f4b0a84802ee9891b86743438e7c04eb0b8f8c4e16a42375327/regex-2025.11.3-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b3/b3/0860cdd012291dc21272895ce107f1e98e335509ba986dd83d72658b82b9/rpds_py-0.29.0-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -6104,8 +7672,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/44/13/7e63cfba8a7452eb756306aa2fd9b37a29a323b672b964b4fdeded9a3f21/scipy-1.16.3-cp313-cp313-macosx_12_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2b/91/eabd0688330d6fd114f5f12c4f89b0d02929f525e6bf7ff80aa17ca802af/sqlalchemy-2.0.44-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -6115,8 +7695,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/af/d7/d409a604ecae95e765375a054b703458b468e301baf5ea73b3417b0c41bc/uv-0.9.12-py3-none-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ff/0b/33cef55ff24f2d92924923c99926dcce78e7bd922d649467f0eda8368923/websockets-15.0.1-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/7b/d7/d89a6f1b1ea4a2768c813443d7be007377402fa0db99c62c393965165159/whenever-0.9.3-cp313-cp313-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/86/b4/cfa7aa56807dd2d9db0576c3440b3acd51bae6207338ec5610d4878e5c9b/xarray-2025.11.0-py3-none-any.whl @@ -6201,21 +7784,32 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda - pypi: https://files.pythonhosted.org/packages/f5/10/6c25ed6de94c49f88a91fa5018cb4c0f3625f31d5be9f771ebe5cc7cd506/aiosqlite-0.21.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/39/df/343d125241f8cd3c9af58fd09688cf2bf59cc1edfd609adafef3556ce8ec/apprise-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/14/2a/fbcbf5a025d3e71ddafad7efd43e34ec4362f4d523c3c471b457148fb211/beartype-0.22.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e6/46/eb6eca305c77a4489affe1c5d8f4cae82f285d9addd8de4ec084a7184221/cachetools-6.2.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/39/799be3f2f0f38cc727ee3b4f1445fe6d5e4133064ec2e4115069418a5bb6/cloudpickle-3.1.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/b1/5745d7523d8ce53b87779f46ef6cf5c5c342997939c2fe967e607b944e43/coolname-2.2.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/22/f020c047ae1346613db9322638186468238bcfa8849b4668a22b97faad65/dateparser-1.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/d2/c28f6909864bfdb7411bb8f39fabedb5a50da1cbd7da5a1a3a46dfea2eab/fakeredis-2.32.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/29/9e1e82e16e9a1763d3b55bfbe9b2fa39d7175a1fd97685c482fa402e111d/fastapi-0.124.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/c7/b64cae5dba3a1b138d7123ec36bb5ccd39d39939f18454407e5468f4763f/fsspec-2025.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/be/a4/7319a2a8add4cc352be9e3efeff5e2aacee917c85ca2fa1647e29089983c/google_auth-2.41.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/07/a54c100da461ffc5968457823fcc665a48fb4b875c68bcfecbfe24a10dbe/google_auth_oauthlib-1.2.3-py3-none-any.whl @@ -6225,16 +7819,25 @@ environments: - pypi: https://files.pythonhosted.org/packages/27/76/563fb20dedd0e12794d9a12cfe0198458cc0501fdc7b034eee2166d035d5/gspread-6.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c9/2f/ffb71b19208cf3d3e1e1323716de07bdb46e24c850f2c5627cb8157d9687/gspread_dataframe-4.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/26/b4/08c9d297edd5e1182506edecccbb88a92e1122a057953068cadac420ca5d/jinja2_humanize_extension-0.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f9/b4/55e885834c847ea610e111d87b9ed4768f0afdaeebc00cd46810f25029f6/lupa-2.6-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/70/81/54e3ce63502cd085a0c556652a4e1b919c45a446bd1e5300e10c44c8c521/markdown-3.10-py3-none-any.whl @@ -6245,6 +7848,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ef/82/7a9d0550484a62c6da82858ee9419f3dd1ccc9aa1c26a1e43da3ecd20b0d/natsort-8.4.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0c/88/e2eaa6cffb115b85ed7c7c87775cb8bcf0816816bc98ca8dbfa2ee33fe6e/numpy-2.3.5-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/85/d831a9bc0a9e0e1a304ff3d12c1489a5fbc9bf6690a15dcbdae372bbca45/opentelemetry_api-1.39.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/18/18b662a6ecb8252db9e7457fd3c836729bf28b055b60505cbd4763ea9300/opentelemetry_exporter_prometheus-0.60b0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/b4/2adc8bc83eb1055ecb592708efb6f0c520cc2eb68970b02b0f6ecda149cf/opentelemetry_sdk-1.39.0-py3-none-any.whl @@ -6252,8 +7856,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/95/fe/792cc06a84808dbdc20ac6eab6811c53091b42f8e51ecebf14b540e9cfe4/orjson-3.11.5-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/4f/c7/e54682c96a895d0c808453269e0b5928a07a127a15704fedb643e9b0a4c8/pandas-2.3.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/30/04/b57109ac39c90054ca8239daa61f619042b73406309c33df06d3b73a48a7/pandas_flavor-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/48/95/9d90c3e9f0b5334ed8ddd69bb13680093cc53eb1bcc7a2a34eeb5671f24c/prefect-3.6.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b8/db/14bafcb4af2139e046d03fd00dea7873e48eafe18b7d2797e73d6681f210/prometheus_client-0.23.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/80/2d/1bb683f64737bbb1f86c82b7359db1eb2be4e2c0c13b947f80efefa7d3e5/psycopg2_binary-2.9.11-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/99/10/72f6f213b8f0bce36eff21fda0a13271834e9eeff7f9609b01afdc253c79/py_key_value_aio-0.3.0-py3-none-any.whl @@ -6266,17 +7873,27 @@ environments: - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4f/63/1cee9989cdce573c53f64bc142cd75c899c3830e7feb7126510d620d1fa6/pydocket-0.15.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/14/a2b6e1e47b342339a880af265dacaa034bbc3573ff2eda63006e863bfacc/pyjanitor-0.32.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz - pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/51/e5/fecf13f06e5e5f67e8837d777d1bc43fac0ed2b77a676804df5c34744727/python_json_logger-4.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a9/10/e4b1e0e5b6b6745c8098c275b69bc9d73e9542d5c7da4f137542b499ed44/readchar-4.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/00/6e29bb314e271a743170e53649db0fdb8e8ff0b64b4f425f5602f4eb9014/regex-2025.11.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/64/8d/0133e4eb4beed9e425d9a98ed6e081a55d195481b7632472be1af08d2f6b/rsa-4.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl @@ -6284,8 +7901,20 @@ environments: - pypi: https://files.pythonhosted.org/packages/cd/01/1204382461fcbfeb05b6161b594f4007e78b6eba9b375382f79153172b4d/scipy-1.16.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/03/51/665617fe4f8c6450f42a6d8d69243f9420f5677395572c2fe9d21b493b7b/sqlalchemy-2.0.44-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl @@ -6295,8 +7924,11 @@ environments: - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/c2/14/e2a54fabd4f08cd7af1c07030603c3356b74da07f7cc056e600436edfa17/tzlocal-5.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/21/6ecf7db074235552d7b0be84c48d934e9916809d7dafb96d9a1019dd2ded/uv-0.9.16-py3-none-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1b/6c/c65773d6cab416a64d191d6ee8a8b1c68a09970ea6909d16965d26bfed1e/websockets-15.0.1-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/7d/8d/70ed8ad284cf228d5ae89a6d3d99f21ccc78b270e8ddea4a0ca4575c5185/whenever-0.9.3-cp313-cp313-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/d5/e4/62a677feefde05b12a70a4fc9bdc8558010182a801fbcab68cb56c2b0986/xarray-2025.12.0-py3-none-any.whl @@ -6315,6 +7947,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/asyncpg-0.29.0-py312h66e93f0_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bcrypt-5.0.0-py312h868fb18_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py312h2ec8cdc_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda @@ -6340,6 +7974,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.44-h1423503_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.1-hecca717_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.6-h2dba641_1.conda @@ -6367,12 +8002,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pynacl-1.6.1-py312h4c3975b_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py312h178313f_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8c095d6_2.conda @@ -6388,37 +8027,93 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ukkonen-1.0.1-py312h68727a3_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/watchdog-6.0.0-py312h7900ff3_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/wrapt-2.0.1-py312h4c3975b_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h280c20c_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py312h66e93f0_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/30/da/4e42788fb811bbbfd7b7f045570c062f49e350e1d1f3df056c3fb5763353/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/0d/76/941cc9f73529988688a665a5c0ecff1112b3d95ab48f81db5f7606f522d3/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/e5/5aa65852dadc24b7d8ae75b7efb8d19303ed6ac93482e60c44a585930ea5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/webservice linux-aarch64: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/_openmp_mutex-4.5-2_gnu.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/asyncpg-0.29.0-py312hb2c0f52_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bcrypt-5.0.0-py312h5eb8f6c_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-python-1.1.0-py312h1ab2c47_4.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h4777abc_8.conda @@ -6444,6 +8139,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ld_impl_linux-aarch64-2.45-default_h1979696_104.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.3-hfae3067_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.5.2-hd65408f_0.conda @@ -6471,12 +8167,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pynacl-1.6.1-py312hcd1a082_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.12.12-h91f4b29_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/pyyaml-6.0.3-py312ha4530ae_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8382b9d_2.conda @@ -6492,37 +8192,93 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/ukkonen-1.0.1-py312h4f740d2_6.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/watchdog-6.0.0-py312h8025657_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/wrapt-2.0.1-py312hcd1a082_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/yaml-0.2.5-h80f16a2_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstandard-0.25.0-py312hd41f8a7_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-aarch64/zstd-1.5.7-hbcf94c1_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2d/75/364847b879eb630b3ac8293798e380e441a957c53657995053c5ec39a316/psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/68/b8/a01b53cb0e59139fbc9e4fda3e9724ede8de279097179be4ff31f1abb65a/pydantic_core-2.41.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/ba/411d414ed99ea1afdd185bbabeeaac00624bd1e4b22840b5e9967ade6337/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/d5/2ebbabe0379418eda8041c06b0b551f213576bfe4c2f09d77c06c07c8cc5/sqlalchemy-2.0.44-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/webservice osx-64: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/asyncpg-0.29.0-py312hb553811_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bcrypt-5.0.0-py312h8a6388b_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/brotli-python-1.1.0-py312haafddd8_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/bzip2-1.0.8-hfdf4475_7.conda @@ -6548,6 +8304,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libcxx-20.1.8-h3d58e20_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.7.1-h21dd04a_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.6-h281671d_1.conda @@ -6568,12 +8325,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/pynacl-1.6.1-py312h80b0991_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/python-3.12.11-h9ccd52b_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-64/pyyaml-6.0.2-py312h3520af0_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/readline-8.2-h7cca4af_2.conda @@ -6589,36 +8350,92 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-64/ukkonen-1.0.1-py312hc5c4d5f_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-64/watchdog-6.0.0-py312h80b0991_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/wrapt-2.0.1-py312h80b0991_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/yaml-0.2.5-h4132b18_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-64/zstandard-0.23.0-py312h01d7ebd_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d8/91/f870a02f51be4a65987b45a7de4c2e1897dd0d01051e2b559a38fa634e3e/psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/5d/5f6c63eebb5afee93bcaae4ce9a898f3373ca23df3ccaef086d0233a35a7/pydantic_core-2.41.5-cp312-cp312-macosx_10_12_x86_64.whl - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/50/bc0e6e736d94e420df79be4deb5c9476b63165c87bb8f19ef75d100d21b3/rpds_py-0.29.0-cp312-cp312-macosx_10_12_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/62/c4/59c7c9b068e6813c898b771204aad36683c96318ed12d4233e1b18762164/sqlalchemy-2.0.44-cp312-cp312-macosx_10_13_x86_64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/webservice osx-arm64: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/asyncpg-0.29.0-py312h024a12e_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.3.0-pyh71513ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bcrypt-5.0.0-py312h6ef9ec0_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/brotli-python-1.1.0-py312hd8f9ff3_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda @@ -6645,6 +8462,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.10-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libcxx-20.1.8-hf598326_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda @@ -6665,12 +8483,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pynacl-1.6.1-py312h4409184_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha55dd90_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.12.11-hc22306f_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh1179c8e_3.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/osx-arm64/pyyaml-6.0.2-py312h998013c_2.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda @@ -6686,35 +8508,91 @@ environments: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ukkonen-1.0.1-py312h6142ec9_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.34.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/watchdog-6.0.0-py312h4409184_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/wrapt-2.0.1-py312h4409184_1.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/yaml-0.2.5-h925e9cb_3.conda - conda: https://conda.anaconda.org/conda-forge/osx-arm64/zstandard-0.23.0-py312hea69d52_2.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7a/93/aa8072af4ff37b795f6bbf43dcaf61115f40f49935c7dbb180c9afc3f421/fastapi-0.122.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/27/fa/cae40e06849b6c9a95eb5c04d419942f00d9eaac8d81626107461e268821/psycopg2_binary-2.9.11-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/82/2f/e68750da9b04856e2a7ec56fc6f034a5a79775e9b9a81882252789873798/pydantic-2.12.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/aa/32/9c2e8ccb57c01111e0fd091f236c7b371c1bccea0fa85247ac55b1e2b6b6/pydantic_core-2.41.5-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/3a/46676277160f014ae95f24de53bed0e3b7ea66c235e7de0b9df7bd5d68ba/rpds_py-0.29.0-cp312-cp312-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d6/ae/eeb0920537a6f9c5a3708e4a5fc55af25900216bdb4847ec29cfddf3bf3a/sqlalchemy-2.0.44-cp312-cp312-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/webservice win-64: - conda: https://conda.anaconda.org/conda-forge/noarch/async-timeout-5.0.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/asyncpg-0.29.0-py312h4389bb4_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/attrs-25.4.0-pyhcf101f3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bcrypt-5.0.0-py312hdabe01f_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py312hbb81ca0_4.conda - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h0ad9c76_8.conda @@ -6740,6 +8618,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.11-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.3.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/invoke-2.2.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.6-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.7.3-hac47afa_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.5.2-h52bdfb6_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblzma-5.8.1-h2466b09_2.conda @@ -6758,12 +8637,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyh29332c3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pynacl-1.6.1-py312he06e257_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.5-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.2-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-cov-7.0.0-pyhcf101f3_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.12.12-h0159041_1_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dotenv-1.2.1-pyhcf101f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.12-8_cp312.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2025.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-311-py312h829343e_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pywin32-on-windows-0.1.0-pyh07e9846_2.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.3-py312h05f76fc_0.conda @@ -6783,6 +8666,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.44.35208-h818238b_32.conda - conda: https://conda.anaconda.org/conda-forge/win-64/vcomp14-14.44.35208-h818238b_32.conda - conda: https://conda.anaconda.org/conda-forge/noarch/virtualenv-20.35.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/watchdog-6.0.0-py312h2e8e312_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyh7428d3b_8.conda @@ -6790,25 +8674,78 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h6a83c73_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.25.0-py312he5662c2_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.7-h534d264_6.conda + - pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz - pypi: https://files.pythonhosted.org/packages/7f/9c/36c5c37947ebfb8c7f22e0eb6e4d188ee2d53aa3880f3f2744fb894f0cb1/anyio-4.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/4d/29/9e1e82e16e9a1763d3b55bfbe9b2fa39d7175a1fd97685c482fa402e111d/fastapi-0.124.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/4c/e0ce1ef95d4000ebc1c11801f9b944fa5910ecc15b5e351865763d8657f8/graphviz-0.21-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6c/79/3912a94cf27ec503e51ba493692d6db1e3cd8ac7ac52b0b47c8e33d7f4f9/greenlet-3.3.0-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/87/fb/99f81ac72ae23375f22b7afdb7642aba97c00a713c217124420147681a2f/mako-1.3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b1/d2/99b55e85832ccde77b211738ff3925a5d73ad183c0b37bcbbe5a8ff04978/psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/86/45/00173a033c801cacf67c190fef088789394feaf88a98a7035b0e40d53dc9/pydantic_core-2.41.5-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/c1/60/5d4751ba3f4a40a6891f24eec885f51afd78d208498268c734e256fb13c4/pydantic_settings-2.12.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + - pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl + - pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/25/83/24690e9dfc241e6ab062df82cc0df7f4231c79ba98b273fa496fb3dd78ed/sqlalchemy-2.0.44-cp312-cp312-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/8c/92/c35e036151fe53822893979f8a13e6f235ae8191f4164a79ae60a95d66aa/sqlmodel-0.0.27-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/d9/52/1064f510b141bd54025f9b55105e26d1fa970b9be67ad766380a3c9b74b0/starlette-0.50.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ee/d9/d88e73ca598f4f6ff671fb5fde8a32925c2e08a637303a1d12883c7305fa/uvicorn-0.38.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl - pypi: ./src/ca_biositing/datamodels - pypi: ./src/ca_biositing/webservice packages: @@ -6887,6 +8824,11 @@ packages: - sphinx==8.1.3 ; extra == 'docs' - sphinx-mdinclude==0.6.1 ; extra == 'docs' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7e/b3/6b4067be973ae96ba0d615946e314c5ae35f9f993eca561b356540bb0c2b/alabaster-1.0.0-py3-none-any.whl + name: alabaster + version: 1.0.0 + sha256: fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b + requires_python: '>=3.10' - pypi: https://files.pythonhosted.org/packages/ba/88/6237e97e3385b57b5f1528647addea5cc03d4d65d5979ab24327d41fb00d/alembic-1.17.2-py3-none-any.whl name: alembic version: 1.17.2 @@ -6931,6 +8873,12 @@ packages: requires_dist: - typing-extensions>=4.0.0 ; python_full_version < '3.9' requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/3e/38/7859ff46355f76f8d19459005ca000b6e7012f2f1ca597746cbcd1fbfe5e/antlr4-python3-runtime-4.9.3.tar.gz + name: antlr4-python3-runtime + version: 4.9.3 + sha256: f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b + requires_dist: + - typing ; python_full_version < '3.5' - pypi: https://files.pythonhosted.org/packages/15/b3/9b1a8074496371342ec1e796a96f99c82c945a339cd81a8e73de28b4cf9e/anyio-4.11.0-py3-none-any.whl name: anyio version: 4.11.0 @@ -7044,6 +8992,27 @@ packages: - pywin32 ; extra == 'windows' - tzdata ; extra == 'windows' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/ed/c9/d7977eaacb9df673210491da99e6a247e93df98c715fc43fd136ce1d3d33/arrow-1.4.0-py3-none-any.whl + name: arrow + version: 1.4.0 + sha256: 749f0769958ebdc79c173ff0b0670d59051a535fa26e8eba02953dc19eb43205 + requires_dist: + - python-dateutil>=2.7.0 + - backports-zoneinfo==0.2.1 ; python_full_version < '3.9' + - tzdata ; python_full_version >= '3.9' + - doc8 ; extra == 'doc' + - sphinx>=7.0.0 ; extra == 'doc' + - sphinx-autobuild ; extra == 'doc' + - sphinx-autodoc-typehints ; extra == 'doc' + - sphinx-rtd-theme>=1.3.0 ; extra == 'doc' + - dateparser==1.* ; extra == 'test' + - pre-commit ; extra == 'test' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mock ; extra == 'test' + - pytz==2025.2 ; extra == 'test' + - simplejson==3.* ; extra == 'test' + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/2f/f5/c36551e93acba41a59939ae6a0fb77ddb3f2e8e8caa716410c65f7341f72/asgi_lifespan-2.1.0-py3-none-any.whl name: asgi-lifespan version: 2.1.0 @@ -8556,6 +10525,21 @@ packages: purls: [] size: 196032 timestamp: 1728729672889 +- pypi: https://files.pythonhosted.org/packages/b7/b8/3fe70c75fe32afc4bb507f75563d39bc5642255d1d94f1f23604725780bf/babel-2.17.0-py3-none-any.whl + name: babel + version: 2.17.0 + sha256: 4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2 + requires_dist: + - pytz>=2015.7 ; python_full_version < '3.9' + - tzdata ; sys_platform == 'win32' and extra == 'dev' + - backports-zoneinfo ; python_full_version < '3.9' and extra == 'dev' + - freezegun~=1.0 ; extra == 'dev' + - jinja2>=3.0 ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - pytest>=6.0 ; extra == 'dev' + - pytz ; extra == 'dev' + - setuptools ; extra == 'dev' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.17.0-pyhd8ed1ab_0.conda sha256: 1c656a35800b7f57f7371605bc6507c8d3ad60fbaaec65876fce7f73df1fc8ac md5: 0a01c169f0ab0f91b26e77a3301fbfe4 @@ -9449,12 +11433,14 @@ packages: - pypi: ./src/ca_biositing/datamodels name: ca-biositing-datamodels version: 0.1.0 - sha256: 8ae1e752be98476eb39c6f1166c31a53009447b9dee40a9dfd1a460a855a58d0 + sha256: 718d8653acf22013568096765cdd4ba08419b4e53036b066786a81021a361bc0 requires_dist: - alembic>=1.13.2,<2 + - linkml>=1.8.0 - psycopg2-binary>=2.9.6,<3 - pydantic-settings>=2.0.0 - pydantic>=2.0.0 + - sqlalchemy>=2.0.0 - sqlmodel>=0.0.19,<0.1 requires_python: '>=3.12' - pypi: ./src/ca_biositing/pipeline @@ -10085,6 +12071,12 @@ packages: - pkg:pypi/cffi?source=hash-mapping size: 292681 timestamp: 1761203203673 +- pypi: https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d18b672642e13f7dc4f53545d530b52ee6533b6681ca/CFGraph-0.2.1.tar.gz + name: cfgraph + version: 0.2.1 + sha256: b57fe7044a10b8ff65aa3a8a8ddc7d4cd77bf511b42e57289cd52cbc29f8fe74 + requires_dist: + - rdflib>=0.4.2 - conda: https://conda.anaconda.org/conda-forge/noarch/cfgv-3.3.1-pyhd8ed1ab_1.conda sha256: d5696636733b3c301054b948cdd793f118efacce361d9bd4afb57d5980a9064f md5: 57df494053e17dce2ac3a0b33e1b2a2e @@ -10169,6 +12161,11 @@ packages: purls: [] size: 620647 timestamp: 1753287420283 +- pypi: https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl + name: chardet + version: 5.2.0 + sha256: e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970 + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.4.3-pyhd8ed1ab_0.conda sha256: 838d5a011f0e7422be6427becba3de743c78f3874ad2743c341accbba9bb2624 md5: 7e7d5ef1b9ed630e4a1c358d6bc62284 @@ -10191,13 +12188,14 @@ packages: - pkg:pypi/charset-normalizer?source=hash-mapping size: 50965 timestamp: 1760437331772 -- pypi: https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl +- pypi: https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl name: click - version: 8.3.1 - sha256: 981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6 + version: 8.1.8 + sha256: 63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2 requires_dist: - colorama ; sys_platform == 'win32' - requires_python: '>=3.10' + - importlib-metadata ; python_full_version < '3.8' + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/click-8.2.1-pyh707e725_0.conda sha256: 8aee789c82d8fdd997840c952a586db63c6890b00e88c4fb6e80a38edd5f51c0 md5: 94b550b8d3a614dbd326af798c7dfb40 @@ -10802,6 +12800,31 @@ packages: - pkg:pypi/cryptography?source=hash-mapping size: 1488294 timestamp: 1764805888325 +- pypi: https://files.pythonhosted.org/packages/8c/dd/29000adb47118edbf865a6e366fba294dcdacdf34322cedb23b8e7d30ae0/curies-0.12.5-py3-none-any.whl + name: curies + version: 0.12.5 + sha256: e7fbb63cb49aeb389d46db64dae02f1563741084e033c2075cd1e163fdb1ead8 + requires_dist: + - pydantic>=2.0 + - typing-extensions + - sphinx-automodapi ; extra == 'docs' + - sphinx-rtd-theme>=3.0 ; extra == 'docs' + - sphinx>=8 ; extra == 'docs' + - defusedxml ; extra == 'fastapi' + - fastapi ; extra == 'fastapi' + - httpx ; extra == 'fastapi' + - python-multipart ; extra == 'fastapi' + - uvicorn ; extra == 'fastapi' + - defusedxml ; extra == 'flask' + - flask ; extra == 'flask' + - pandas ; extra == 'pandas' + - rdflib ; extra == 'rdflib' + - sqlalchemy ; extra == 'sqlalchemy' + - sqlmodel ; extra == 'sqlmodel' + - coverage[toml] ; extra == 'tests' + - pytest ; extra == 'tests' + - requests ; extra == 'tests' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/cyrus-sasl-2.1.28-hd9c7081_0.conda sha256: ee09ad7610c12c7008262d713416d0b58bf365bc38584dce48950025850bdf3f md5: cae723309a49399d2949362f4ab5c9e4 @@ -11005,6 +13028,19 @@ packages: - pkg:pypi/decorator?source=hash-mapping size: 14129 timestamp: 1740385067843 +- pypi: https://files.pythonhosted.org/packages/84/d0/205d54408c08b13550c733c4b85429e7ead111c7f0014309637425520a9a/deprecated-1.3.1-py2.py3-none-any.whl + name: deprecated + version: 1.3.1 + sha256: 597bfef186b6f60181535a29fbe44865ce137a5079f295b479886c82729d5f3f + requires_dist: + - wrapt>=1.10,<3 + - inspect2 ; python_full_version < '3' + - tox ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - bump2version<1 ; extra == 'dev' + - setuptools ; python_full_version >= '3.12' and extra == 'dev' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - conda: https://conda.anaconda.org/conda-forge/noarch/distlib-0.4.0-pyhd8ed1ab_0.conda sha256: 6d977f0b2fc24fee21a9554389ab83070db341af6d6f09285360b2e09ef8b26e md5: 003b8ba0a94e2f1e117d0bd46aebc901 @@ -11137,6 +13173,11 @@ packages: - pkg:pypi/docker?source=hash-mapping size: 104144 timestamp: 1734056379149 +- pypi: https://files.pythonhosted.org/packages/11/a8/c6a4b901d17399c77cd81fb001ce8961e9f5e04d3daf27e8925cb012e163/docutils-0.22.3-py3-none-any.whl + name: docutils + version: 0.22.3 + sha256: bd772e4aca73aff037958d44f2be5229ded4c09927fcf8690c577b66234d6ceb + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/draco-1.5.7-h00ab1b0_0.conda sha256: 97722216c26379b2d9fe9ceed783074d6f84b2594ebc2fc0b0cad084ca50aa3d md5: 9cb0f7901c5279c48f1e3506c8d6cb94 @@ -11248,6 +13289,11 @@ packages: purls: [] size: 1166663 timestamp: 1759819842269 +- pypi: https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl + name: et-xmlfile + version: 2.0.0 + sha256: 7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda sha256: ce61f4f99401a4bd455b89909153b40b9c823276aefcbb06f2044618696009ca md5: 72e42d28960d875c7654614f8b50939a @@ -11738,6 +13784,13 @@ packages: purls: [] size: 4059 timestamp: 1762351264405 +- pypi: https://files.pythonhosted.org/packages/cf/58/8acf1b3e91c58313ce5cb67df61001fc9dcd21be4fadb76c1a2d540e09ed/fqdn-1.5.1-py3-none-any.whl + name: fqdn + version: 1.5.1 + sha256: 3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014 + requires_dist: + - cached-property>=1.3.0 ; python_full_version < '3.8' + requires_python: '>=2.7,!=3.0,!=3.1,!=3.2,!=3.3,!=3.4,<4' - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.13.3-ha770c72_1.conda sha256: 7ef7d477c43c12a5b4cddcf048a83277414512d1116aba62ebadfa7056a7d84f md5: 9ccd736d31e0c6e41f54e704e5312811 @@ -13244,6 +15297,11 @@ packages: purls: [] size: 1729398 timestamp: 1743086172436 +- pypi: https://files.pythonhosted.org/packages/7b/24/61844afbf38acf419e01ca2639f7bd079584523d34471acbc4152ee991c5/hbreader-0.9.1-py3-none-any.whl + name: hbreader + version: 0.9.1 + sha256: 9a6e76c9d1afc1b977374a5dc430a1ebb0ea0488205546d4678d6e31cc5f6801 + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/linux-64/hdf4-4.2.15-h2a13503_7.conda sha256: 0d09b6dc1ce5c4005ae1c6a19dc10767932ef9a5e9c755cfdbb5189ac8fb0684 md5: bd77f8da987968ec3927990495dc22e4 @@ -13579,6 +15637,11 @@ packages: - pkg:pypi/idna?source=hash-mapping size: 50721 timestamp: 1760286526795 +- pypi: https://files.pythonhosted.org/packages/ff/62/85c4c919272577931d407be5ba5d71c20f0b616d31a0befe0ae45bb79abd/imagesize-1.4.1-py2.py3-none-any.whl + name: imagesize + version: 1.4.1 + sha256: 0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - pypi: https://files.pythonhosted.org/packages/20/b0/36bd937216ec521246249be3bf9855081de4c5e06a0c9b4219dbeda50373/importlib_metadata-8.7.0-py3-none-any.whl name: importlib-metadata version: 8.7.0 @@ -13794,6 +15857,18 @@ packages: - pkg:pypi/ipython-pygments-lexers?source=hash-mapping size: 13993 timestamp: 1737123723464 +- pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + name: isodate + version: 0.7.2 + sha256: 28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl + name: isoduration + version: 20.11.0 + sha256: b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 + requires_dist: + - arrow>=0.15.0 + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.2-pyhd8ed1ab_1.conda sha256: 92c4d217e2dc68983f724aa983cca5464dcb929c566627b26a2511159667dba8 md5: a4f4c5dc9b80bc50e0d3dc4e6e8f1bd9 @@ -13887,6 +15962,25 @@ packages: purls: [] size: 73715 timestamp: 1726487214495 +- pypi: https://files.pythonhosted.org/packages/00/cc/7fbd75d3362e939eb98bcf9bd22f3f7df8c237a85148899ed3d38e5614e5/json_flattener-0.1.9-py3-none-any.whl + name: json-flattener + version: 0.1.9 + sha256: 6b027746f08bf37a75270f30c6690c7149d5f704d8af1740c346a3a1236bc941 + requires_dist: + - click + - pyyaml + requires_python: '>=3.7.0' +- pypi: https://files.pythonhosted.org/packages/71/57/38c47753c67ad67f76ba04ea673c9b77431a19e7b2601937e6872a99e841/jsonasobj-1.3.1-py3-none-any.whl + name: jsonasobj + version: 1.3.1 + sha256: b9e329dc1ceaae7cf5d5b214684a0b100e0dad0be6d5bbabac281ec35ddeca65 +- pypi: https://files.pythonhosted.org/packages/e5/90/0d93963711f811efe528e3cead2f2bfb78c196df74d8a24fe8d655288e50/jsonasobj2-1.0.4-py3-none-any.whl + name: jsonasobj2 + version: 1.0.4 + sha256: 12e86f86324d54fcf60632db94ea74488d5314e3da554c994fe1e2c6f29acb79 + requires_dist: + - hbreader + requires_python: '>=3.6' - pypi: https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl name: jsonpatch version: '1.33' @@ -22978,6 +25072,96 @@ packages: purls: [] size: 55476 timestamp: 1727963768015 +- pypi: https://files.pythonhosted.org/packages/91/54/5bb8f9fd0fbdd076a631bcae7c5aa3f8c1447e04650b79e45f77fab661e4/linkml-1.9.3-py3-none-any.whl + name: linkml + version: 1.9.3 + sha256: 77f2e566ce03f897bc0a9dc49d4d933a859d2a78ef56f080c9a0f8415becb884 + requires_dist: + - antlr4-python3-runtime>=4.9.0,<4.10 + - black>=24.0.0 ; extra == 'black' + - black>=24.0.0 ; extra == 'tests' + - click>=7.0 + - graphviz>=0.10.1 + - hbreader + - isodate>=0.6.0 + - jinja2>=3.1.0 + - jsonasobj2>=1.0.3,<2.0.0 + - jsonschema[format]>=4.0.0 + - linkml-runtime>=1.9.4,<2.0.0 + - numpydantic>=1.6.1 ; extra == 'numpydantic' + - numpydantic>=1.6.1 ; extra == 'tests' + - openpyxl + - pandera>=0.19.0 ; extra == 'pandera' + - parse + - polars-lts-cpu>=1.0.0 ; extra == 'polars-lts-cpu' + - prefixcommons>=0.1.7 + - prefixmaps>=0.2.2 + - pydantic>=1.0.0,<3.0.0 + - pyjsg>=0.11.6 + - pyshacl>=0.25.0 ; extra == 'shacl' + - pyshacl>=0.25.0 ; extra == 'tests' + - pyshex>=0.7.20 + - pyshexc>=0.8.3 + - python-dateutil + - pyyaml + - rdflib>=6.0.0 + - requests>=2.22 + - sphinx-click>=6.0.0 + - sqlalchemy>=1.4.31 + - typing-extensions>=4.6.0 ; python_full_version < '3.12' + - watchdog>=0.9.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/94/ff/b965a845fc0a9ca2331d8d6043e262cc834f5328ac0f1970db1622bac2cf/linkml-1.9.6-py3-none-any.whl + name: linkml + version: 1.9.6 + sha256: 4ac3d2b7b6ea38c9da70e264a434977281a655f5e6040b33e65be76c63ab95cd + requires_dist: + - antlr4-python3-runtime>=4.9.0,<4.10 + - click>=8.0,<8.2 + - graphviz>=0.10.1 + - hbreader + - isodate>=0.6.0 + - jinja2>=3.1.0 + - jsonasobj2>=1.0.3,<2.0.0 + - jsonschema[format]>=4.0.0 + - linkml-runtime>=1.9.5,<2.0.0 + - openpyxl + - parse + - prefixcommons>=0.1.7 + - prefixmaps>=0.2.2 + - pydantic>=1.0.0,<3.0.0 + - pyjsg>=0.11.6 + - pyshex>=0.7.20 + - pyshexc>=0.8.3 + - python-dateutil + - pyyaml + - rdflib>=6.0.0 + - requests>=2.22 + - sphinx-click>=6.0.0 + - sqlalchemy>=1.4.31 + - typing-extensions>=4.6.0 ; python_full_version < '3.12' + - watchdog>=0.9.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/34/28/cdcbe1f0521a98b891dd30249513eef1ddcc7bb406be953b4a8d7825e68f/linkml_runtime-1.9.5-py3-none-any.whl + name: linkml-runtime + version: 1.9.5 + sha256: fece3e8aa25a4246165c6528b6a7fe83a929b985d2ce1951cc8a0f4da1a30b90 + requires_dist: + - click + - curies>=0.5.4 + - deprecated + - hbreader + - isodate>=0.7.2,<1.0.0 ; python_full_version < '3.11' + - json-flattener>=0.1.9 + - jsonasobj2>=1.0.4,<2.dev0 + - jsonschema>=3.2.0 + - prefixcommons>=0.1.12 + - prefixmaps>=0.1.4 + - pydantic>=1.10.2,<3.0.0 + - pyyaml + - rdflib>=6.0.0 + - requests + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/osx-64/llvm-openmp-20.1.8-hf4e0ed4_1.conda sha256: 881975b8e13fb65d5e3d1cd7dd574581082af10c675c27c342e317c03ddfeaac md5: 55ae491cc02d64a55b75ffae04d7369b @@ -24744,6 +26928,13 @@ packages: purls: [] size: 2353617 timestamp: 1755014678838 +- pypi: https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl + name: openpyxl + version: 3.1.5 + sha256: 5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2 + requires_dist: + - et-xmlfile + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.5.2-h26f9b46_0.conda sha256: c9f54d4e8212f313be7b02eb962d0cb13a8dae015683a403d3accd4add3e520e md5: ffffb341206dd0dab0c36053c048d621 @@ -26318,6 +28509,10 @@ packages: - pkg:pypi/paramiko?source=hash-mapping size: 159896 timestamp: 1755102147074 +- pypi: https://files.pythonhosted.org/packages/d0/31/ba45bf0b2aa7898d81cbbfac0e88c267befb59ad91a19e36e1bc5578ddb1/parse-1.20.2-py2.py3-none-any.whl + name: parse + version: 1.20.2 + sha256: 967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558 - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.5-pyhcf101f3_0.conda sha256: 30de7b4d15fbe53ffe052feccde31223a236dae0495bab54ab2479de30b2990f md5: a110716cdb11cf51482ff4000dc253d7 @@ -27104,6 +29299,24 @@ packages: - prefect-snowflake>=0.28.0 ; extra == 'snowflake' - prefect-sqlalchemy>=0.5.0 ; extra == 'sqlalchemy' requires_python: '>=3.10,<3.15' +- pypi: https://files.pythonhosted.org/packages/31/e8/715b09df3dab02b07809d812042dc47a46236b5603d9d3a2572dbd1d8a97/prefixcommons-0.1.12-py3-none-any.whl + name: prefixcommons + version: 0.1.12 + sha256: 16dbc0a1f775e003c724f19a694fcfa3174608f5c8b0e893d494cf8098ac7f8b + requires_dist: + - pyyaml>=6.0,<7.0 + - click>=8.1.3,<9.0.0 + - pytest-logging>=2015.11.4,<2016.0.0 + - requests>=2.28.1,<3.0.0 + requires_python: '>=3.7,<4.0' +- pypi: https://files.pythonhosted.org/packages/89/b2/2b2153173f2819e3d7d1949918612981bc6bd895b75ffa392d63d115f327/prefixmaps-0.2.6-py3-none-any.whl + name: prefixmaps + version: 0.2.6 + sha256: f6cef28a7320fc6337cf411be212948ce570333a0ce958940ef684c7fb192a62 + requires_dist: + - curies>=0.5.3 + - pyyaml>=5.3.1 + requires_python: '>=3.8,<4.0' - conda: https://conda.anaconda.org/conda-forge/linux-64/proj-9.6.2-h18fbb6c_2.conda sha256: c1c9e38646a2d07007844625c8dea82404c8785320f8a6326b9338f8870875d0 md5: 1aeede769ec2fa0f474f8b73a7ac057f @@ -27857,6 +30070,13 @@ packages: - isort>=4.3.18 ; extra == 'all' - pytest-cov ; extra == 'all' requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl + name: pyjsg + version: 0.11.10 + sha256: 10af60ff42219be7e85bf7f11c19b648715b0b29eb2ddbd269e87069a7c3f26d + requires_dist: + - antlr4-python3-runtime~=4.9.3 + - jsonasobj>=1.2.1 - conda: https://conda.anaconda.org/conda-forge/noarch/pymdown-extensions-10.17.1-pyhd8ed1ab_0.conda sha256: e96cc6221542c8d70b0f5d57970616f61944af02ddc161a5f255c919c1ff7867 md5: ba4e2779714fb70737ec9938c74b4672 @@ -28053,6 +30273,14 @@ packages: - pkg:pypi/pynacl?source=hash-mapping size: 1184528 timestamp: 1764063741665 +- pypi: https://files.pythonhosted.org/packages/10/5e/1aa9a93198c6b64513c9d7752de7422c06402de6600a8767da1524f9570b/pyparsing-3.2.5-py3-none-any.whl + name: pyparsing + version: 3.2.5 + sha256: e38a4f02064cf41fe6593d328d0512495ad1f3d8a91c4f73fc401b3079a59a5e + requires_dist: + - railroad-diagrams ; extra == 'diagrams' + - jinja2 ; extra == 'diagrams' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda sha256: afe32182b1090911b64ac0f29eb47e03a015d142833d8a917defd65d91c99b74 md5: aa0028616c0750c773698fdc254b2b8d @@ -28447,6 +30675,33 @@ packages: purls: [] size: 124366 timestamp: 1695651311454 +- pypi: https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl + name: pyshex + version: 0.8.1 + sha256: 6da1b10123e191abf8dcb6bf3e54aa3e1fcf771df5d1a0ed453217c8900c8e6a + requires_dist: + - cfgraph>=0.2.1 + - chardet + - pyshexc==0.9.1 + - rdflib-shim + - requests>=2.22.0 + - shexjsg>=0.8.2 + - sparqlslurper>=0.5.1 + - sparqlwrapper>=1.8.5 + - urllib3 + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl + name: pyshexc + version: 0.9.1 + sha256: efc55ed5cb2453e9df569b03e282505e96bb06597934288f3b23dd980ef10028 + requires_dist: + - antlr4-python3-runtime~=4.9.3 + - chardet + - jsonasobj>=1.2.1 + - pyjsg>=0.11.10 + - rdflib-shim + - shexjsg>=0.8.1 + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh09c184e_7.conda sha256: d016e04b0e12063fbee4a2d5fbb9b39a8d191b5a0042f0b8459188aedeabb0ca md5: e2fd202833c4a981ce8a65974fe4abd1 @@ -28528,6 +30783,12 @@ packages: - pkg:pypi/pytest-cov?source=hash-mapping size: 29016 timestamp: 1757612051022 +- pypi: https://files.pythonhosted.org/packages/dc/1e/fb11174c9eaebcec27d36e9e994b90ffa168bc3226925900b9dbbf16c9da/pytest-logging-2015.11.4.tar.gz + name: pytest-logging + version: 2015.11.4 + sha256: cec5c85ecf18aab7b2ead5498a31b9f758680ef5a902b9054ab3f2bdbb77c896 + requires_dist: + - pytest>=2.8.1 - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.12.11-h9e4cc4f_0_cpython.conda sha256: 6cca004806ceceea9585d4d655059e951152fc774a471593d4f5138e6a54c81d md5: 94206474a5608243a10c92cefbe0908f @@ -30540,6 +32801,34 @@ packages: purls: [] size: 856271 timestamp: 1746622200646 +- pypi: https://files.pythonhosted.org/packages/b9/20/35d2baebacf357b562bd081936b66cd845775442973cb033a377fd639a84/rdflib-7.5.0-py3-none-any.whl + name: rdflib + version: 7.5.0 + sha256: b011dfc40d0fc8a44252e906dcd8fc806a7859bc231be190c37e9568a31ac572 + requires_dist: + - berkeleydb>=18.1.0,<19.0.0 ; extra == 'berkeleydb' + - html5rdf>=1.2,<2 ; extra == 'html' + - httpx>=0.28.1,<0.29.0 ; extra == 'rdf4j' + - isodate>=0.7.2,<1.0.0 ; python_full_version < '3.11' + - lxml>=4.3,<6.0 ; extra == 'lxml' + - networkx>=2,<4 ; extra == 'networkx' + - orjson>=3.9.14,<4 ; extra == 'orjson' + - pyparsing>=2.1.0,<4 + requires_python: '>=3.8.1' +- pypi: https://files.pythonhosted.org/packages/d0/d2/760527679057a7dad67f4e41f3e0c463b247f0bdbffc594e0add7c9077d6/rdflib_jsonld-0.6.1-py2.py3-none-any.whl + name: rdflib-jsonld + version: 0.6.1 + sha256: bcf84317e947a661bae0a3f2aee1eced697075fc4ac4db6065a3340ea0f10fc2 + requires_dist: + - rdflib>=5.0.0 +- pypi: https://files.pythonhosted.org/packages/5f/97/d8a785d2c7131c731c90cb0e65af9400081af4380bea4ec04868dc21aa92/rdflib_shim-1.0.3-py3-none-any.whl + name: rdflib-shim + version: 1.0.3 + sha256: 7a853e7750ef1e9bf4e35dea27d54e02d4ed087de5a9e0c329c4a6d82d647081 + requires_dist: + - rdflib>=5.0.0 + - rdflib-jsonld==0.6.1 + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/linux-64/rdma-core-58.0-h5888daf_0.conda sha256: 0346fd8002869046b50b9f63cf7244cd13e9875f35edaf8ad60a9b1c9b0d80f1 md5: 7f62f528e8a6d580ba74b14a0402d9ab @@ -30788,6 +33077,10 @@ packages: requires_dist: - six requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- pypi: https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl + name: rfc3987 + version: 1.3.8 + sha256: 10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53 - pypi: https://files.pythonhosted.org/packages/25/7a/b0178788f8dc6cafce37a212c99565fa1fe7872c70c6c9c1e1a372d9d88f/rich-14.2.0-py3-none-any.whl name: rich version: 14.2.0 @@ -30797,6 +33090,16 @@ packages: - markdown-it-py>=2.2.0 - pygments>=2.13.0,<3.0.0 requires_python: '>=3.8.0' +- pypi: https://files.pythonhosted.org/packages/82/1d/7356f115a0e5faf8dc59894a3e9fc8b1821ab949163458b0072db0a12a68/roman_numerals-3.1.0-py3-none-any.whl + name: roman-numerals + version: 3.1.0 + sha256: 842ae5fd12912d62720c9aad8cab706e8c692556d01a38443e051ee6cc158d90 + requires_dist: + - mypy==1.15.0 ; extra == 'lint' + - ruff==0.9.7 ; extra == 'lint' + - pyright==1.1.394 ; extra == 'lint' + - pytest>=8 ; extra == 'test' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/04/4c/f9b8a05faca3d9e0a6397c90d13acb9307c9792b2bff621430c58b1d6e76/rpds_py-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl name: rpds-py version: 0.29.0 @@ -31477,6 +33780,12 @@ packages: version: 1.5.4 sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl + name: shexjsg + version: 0.8.2 + sha256: 3b0d8432dd313bee9e1343382c5e02e9908dd941a7dd7342bf8c0200fe523766 + requires_dist: + - pyjsg>=0.11.10 - conda: https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py312h30efb56_0.conda sha256: baf6e63e213bb11e369a51e511b44217546a11f8470242bbaa8fac45cb4a39c3 md5: 32633871002ee9902f747d2236e0d122 @@ -31654,6 +33963,11 @@ packages: version: 1.3.1 sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl + name: snowballstemmer + version: 3.0.1 + sha256: 6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064 + requires_python: '!=3.0.*,!=3.1.*,!=3.2.*' - conda: https://conda.anaconda.org/conda-forge/noarch/snuggs-1.4.7-pyhd8ed1ab_2.conda sha256: 61f9373709e7d9009e3a062b135dbe44b16e684a4fcfe2dd624143bc0f80d402 md5: 9aa358575bbd4be126eaa5e0039f835c @@ -31671,6 +33985,30 @@ packages: name: sortedcontainers version: 2.4.0 sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- pypi: https://files.pythonhosted.org/packages/1a/77/48ce09fce2836856588beb84f434c1f8812d1428326efd993b619d49d949/sparqlslurper-0.5.1-py3-none-any.whl + name: sparqlslurper + version: 0.5.1 + sha256: ae49b2d8ce3dd38df7a40465b228ad5d33fb7e11b3f248d195f9cadfc9cfff87 + requires_dist: + - rdflib-shim + - rdflib>=5.0.0 + - sparqlwrapper>=1.8.2 + requires_python: '>=3.7.4' +- pypi: https://files.pythonhosted.org/packages/31/89/176e3db96e31e795d7dfd91dd67749d3d1f0316bb30c6931a6140e1a0477/SPARQLWrapper-2.0.0-py3-none-any.whl + name: sparqlwrapper + version: 2.0.0 + sha256: c99a7204fff676ee28e6acef327dc1ff8451c6f7217dcd8d49e8872f324a8a20 + requires_dist: + - rdflib>=6.1.1 + - setuptools>=3.7.1 ; extra == 'dev' + - mypy>=0.931 ; extra == 'dev' + - pandas>=1.3.5 ; extra == 'dev' + - pandas-stubs>=1.2.0.48 ; extra == 'dev' + - sphinx<5 ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - keepalive>=0.5 ; extra == 'keepalive' + - pandas>=1.3.5 ; extra == 'pandas' + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/linux-64/spdlog-1.15.3-h6dc744f_1.conda sha256: e5ddcc73dac4c138b763aab4feace6101bdccf39ea4cf599705c9625c70beba0 md5: ffeb70e2cedafa9243bf89a20ada4cfe @@ -31733,6 +34071,107 @@ packages: purls: [] size: 168575 timestamp: 1746813486793 +- pypi: https://files.pythonhosted.org/packages/c6/3f/4bbd76424c393caead2e1eb89777f575dee5c8653e2d4b6afd7a564f5974/sphinx-9.0.4-py3-none-any.whl + name: sphinx + version: 9.0.4 + sha256: 5bebc595a5e943ea248b99c13814c1c5e10b3ece718976824ffa7959ff95fffb + requires_dist: + - sphinxcontrib-applehelp>=1.0.7 + - sphinxcontrib-devhelp>=1.0.6 + - sphinxcontrib-htmlhelp>=2.0.6 + - sphinxcontrib-jsmath>=1.0.1 + - sphinxcontrib-qthelp>=1.0.6 + - sphinxcontrib-serializinghtml>=1.1.9 + - jinja2>=3.1 + - pygments>=2.17 + - docutils>=0.20,<0.23 + - snowballstemmer>=2.2 + - babel>=2.13 + - alabaster>=0.7.14 + - imagesize>=1.3 + - requests>=2.30.0 + - roman-numerals>=1.0.0 + - packaging>=23.0 + - colorama>=0.4.6 ; sys_platform == 'win32' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/44/bd/cb244695f67f77b0a36200ce1670fc42a6fe2770847e870daab99cc2b177/sphinx_click-6.2.0-py3-none-any.whl + name: sphinx-click + version: 6.2.0 + sha256: 1fb1851cb4f2c286d43cbcd57f55db6ef5a8d208bfc3370f19adde232e5803d7 + requires_dist: + - sphinx>=4.0 + - click>=8.0 + - docutils + - reno ; extra == 'docs' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/5d/85/9ebeae2f76e9e77b952f4b274c27238156eae7979c5421fba91a28f4970d/sphinxcontrib_applehelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-applehelp + version: 2.0.0 + sha256: 4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/35/7a/987e583882f985fe4d7323774889ec58049171828b58c2217e7f79cdf44e/sphinxcontrib_devhelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-devhelp + version: 2.0.0 + sha256: aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl + name: sphinxcontrib-htmlhelp + version: 2.1.0 + sha256: 166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + - html5lib ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c2/42/4c8646762ee83602e3fb3fbe774c2fac12f317deb0b5dbeeedd2d3ba4b77/sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl + name: sphinxcontrib-jsmath + version: 1.0.1 + sha256: 2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 + requires_dist: + - pytest ; extra == 'test' + - flake8 ; extra == 'test' + - mypy ; extra == 'test' + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/27/83/859ecdd180cacc13b1f7e857abf8582a64552ea7a061057a6c716e790fce/sphinxcontrib_qthelp-2.0.0-py3-none-any.whl + name: sphinxcontrib-qthelp + version: 2.0.0 + sha256: b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + - defusedxml>=0.7.1 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/52/a7/d2782e4e3f77c8450f727ba74a8f12756d5ba823d81b941f1b04da9d033a/sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl + name: sphinxcontrib-serializinghtml + version: 2.0.0 + sha256: 6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331 + requires_dist: + - ruff==0.5.5 ; extra == 'lint' + - mypy ; extra == 'lint' + - types-docutils ; extra == 'lint' + - sphinx>=5 ; extra == 'standalone' + - pytest ; extra == 'test' + requires_python: '>=3.9' - pypi: https://files.pythonhosted.org/packages/03/51/665617fe4f8c6450f42a6d8d69243f9420f5677395572c2fe9d21b493b7b/sqlalchemy-2.0.44-cp313-cp313-win_amd64.whl name: sqlalchemy version: 2.0.44 @@ -33120,6 +35559,32 @@ packages: - pkg:pypi/ukkonen?source=hash-mapping size: 18266 timestamp: 1761595426854 +- pypi: https://files.pythonhosted.org/packages/e7/00/3fca040d7cf8a32776d3d81a00c8ee7457e00f80c649f1e4a863c8321ae9/uri_template-1.3.0-py3-none-any.whl + name: uri-template + version: 1.3.0 + sha256: a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363 + requires_dist: + - types-pyyaml ; extra == 'dev' + - mypy ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-annotations ; extra == 'dev' + - flake8-bandit ; extra == 'dev' + - flake8-bugbear ; extra == 'dev' + - flake8-commas ; extra == 'dev' + - flake8-comprehensions ; extra == 'dev' + - flake8-continuation ; extra == 'dev' + - flake8-datetimez ; extra == 'dev' + - flake8-docstrings ; extra == 'dev' + - flake8-import-order ; extra == 'dev' + - flake8-literal ; extra == 'dev' + - flake8-modern-annotations ; extra == 'dev' + - flake8-noqa ; extra == 'dev' + - flake8-pyproject ; extra == 'dev' + - flake8-requirements ; extra == 'dev' + - flake8-typechecking-import ; extra == 'dev' + - flake8-use-fstring ; extra == 'dev' + - pep8-naming ; extra == 'dev' + requires_python: '>=3.7' - conda: https://conda.anaconda.org/conda-forge/linux-64/uriparser-0.9.8-hac33072_0.conda sha256: 2aad2aeff7c69a2d7eecd7b662eef756b27d6a6b96f3e2c2a7071340ce14543e md5: d71d3a66528853c0a1ac2c02d79a0284 @@ -33324,6 +35789,55 @@ packages: purls: [] size: 18919 timestamp: 1760418632059 +- pypi: https://files.pythonhosted.org/packages/12/87/48361531f70b1f87928b045df868a9fd4e253d9ae087fa4cf3f7113be363/watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl + name: watchdog + version: 6.0.0 + sha256: c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860 + requires_dist: + - pyyaml>=3.10 ; extra == 'watchmedo' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5b/7e/8f322f5e600812e6f9a31b75d242631068ca8f4ef0582dd3ae6e72daecc8/watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl + name: watchdog + version: 6.0.0 + sha256: 6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0 + requires_dist: + - pyyaml>=3.10 ; extra == 'watchmedo' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/85/83/cdf13902c626b28eedef7ec4f10745c52aad8a8fe7eb04ed7b1f111ca20e/watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl + name: watchdog + version: 6.0.0 + sha256: 76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134 + requires_dist: + - pyyaml>=3.10 ; extra == 'watchmedo' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl + name: watchdog + version: 6.0.0 + sha256: 7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13 + requires_dist: + - pyyaml>=3.10 ; extra == 'watchmedo' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl + name: watchdog + version: 6.0.0 + sha256: 20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2 + requires_dist: + - pyyaml>=3.10 ; extra == 'watchmedo' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl + name: watchdog + version: 6.0.0 + sha256: cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680 + requires_dist: + - pyyaml>=3.10 ; extra == 'watchmedo' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fe/c4/225c87bae08c8b9ec99030cd48ae9c4eca050a59bf5c2255853e18c87b50/watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl + name: watchdog + version: 6.0.0 + sha256: a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b + requires_dist: + - pyyaml>=3.10 ; extra == 'watchmedo' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/watchdog-6.0.0-py312h7900ff3_2.conda sha256: 0c0c7064908f7cf5d97e9fdf94f6892f05b3ba148ef8f5321ae6e7317720f05f md5: a5379513de9c827fb27935cefa3bf30d @@ -33410,6 +35924,11 @@ packages: - pkg:pypi/wcwidth?source=hash-mapping size: 33670 timestamp: 1758622418893 +- pypi: https://files.pythonhosted.org/packages/e2/cc/e097523dd85c9cf5d354f78310927f1656c422bd7b2613b2db3e3f9a0f2c/webcolors-25.10.0-py3-none-any.whl + name: webcolors + version: 25.10.0 + sha256: 032c727334856fc0b968f63daa252a1ac93d33db2f5267756623c210e57a4f1d + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/noarch/websocket-client-1.9.0-pyhd8ed1ab_0.conda sha256: 42a2b61e393e61cdf75ced1f5f324a64af25f347d16c60b14117393a98656397 md5: 2f1ed718fcd829c184a6d4f0f2e07409 diff --git a/pixi.toml b/pixi.toml index e5b60231..712f7d30 100644 --- a/pixi.toml +++ b/pixi.toml @@ -179,6 +179,8 @@ migrate = { cmd = [ "start-services", ] } +update-schema = { cmd = "python src/ca_biositing/datamodels/utils/orchestrate_schema_update.py", description = "Orchestrate schema update: generate models, rebuild services, and create migration." } + [tasks.qgis] depends-on = [{ task = "run-qgis", environment = "gis" }] @@ -252,7 +254,7 @@ args = [ { "arg" = "env_file", "default" = "../docker/.env" }, ] cwd = "resources/prefect" -cmd = "./deploy.py --env-file {{ env_file }} {{ deployment_name }}" +cmd = ["python", "deploy.py", "--env-file", "{{ env_file }}", "{{ deployment_name }}"] description = "Deploy the ETL pipeline to Prefect." depends-on = [{ task = "start-services" }] @@ -304,3 +306,7 @@ cwd = "deployment/cloud/gcp/infrastructure" [feature.cloud.tasks.cloud-destroy] cmd = "tofu destroy" cwd = "deployment/cloud/gcp/infrastructure" + +[pypi-dependencies] +linkml = ">=1.9.3, <2" +sqlalchemy = ">=2.0.44, <3" diff --git a/src/ca_biositing/datamodels/README.md b/src/ca_biositing/datamodels/README.md index a363db01..75239724 100644 --- a/src/ca_biositing/datamodels/README.md +++ b/src/ca_biositing/datamodels/README.md @@ -9,13 +9,42 @@ etc.). The `ca_biositing.datamodels` package provides: -- **Database Models**: SQLModel classes representing database tables for - biomass, geographic locations, experiments, samples, and more +- **LinkML Schema**: The single source of truth for the data model, defined in + YAML. +- **Generated Database Models**: SQLModel classes automatically generated from + the LinkML schema. - **Database Configuration**: Database connection and session management - utilities + utilities. - **Model Configuration**: Shared configuration for model behavior using - Pydantic Settings -- **Type Safety**: Full type annotations for all models and fields + Pydantic Settings. +- **Type Safety**: Full type annotations for all models and fields. + +## Schema Management Workflow + +We use **LinkML** as the source of truth for our data schema. The workflow for +making schema changes is: + +1. **Modify LinkML Schema**: Edit the YAML files in + `src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/`. +2. **Update Schema**: Run the orchestration command to generate Python models, + rebuild services, and create a migration. + ```bash + pixi run update-schema -m "Description of changes" + ``` + This command performs the following steps: + - Cleans the generated models directory. + - Generates new SQLAlchemy/SQLModel classes from the LinkML schema. + - Rebuilds the Docker services to include the new code. + - Starts the services. + - Generates an Alembic migration script. +3. **Apply Migration**: Apply the changes to the database. + ```bash + pixi run migrate + ``` + +The generated Python models are saved in +`src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/`. **Do +not edit these files directly.** Always modify the LinkML schema and regenerate. ## Structure @@ -24,20 +53,16 @@ src/ca_biositing/datamodels/ ├── ca_biositing/ │ └── datamodels/ │ ├── __init__.py # Package initialization and version -│ ├── biomass.py # Biomass-related models (FieldSample, Biomass, etc.) │ ├── config.py # Model configuration │ ├── database.py # Database connection setup -│ ├── data_and_references.py # Data and reference models -│ ├── experiments_analysis.py # Experiment analysis models -│ ├── external_datasets.py # External dataset models -│ ├── geographic_locations.py # Geographic location models -│ ├── metadata_samples.py # Sample metadata models -│ ├── organizations.py # Organization models -│ ├── people_contacts.py # People and contact models -│ ├── sample_preprocessing.py # Sample preprocessing models -│ ├── specific_aalysis_results.py # Analysis results models -│ ├── user.py # User models -│ └── templates/ # Model templates for new tables +│ ├── linkml/ # LinkML schema source files +│ │ ├── ca_biositing.yaml # Main schema entrypoint +│ │ └── modules/ # Modular schema definitions +│ ├── schemas/ +│ │ └── generated/ # Generated SQLModel classes (DO NOT EDIT) +│ └── utils/ # Schema management scripts +│ ├── generate_sqla.py # Script to generate models from LinkML +│ └── orchestrate_schema_update.py # Orchestration script ├── tests/ │ ├── __init__.py │ ├── conftest.py # Pytest fixtures and configuration @@ -76,32 +101,34 @@ pip install -e . ### Importing Models +Models are generated into separate modules based on the LinkML schema structure. +You should import them from `ca_biositing.datamodels.schemas.generated`. + ```python -from ca_biositing.datamodels.biomass import ( - Biomass, - FieldSample, - BiomassType, - PrimaryProduct +from ca_biositing.datamodels.schemas.generated.resource_information import ( + Resource, + ResourceClass, + PrimaryCrop ) -from ca_biositing.datamodels.geographic_locations import ( - GeographicLocation, - City, - State +from ca_biositing.datamodels.schemas.generated.field_sampling import FieldSample +from ca_biositing.datamodels.schemas.generated.places import ( + Geography, + LocationAddress ) # Create a model instance sample = FieldSample( - biomass_id=1, - sample_name="Sample-001", - amount_collected_kg=50.5 + name="Sample-001", + resource_id=1, + amount_collected=50.5 ) ``` ### Database Operations ```python -from sqlmodel import Session, create_engine -from ca_biositing.datamodels.biomass import Biomass +from sqlmodel import Session, create_engine, select +from ca_biositing.datamodels.schemas.generated.resource_information import Resource # Create engine and session engine = create_engine("postgresql://user:pass@localhost/dbname") @@ -109,11 +136,12 @@ engine = create_engine("postgresql://user:pass@localhost/dbname") # Use with SQLModel Session with Session(engine) as session: # Query models - biomass_items = session.query(Biomass).all() + statement = select(Resource) + resources = session.exec(statement).all() # Add new records - new_biomass = Biomass(biomass_name="Corn Stover") - session.add(new_biomass) + new_resource = Resource(name="Corn Stover") + session.add(new_resource) session.commit() ``` @@ -142,42 +170,49 @@ pixi run pytest src/ca_biositing/datamodels --cov=ca_biositing.datamodels --cov- See `tests/README.md` for detailed information about the test suite. -## Model Categories +## Model Categories (LinkML Modules) + +The schema is organized into modular YAML files in `linkml/modules/`. Each +module generates a corresponding Python file in `schemas/generated/`. -### Biomass Models (`biomass.py`) +### Core & Infrastructure -Core models for biomass entities, field samples, and related data: +- **`core.yaml`**: Base classes and shared types used across the schema. +- **`infrastructure.yaml`**: Infrastructure-related entities (e.g., + `InfrastructureType`, `Infrastructure`). +- **`places.yaml`**: Geographic location models (`GeographicLocation`, `City`, + `State`, `County`, `Region`, `FIPS`). +- **`people.yaml`**: People and contact information (`Person`, `ContactInfo`, + `Role`). +- **`data_sources_metadata.yaml`**: Metadata about data sources and references + (`DataSource`, `Reference`). -- `Biomass`: Core biomass entity -- `FieldSample`: Sample metadata collected in the field -- `BiomassType`: Lookup table for biomass types -- `PrimaryProduct`: Lookup table for primary products -- `BiomassAvailability`: Seasonal and quantitative availability -- `BiomassQuality`: Qualitative attributes -- `BiomassPrice`: Pricing information -- `HarvestMethod`, `CollectionMethod`, `FieldStorage`: Lookup tables +### Biomass & Sampling -### Geographic Models (`geographic_locations.py`) +- **`resource_information.yaml`**: Core biomass entities (`Biomass`, + `BiomassType`, `PrimaryProduct`, `BiomassAvailability`, `BiomassQuality`, + `BiomassPrice`). +- **`field_sampling.yaml`**: Field sampling data (`FieldSample`, + `HarvestMethod`, `CollectionMethod`, `FieldStorage`). +- **`sample_preparation.yaml`**: Sample preprocessing steps + (`SamplePreprocessing`, `PreprocessingMethod`). +- **`lineage.yaml`**: Tracking sample lineage (`SampleLineage`). -Models for location data (can be anonymized): +### Experiments & Analysis -- `GeographicLocation`: Main geographic location entity -- `StreetAddress`, `City`, `Zip`, `County`, `State`, `Region`: Location - components -- `FIPS`: FIPS codes -- `LocationResolution`: Resolution types (GPS, county, etc.) +- **`experiment_equipment.yaml`**: Experimental setup and equipment + (`Experiment`, `Equipment`). +- **`methods_parameters_units.yaml`**: Methods, parameters, and units (`Method`, + `Parameter`, `Unit`). +- **`general_analysis.yaml`**: General analysis results (`AnalysisResult`, + `AnalysisType`). +- **`aim1_records.yaml`**: Specific records for Aim 1 (`Aim1Record`). +- **`aim2_records.yaml`**: Specific records for Aim 2 (`Aim2Record`). -### Other Model Files +### External Data -- `data_and_references.py`: Data sources and references -- `experiments_analysis.py`: Experimental analysis data -- `external_datasets.py`: External dataset integration -- `metadata_samples.py`: Sample metadata -- `organizations.py`: Organization information -- `people_contacts.py`: People and contact information -- `sample_preprocessing.py`: Sample preprocessing steps -- `specific_aalysis_results.py`: Analysis results -- `user.py`: User management +- **`external_data.yaml`**: Integration with external datasets + (`ExternalDataset`). ## Dependencies @@ -201,16 +236,12 @@ pixi run pre-commit run --files src/ca_biositing/datamodels/**/* ### Adding New Models -1. Create or modify model files in `ca_biositing/datamodels/` -2. Follow the existing patterns (use SQLModel, Field definitions, type hints) -3. Add corresponding tests in `tests/` -4. Generate Alembic migrations if needed (see main project documentation) -5. Run tests and pre-commit checks - -### Model Templates - -Template files are available in `ca_biositing/datamodels/templates/` to help -create new models following the project conventions. +1. **Modify LinkML**: Add the new class to the appropriate YAML file in + `linkml/modules/`. +2. **Update Schema**: Run `pixi run update-schema -m "Add new model"`. +3. **Verify**: Check the generated file in `schemas/generated/` to ensure it + looks correct. +4. **Apply**: Run `pixi run migrate` to update the database. ## Package Information diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/biomass.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/biomass.py deleted file mode 100644 index 03d4bfb1..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/biomass.py +++ /dev/null @@ -1,306 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - - -# ------------------------------------------------------------ -# SQLModel classes generated from the DBdiagram schema -# ------------------------------------------------------------ - - - -# If you later want to add real FK constraints you can uncomment the import below -# from sqlalchemy import Column, Numeric, DateTime, func - - -# ---------------------------------------------------------------------- -# Table: field_samples -# ---------------------------------------------------------------------- -class FieldSample(SQLModel, table=True): - """Sample metadata collected in the field.""" - __tablename__ = "field_samples" - - sample_id: Optional[int] = Field( - default=None, - primary_key=True, - description="Unique identifier for each sample", - ) - biomass_id: int = Field( - default=None, - index=True, - description="Reference to biomass" - # foreign_key="biomass.biomass_id" - ) - sample_name: str = Field( - default=None, - description='e.g., "Ene‑WaHu018"', - ) - source_codename_id: Optional[int] = Field( - default=None, - index=True, - description="Anonymized source identifier", - ) - data_source_id: Optional[int] = Field( - default=None, - description="Reference to data source" - # foreign_key="data_sources.source_id" - ) - location_id: Optional[int] = Field( - default=None, - description="Reference to geographic location (may be null)" - # foreign_key="geographic_locations.location_id" - ) - field_storage_id: Optional[int] = Field( - default=None, - description="Reference to field storage" - # foreign_key="field_storage.field_storage_id" - ) - field_storage_duration_value: Optional[Decimal] = Field( - default=None, - description="Duration value for field storage", - ) - field_storage_duration_unit_id: Optional[int] = Field( - default=None, - description="Reference to unit of storage duration" - # foreign_key="units.unit_id" - ) - collection_timestamp: Optional[datetime] = Field(default=None) - collection_method_id: Optional[int] = Field( - default=None, - description="Reference to collection method" - # foreign_key="collection_methods.collection_method_id" - ) - harvest_method_id: Optional[int] = Field( - default=None, - description="Reference to harvest method" - # foreign_key="harvest_methods.harvest_method_id" - ) - harvest_date: Optional[date] = Field(default=None) - amount_collected_kg: Optional[Decimal] = Field(default=None) - provider_id: Optional[int] = Field( - default=None, - description="Reference to provider (anonymized)" - # foreign_key="providers.provider_id" - ) - collector_id: Optional[int] = Field( - default=None, - description="Reference to collector" - # foreign_key="collectors.collector_id" - ) - basic_sample_info_note: Optional[str] = Field(default=None) - created_at: datetime = Field( - default_factory=datetime.utcnow, - description="Timestamp when the record was created", - ) - - -# ---------------------------------------------------------------------- -# Table: biomass -# ---------------------------------------------------------------------- -class Biomass(SQLModel, table=True): - """Core biomass entity.""" - __tablename__ = "biomass" - - biomass_id: Optional[int] = Field(default=None, primary_key=True) - biomass_name: str = Field(default=None, index=True) - primary_product_id: Optional[int] = Field( - default=None, - description="Reference to primary product" - # foreign_key="primary_product.primary_product_id" - ) - taxonomy_id: Optional[int] = Field( - default=None, - description="Reference to taxonomy" - # foreign_key="taxonomy.taxonomy_id" - ) - biomass_type_id: Optional[int] = Field( - default=None, - index=True, - description="Reference to biomass type" - # foreign_key="biomass_type.biomass_type_id" - ) - biomass_notes: Optional[str] = Field(default=None) - - -# ---------------------------------------------------------------------- -# Table: biomass_test -# ---------------------------------------------------------------------- - -class BiomassTest(SQLModel, table=True): - """Testing Table""" - __tablename__ = "biomass_test" - - biomass_test_id: Optional[int] = Field(default=None, primary_key=True) - biomass_test_name: str = Field(default=None, index=True) - biomass_test_notes: Optional[str] = Field(default=None) - - - -# ---------------------------------------------------------------------- -# Table: biomass_type -# ---------------------------------------------------------------------- -class BiomassType(SQLModel, table=True): - """Lookup table for biomass type (e.g., crop by‑product, wood residue).""" - __tablename__ = "biomass_type" - - biomass_type_id: Optional[int] = Field(default=None, primary_key=True) - biomass_type: str = Field( - default=None, - unique=True, - description="Crop by‑product, Wood residue, etc.", - ) - - -# ---------------------------------------------------------------------- -# Table: primary_product -# ---------------------------------------------------------------------- -class PrimaryProduct(SQLModel, table=True): - """Lookup table for primary products derived from biomass.""" - __tablename__ = "primary_product" - - primary_product_id: Optional[int] = Field(default=None, primary_key=True) - primary_product_name: str = Field(default=None, unique=True) - - -# ---------------------------------------------------------------------- -# Table: biomass_availability -# ---------------------------------------------------------------------- -class BiomassAvailability(SQLModel, table=True): - """Seasonal and quantitative availability of a biomass.""" - __tablename__ = "biomass_availability" - - availability_id: Optional[int] = Field(default=None, primary_key=True) - biomass_id: int = Field( - default=None, - index=True, - description="Reference to biomass" - # foreign_key="biomass.biomass_id" - ) - location_id: Optional[int] = Field( - default=None, - description="Reference to geographic location" - # foreign_key="geographic_locations.location_id" - ) - primary_product_id: Optional[int] = Field( - default=None, - description="Reference to primary product" - # foreign_key="primary_product.primary_product_id" - ) - from_month: Optional[Decimal] = Field( - default=None, - description="Start month (e.g. 1 = Jan, 6.5 = mid‑June)", - ) - to_month: Optional[Decimal] = Field( - default=None, - description="End month (e.g. 12 = Dec)", - ) - kg_low: Optional[Decimal] = Field(default=None, description="Annual low estimate (kg)") - kg_avg: Optional[Decimal] = Field(default=None, description="Annual average estimate (kg)") - kg_high: Optional[Decimal] = Field(default=None, description="Annual high estimate (kg)") - bdt_low: Optional[Decimal] = Field(default=None, description="Bone‑dry tons low estimate") - bdt_avg: Optional[Decimal] = Field(default=None, description="Bone‑dry tons average") - bdt_high: Optional[Decimal] = Field(default=None, description="Bone‑dry tons high estimate") - data_source: Optional[int] = Field( - default=None, - description="Reference to data source" - # foreign_key="data_sources.source_id" - ) - availability_notes: Optional[str] = Field(default=None) - - -# ---------------------------------------------------------------------- -# Table: biomass_quality -# ---------------------------------------------------------------------- -class BiomassQuality(SQLModel, table=True): - """Qualitative attributes of a biomass.""" - __tablename__ = "biomass_quality" - - quality_id: Optional[int] = Field(default=None, primary_key=True) - biomass_id: int = Field( - default=None, - index=True, - description="Reference to biomass" - # foreign_key="biomass.biomass_id" - ) - expected_quality: Optional[str] = Field(default=None) - output_feedstocks: Optional[str] = Field( - default=None, - description="(Optional) Output feedstocks – may be moved to another table", - ) - convertibility: Optional[str] = Field(default=None) - disposal_challenges: Optional[str] = Field( - default=None, - description="Nondisposability issues", - ) - existing_markets: Optional[str] = Field( - default=None, - description="Substitutability information", - ) - substitute_materials: Optional[str] = Field(default=None) - regulatory_issues: Optional[str] = Field(default=None) - quality_data_sources: Optional[int] = Field( - default=None, - description="Reference to data source" - # foreign_key="data_sources.source_id" - ) - notes: Optional[str] = Field(default=None) - - -# ---------------------------------------------------------------------- -# Table: biomass_price -# ---------------------------------------------------------------------- -class BiomassPrice(SQLModel, table=True): - """Pricing information for a biomass.""" - __tablename__ = "biomass_price" - - price_id: Optional[int] = Field(default=None, primary_key=True) - biomass_id: int = Field( - default=None, - index=True, - description="Reference to biomass" - # foreign_key="biomass.biomass_id" - ) - price_per_kg_low: Optional[Decimal] = Field(default=None) - price_per_kg_avg: Optional[Decimal] = Field(default=None) - price_per_kg_high: Optional[Decimal] = Field(default=None) - price_data_sources: Optional[int] = Field( - default=None, - description="Reference to data source" - # foreign_key="data_sources.source_id" - ) - notes: Optional[str] = Field(default=None) - -# ---------------------------------------------------------------------- -# Table: harvest_methods -# ---------------------------------------------------------------------- -class HarvestMethod(SQLModel, table=True): - """Lookup table for harvest methods.""" - __tablename__ = "harvest_methods" - - harvest_method_id: Optional[int] = Field(default=None, primary_key=True) - harvest_method_name: str = Field(default=None, unique=True) - -# ---------------------------------------------------------------------- -# Table: collection_methods -# ---------------------------------------------------------------------- -class CollectionMethod(SQLModel, table=True): - """Lookup table for collection methods.""" - __tablename__ = "collection_methods" - - collection_method_id: Optional[int] = Field(default=None, primary_key=True) - collection_method_name: str = Field(default=None, unique=True) - -# ---------------------------------------------------------------------- -# Table: field_storage -# ---------------------------------------------------------------------- -class FieldStorage(SQLModel, table=True): - """Lookup table for field storage methods.""" - __tablename__ = "field_storage" - - field_storage_id: Optional[int] = Field(default=None, primary_key=True) - storage_method: str = Field(default=None, unique=True) diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/config.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/config.py deleted file mode 100644 index 40f4f9da..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/config.py +++ /dev/null @@ -1,37 +0,0 @@ -"""Configuration for CA Biositing data models. - -This module provides configuration management for database models using Pydantic Settings. -""" - -from __future__ import annotations - -from typing import Optional - -from pydantic_settings import BaseSettings, SettingsConfigDict - - -class ModelConfig(BaseSettings): - """Configuration for database models. - - Attributes: - database_url: PostgreSQL database connection URL - echo_sql: Whether to echo SQL statements (for debugging) - pool_size: Database connection pool size - max_overflow: Maximum number of connections that can be created beyond pool_size - """ - - model_config = SettingsConfigDict( - env_file=".env", - env_file_encoding="utf-8", - case_sensitive=False, - extra="ignore", - ) - - database_url: str = "postgresql://user:password@localhost:5432/ca_biositing" - echo_sql: bool = False - pool_size: int = 5 - max_overflow: int = 10 - - -# Global configuration instance -config = ModelConfig() diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/data_and_references.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/data_and_references.py deleted file mode 100644 index 0634e482..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/data_and_references.py +++ /dev/null @@ -1,85 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - - -# ---------------------------------------------------------------------- -# Data source / reference tables -# ---------------------------------------------------------------------- - - -class DataSource(SQLModel, table=True): - """Source of data (internal / external).""" - __tablename__ = "data_sources" - - source_id: Optional[int] = Field(default=None, primary_key=True) - source_name_id: Optional[int] = Field(default=None, - description="Reference to source_names.source_name_id") - # foreign_key="source_names.source_name_id") - source_type_id: Optional[int] = Field(default=None, - description="Reference to source_types.source_type_id") - # foreign_key="source_types.source_type_id") - data_resolution_id: Optional[int] = Field(default=None, - description="Reference to location_resolutions.location_resolution_id") - # foreign_key="location_resolutions.location_resolution_id") - description: Optional[str] = Field(default=None) - url_id: Optional[int] = Field(default=None, - description="Reference to url.url_id") - # foreign_key="url.url_id") - import_timestamp: Optional[datetime] = Field(default=None) - - __table_args__ = (Index("idx_data_sources_source_name_id", "source_name_id"),) - - -class SourceName(SQLModel, table=True): - """Human‑readable name for a data source.""" - __tablename__ = "source_names" - - source_name_id: Optional[int] = Field(default=None, primary_key=True) - source_name: str = Field(..., unique=True, description="Not null") - - -class SourceType(SQLModel, table=True): - """Type of source (e.g., internal, external).""" - __tablename__ = "source_types" - - source_type_id: Optional[int] = Field(default=None, primary_key=True) - source_type: str = Field(..., unique=True, description="Not null") - - -class Reference(SQLModel, table=True): - """Bibliographic reference.""" - __tablename__ = "references" - - reference_id: Optional[int] = Field(default=None, primary_key=True) - reference_title: Optional[str] = Field(default=None) - reference_author: Optional[str] = Field(default=None) - reference_publication: Optional[str] = Field(default=None) - reference_date: Optional[date] = Field(default=None) - reference_doi_id: Optional[int] = Field(default=None, - description="Reference to DOI.doi_id") - # foreign_key="doi.doi_id") - url_id: Optional[int] = Field(default=None, - description="Reference to url.url_id") - # foreign_key="url.url_id") - - -class DOI(SQLModel, table=True): - """Digital Object Identifier.""" - __tablename__ = "doi" - - doi_id: Optional[int] = Field(default=None, primary_key=True) - doi: Optional[str] = Field(default=None) - - -class URL(SQLModel, table=True): - """Unique URL.""" - __tablename__ = "url" - - url_id: Optional[int] = Field(default=None, primary_key=True) - url: Optional[str] = Field(default=None, unique=True) diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/database.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/database.py deleted file mode 100644 index 77e970af..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/database.py +++ /dev/null @@ -1,27 +0,0 @@ -"""Database connection and session management for CA Biositing data models.""" - -from __future__ import annotations - -from typing import Generator - -from sqlmodel import Session, create_engine - -from ca_biositing.datamodels.config import config - -# Create database engine -engine = create_engine( - config.database_url, - echo=config.echo_sql, - pool_size=config.pool_size, - max_overflow=config.max_overflow, -) - - -def get_session() -> Generator[Session, None, None]: - """Get a database session. - - Yields: - Session: SQLModel database session - """ - with Session(engine) as session: - yield session diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/experiments_analysis.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/experiments_analysis.py deleted file mode 100644 index ff68ecbb..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/experiments_analysis.py +++ /dev/null @@ -1,296 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - -# ---------------------------------------------------------------------- -# Experiments & analyses -# ---------------------------------------------------------------------- - - -class Experiment(SQLModel, table=True): - """Experiment definition.""" - __tablename__ = "experiments" - - experiment_id: Optional[int] = Field(default=None, primary_key=True) - exper_uuid: Optional[str] = Field(default=None, unique=True) - gsheet_exper_id: Optional[int] = Field(default=None, unique=True, - description="e.g., Ex05") - analysis_type_id: Optional[int] = Field(default=None, - description="Reference to analysis_types.analysis_type_id",) - # foreign_key="analysis_types.analysis_type_id") - analysis_abbrev_id: Optional[int] = Field(default=None, - description="Reference to analysis_abbreviations.analysis_abbreviations_id",) - # foreign_key="analysis_abbreviations.analysis_abbreviations_id") - exper_start_date: Optional[date] = Field(default=None) - exper_duration: Optional[Decimal] = Field(default=None) - exper_duration_unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id",) - # foreign_key="units.unit_id") - exper_location_id: Optional[int] = Field(default=None, - description="Reference to geographic_locations.location_id",) - # foreign_key="geographic_locations.location_id") - exper_description: Optional[str] = Field(default=None) - - __table_args__ = (Index("idx_experiments_analysis_type_id", "analysis_type_id"),) - - -class ExperimentMethod(SQLModel, table=True): - """Link table for many‑to‑many relationship between experiments and methods.""" - __tablename__ = "experiment_methods" - - experiment_method_id: Optional[int] = Field(default=None, primary_key=True) - experiment_id: Optional[int] = Field(default=None, - description="Reference to experiments.experiment_id",) - # foreign_key="experiments.experiment_id") - method_id: Optional[int] = Field(default=None, - description="Reference to methods.method_id",) - # foreign_key="methods.method_id") - - __table_args__ = ( - Index("idx_experiment_methods_method_id", "method_id"), - Index("idx_experiment_methods_experiment_id", "experiment_id"), - ) - - -class AnalysisType(SQLModel, table=True): - """Type of analysis (e.g., XRF, proximate).""" - __tablename__ = "analysis_types" - - analysis_type_id: Optional[int] = Field(default=None, primary_key=True) - analysis_name: Optional[str] = Field(default=None, unique=True, - description="X‑Ray Fluorescence analysis, Proximate analysis, Chemical Composition, Fermentation Profile, etc.") - - -class AnalysisAbbreviation(SQLModel, table=True): - """Abbreviation for an analysis type.""" - __tablename__ = "analysis_abbreviations" - - analysis_abbreviations_id: Optional[int] = Field(default=None, primary_key=True) - analysis_abbreviation: Optional[str] = Field(default=None, unique=True, - description="XRF, Prox, Comp, etc.") - - -class AnalysisResult(SQLModel, table=True): - """Result of a single analysis measurement.""" - __tablename__ = "analysis_results" - - result_id: Optional[int] = Field(default=None, primary_key=True) - anlaysis_sample: Optional[int] = Field(default=None, - description="Reference to preprocessed_samples.prepro_material_id",) - # foreign_key="preprocessed_samples.prepro_material_id") - experiment_id: Optional[int] = Field(default=None, - description="Reference to experiments.experiment_id",) - # foreign_key="experiments.experiment_id") - analysis_type_id: Optional[int] = Field(default=None, - description="Reference to analysis_types.analysis_type_id",) - # foreign_key="analysis_types.analysis_type_id") - replicate_no: Optional[int] = Field(default=None) - analysis_timestamp: Optional[datetime] = Field(default=None) - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id",) - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id",) - # foreign_key="units.unit_id") - qc_result_id: Optional[int] = Field(default=None, - description="Reference to qc_results.qc_result_id",) - # foreign_key="qc_results.qc_result_id") - measurement_equipment_id: Optional[int] = Field(default=None, - description="Reference to equipment.equipment_id",) - # foreign_key="equipment.equipment_id") - raw_data_url_id: Optional[int] = Field(default=None, - description="Reference to url.url_id",) - # foreign_key="url.url_id") - analyst_id: Optional[int] = Field(default=None, - description="Reference to analyst_contact.analyst_id",) - # foreign_key="analyst_contact.analyst_id") - analysis_note: Optional[str] = Field(default=None) - - __table_args__ = ( - Index("idx_analysis_results_parameter_id", "parameter_id"), - Index("uq_analysis_results_experiment_parameter_replicate", - "experiment_id", "parameter_id", "replicate_no", unique=True), - ) - - -class QCResult(SQLModel, table=True): - """Quality‑control result (Pass/Fail).""" - __tablename__ = "qc_results" - - qc_result_id: Optional[int] = Field(default=None, primary_key=True) - qc_result: Optional[str] = Field(default=None, unique=True, - description="Pass/Fail") - - -class Unit(SQLModel, table=True): - """Unit of measurement.""" - __tablename__ = "units" - - unit_id: Optional[int] = Field(default=None, primary_key=True) - unit: Optional[str] = Field(default=None, unique=True, - description="% total weight, % dry weight, ppm, %") - - -class ParameterMethod(SQLModel, table=True): - """Bridge table linking parameters to the methods that generate them.""" - __tablename__ = "parameter_methods" - - param_method_id: Optional[int] = Field(default=None, primary_key=True) - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id",) - # foreign_key="parameters.parameter_id") - method_id: Optional[int] = Field(default=None, - description="Reference to methods.method_id",) - # foreign_key="methods.method_id") - - -class Method(SQLModel, table=True): - """Analytical method definition.""" - __tablename__ = "methods" - - method_id: Optional[int] = Field(default=None, primary_key=True) - method_name: Optional[str] = Field(default=None, unique=True) - method_abbrev_id: Optional[int] = Field(default=None, - description="Reference to method_abbrevs.method_abbrev_id",) - # foreign_key="method_abbrevs.method_abbrev_id") - method_category_id: Optional[int] = Field(default=None, - description="Reference to method_categories.method_category_id",) - # foreign_key="method_categories.method_category_id") - method_standard_id: Optional[int] = Field(default=None, - description="Reference to method_standards.method_standard_id",) - # foreign_key="method_standards.method_standard_id") - description: Optional[str] = Field(default=None) - detection_limits: Optional[str] = Field(default=None) - procedure_reference_id: Optional[int] = Field(default=None, - description="Reference to references.reference_id",) - # foreign_key="references.reference_id") - method_url_id: Optional[int] = Field(default=None, - description="Reference to url.url_id",) - # foreign_key="url.url_id") - - __table_args__ = (Index("idx_methods_method_name", "method_name"),) - - -class MethodAbbreviation(SQLModel, table=True): - """Abbreviation for a method (e.g., NREL, ASTM).""" - __tablename__ = "method_abbrevs" - - method_abbrev_id: Optional[int] = Field(default=None, primary_key=True) - method_abbrev: str = Field(..., unique=True, - description="NREL, ASTM") - - -class MethodCategory(SQLModel, table=True): - """Category of a method (e.g., ICP, dry, wet).""" - __tablename__ = "method_categories" - - method_category_id: Optional[int] = Field(default=None, primary_key=True) - method_category: str = Field(..., unique=True, - description="ICP method, CompAna method, dry, wet") - - -class MethodStandard(SQLModel, table=True): - """Standard associated with a method (e.g., AOAC 997.02).""" - __tablename__ = "method_standards" - - method_standard_id: Optional[int] = Field(default=None, primary_key=True) - method_standard: str = Field(..., unique=True) - - -class Equipment(SQLModel, table=True): - """Laboratory or field equipment.""" - __tablename__ = "equipment" - - equipment_id: Optional[int] = Field(default=None, primary_key=True) - equipment_name: str = Field(..., unique=True, - description="Not null") - equipment_room_id: Optional[int] = Field(default=None, - description="Reference to rooms.room_id",) - # foreign_key="rooms.room_id") - description: Optional[str] = Field(default=None) - - -class MethodEquipment(SQLModel, table=True): - """Many‑to‑many link between methods and equipment.""" - __tablename__ = "method_equipment" - - method_equipment_id: Optional[int] = Field(default=None, primary_key=True) - method_id: Optional[int] = Field(default=None, - description="Reference to methods.method_id",) - # foreign_key="methods.method_id") - equipment_id: Optional[int] = Field(default=None, - description="Reference to equipment.equipment_id",) - # foreign_key="equipment.equipment_id") - - __table_args__ = ( - Index("idx_method_equipment_method_id", "method_id"), - Index("idx_method_equipment_equipment_id", "equipment_id"), - ) - - -class Parameter(SQLModel, table=True): - """Parameter that can be measured or calculated.""" - __tablename__ = "parameters" - - parameter_id: Optional[int] = Field(default=None, primary_key=True) - parameter_name: Optional[str] = Field(default=None, unique=True) - parameter_category_id: Optional[int] = Field(default=None, - description="Reference to parameter_catagories.parameter_catagory_id",) - # foreign_key="parameter_catagories.parameter_catagory_id") - standard_unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id",) - # foreign_key="units.unit_id") - calculated: Optional[bool] = Field(default=None, - description="If not calculated then it is measured directly. E.g. glucose vs glucan") - description: Optional[str] = Field(default=None) - typical_range_min: Optional[Decimal] = Field(default=None) - typical_range_max: Optional[Decimal] = Field(default=None) - - -class ParameterCategory(SQLModel, table=True): - """Category of a parameter (e.g., Fermentation, Minerals).""" - __tablename__ = "parameter_catagories" - - parameter_catagory_id: Optional[int] = Field(default=None, primary_key=True) - parameter_catagory: Optional[str] = Field(default=None, - description="Fermentation, Minerals, Elements, Compositional Analysis, etc") - - -class ParameterUnit(SQLModel, table=True): - """Bridge table linking parameters to alternative units.""" - __tablename__ = "parameter_units" - - parameter_unit_id: Optional[int] = Field(default=None, primary_key=True) - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id",) - # foreign_key="parameters.parameter_id") - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id",) - # foreign_key="units.unit_id") - - __table_args__ = ( - Index("idx_parameter_units_parameter_id", "parameter_id"), - Index("idx_parameter_units_unit_id", "unit_id"), - ) - - -class ImportLog(SQLModel, table=True): - """Log of data‑import operations.""" - __tablename__ = "import_log" - - import_id: Optional[int] = Field(default=None, primary_key=True) - import_timestamp: Optional[datetime] = Field(default=None) - destination: Optional[str] = Field(default=None) - source_file: Optional[str] = Field(default=None) - source_type: Optional[str] = Field(default=None, - description="CSV, Excel, PDF extraction") - records_imported: Optional[int] = Field(default=None) - import_status: Optional[str] = Field(default=None) - error_log: Optional[str] = Field(default=None) - import_user: Optional[str] = Field(default=None) diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/external_datasets.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/external_datasets.py deleted file mode 100644 index ad33d397..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/external_datasets.py +++ /dev/null @@ -1,295 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - -# ---------------------------------------------------------------------- -# External / third‑party data tables -# ---------------------------------------------------------------------- - - -class ExternalDairyOne(SQLModel, table=True): - """External data from the Dairy‑One dataset.""" - __tablename__ = "external_dairy_one" - - dairy_one_id: Optional[int] = Field(default=None, primary_key=True) - data_source_id: Optional[int] = Field(default=None, - description="Reference to data_sources.source_id") - # foreign_key="data_sources.source_id") - biomass_id: Optional[int] = Field(default=None, - description="Reference to biomass.biomass_id") - # foreign_key="biomass.biomass_id") - analysis_type_id: Optional[int] = Field(default=None, - description="Reference to analysis_types.analysis_type_id") - # foreign_key="analysis_types.analysis_type_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - parameter_method_id: Optional[int] = Field(default=None, - description="Reference to parameter_methods.param_method_id") - # foreign_key="parameter_methods.param_method_id") - samples_count: Optional[int] = Field(default=None) - mean_value: Optional[Decimal] = Field(default=None) - std_dev: Optional[Decimal] = Field(default=None) - min_value: Optional[Decimal] = Field(default=None) - max_value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - methodology_reference_id: Optional[int] = Field(default=None, - description="Reference to methods.method_id") - # foreign_key="methods.method_id") - accumulated_years_from: Optional[date] = Field(default=None) - accumulated_years_to: Optional[date] = Field(default=None) - import_date: Optional[date] = Field(default=None) - - __table_args__ = ( - Index("idx_external_dairy_one_biomass_id", "biomass_id"), - Index("idx_external_dairy_one_parameter_id", "parameter_id"), - ) - - -class ExternalINLBiofeedstockLibrary(SQLModel, table=True): - """INL Bio‑Feedstock Library external data.""" - __tablename__ = "external_inl_biofeedstock_library" - - bfl_id: Optional[int] = Field(default=None, primary_key=True) - data_source_id: Optional[int] = Field(default=None, - description="Reference to data_sources.source_id") - # foreign_key="data_sources.source_id") - sample_id: Optional[int] = Field(default=None, - description="Reference to field_samples.sample_id") - # foreign_key="field_samples.sample_id") - biomass_id: Optional[int] = Field(default=None, - description="Reference to biomass.biomass_id") - # foreign_key="biomass.biomass_id") - analysis_type_id: Optional[int] = Field(default=None, - description="Reference to analysis_types.analysis_type_id") - # foreign_key="analysis_types.analysis_type_id") - state_id: Optional[int] = Field(default=None, - description="Reference to states.state_id") - # foreign_key="states.state_id") - affiliations_id: Optional[int] = Field(default=None, - description="Reference to affiliations.affiliation_id") - # foreign_key="affiliations.affiliation_id") - harvest_method_id: Optional[int] = Field(default=None, - description="Reference to harvest_methods.harvest_method_id") - # foreign_key="harvest_methods.harvest_method_id") - collection_method_id: Optional[int] = Field(default=None, - description="Reference to collection_methods.collection_method_id") - # foreign_key="collection_methods.collection_method_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - parameter_method_id: Optional[int] = Field(default=None, - description="Reference to parameter_methods.param_method_id") - # foreign_key="parameter_methods.param_method_id") - mean_value: Optional[Decimal] = Field(default=None) - std_dev: Optional[Decimal] = Field(default=None) - min_value: Optional[Decimal] = Field(default=None) - max_value: Optional[Decimal] = Field(default=None) - sample_count: Optional[int] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - methodology_reference_id: Optional[int] = Field(default=None, - description="Reference to methods.method_id") - # foreign_key="methods.method_id") - accumulated_years_from: Optional[date] = Field(default=None) - accumulated_years_to: Optional[date] = Field(default=None) - import_date: Optional[date] = Field(default=None) - - __table_args__ = ( - Index("idx_external_inl_biofeedstock_library_biomass_id", "biomass_id"), - ) - - -class ExternalPhyllis2(SQLModel, table=True): - """External literature data (Phyllis2).""" - __tablename__ = "external_phyllis2" - - phyllis_id: Optional[int] = Field(default=None, primary_key=True) - data_source_id: Optional[int] = Field(default=None, - description="Reference to data_sources.source_id") - # foreign_key="data_sources.source_id") - biomass_id: Optional[int] = Field(default=None, - description="Reference to biomass.biomass_id") - # foreign_key="biomass.biomass_id") - analysis_type_id: Optional[int] = Field(default=None, - description="Reference to analysis_types.analysis_type_id") - # foreign_key="analysis_types.analysis_type_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - parameter_method_id: Optional[int] = Field(default=None, - description="Reference to parameter_methods.param_method_id") - # foreign_key="parameter_methods.param_method_id") - mean_value: Optional[Decimal] = Field(default=None) - std_dev: Optional[Decimal] = Field(default=None) - max_value: Optional[Decimal] = Field(default=None) - sample_count: Optional[int] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - methodology_reference_id: Optional[int] = Field(default=None, - description="Reference to methods.method_id") - # foreign_key="methods.method_id") - import_date: Optional[date] = Field(default=None) - - __table_args__ = ( - Index("idx_external_phyllis2_biomass_id", "biomass_id"), - Index("idx_external_phyllis2_analysis_type_id", "analysis_type_id"), - ) - - -class ExternalEBMUD(SQLModel, table=True): - """External EBMUD dataset.""" - __tablename__ = "external_ebmud" - - ebmud_id: Optional[int] = Field(default=None, primary_key=True) - data_source_id: Optional[int] = Field(default=None, - description="Reference to data_sources.source_id") - # foreign_key="data_sources.source_id") - biomass_id: Optional[int] = Field(default=None, - description="Reference to biomass.biomass_id") - # foreign_key="biomass.biomass_id") - analysis_type_id: Optional[int] = Field(default=None, - description="Reference to analysis_types.analysis_type_id") - # foreign_key="analysis_types.analysis_type_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - parameter_method_id: Optional[int] = Field(default=None, - description="Reference to parameter_methods.param_method_id") - # foreign_key="parameter_methods.param_method_id") - mean_value: Optional[Decimal] = Field(default=None) - std_dev: Optional[Decimal] = Field(default=None) - min_value: Optional[Decimal] = Field(default=None) - max_value: Optional[Decimal] = Field(default=None) - sample_count: Optional[int] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - import_date: Optional[date] = Field(default=None) - - -class VectorizedRasterPolygon(SQLModel, table=True): - """Polygon derived from a raster (PostGIS geometry).""" - __tablename__ = "vectorized_raster_polygons" - - vectorized_ID: Optional[int] = Field(default=None, primary_key=True) - geometry: Optional[str] = Field(default=None, - description="Polygon geometry (PostGIS), use appropriate SRID") - raster_id: Optional[int] = Field(default=None, - description="Optional foreign key to raster_metadata.id") - # foreign_key="raster_metadata.id") - class_: Optional[str] = Field(default=None, - description="Classification label or category (e.g., land use type)", - alias="class") - value: Optional[float] = Field(default=None, - description="Raw pixel value this polygon was derived from") - mean_value: Optional[float] = Field(default=None, - description="Mean raster value within the polygon") - std_dev: Optional[float] = Field(default=None, - description="Standard deviation of raster values in the polygon") - area_m2: Optional[float] = Field(default=None, - description="Area of the polygon in square meters") - date_acquired: Optional[date] = Field(default=None, - description="Date the source raster was collected") - source: Optional[str] = Field(default=None, - description="Source of the raster (e.g., Sentinel‑2)") - notes: Optional[str] = Field(default=None, - description="Additional optional metadata or remarks") - - -class RasterMetadata(SQLModel, table=True): - """Metadata for raster layers.""" - __tablename__ = "raster_metadata" - - id: Optional[int] = Field(default=None, primary_key=True) - source: Optional[str] = Field(default=None, - description="Data source name or provider") - resolution: Optional[float] = Field(default=None, - description="Raster resolution in meters") - srid: Optional[int] = Field(default=None, - description="Spatial reference ID used in raster") - acquisition_date: Optional[date] = Field(default=None, - description="Date of raster acquisition") - notes: Optional[str] = Field(default=None, - description="Any additional metadata") - - -class ExternalATIP(SQLModel, table=True): - """ATIP external geospatial data.""" - __tablename__ = "external_atip" - - atip_ID: Optional[int] = Field(default=None, primary_key=True) - biomass_id: Optional[int] = Field(default=None, - description="Reference to biomass.biomass_id") - # foreign_key="biomass.biomass_id") - location_id: Optional[int] = Field(default=None, - description="Reference to geographic_locations.location_id") - # foreign_key="geographic_locations.location_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - geometry_id: Optional[int] = Field(default=None) - geometry: Optional[str] = Field(default=None, - description="Geometry (PostGIS geom type)") - import_date: Optional[date] = Field(default=None) - - -class ExternalLandIQ(SQLModel, table=True): - """Land‑IQ external geospatial data.""" - __tablename__ = "external_land_id" - - land_id: Optional[int] = Field(default=None, primary_key=True) # renamed from land_id_id - biomass_id: Optional[int] = Field(default=None, - description="Reference to biomass.biomass_id") - # foreign_key="biomass.biomass_id") - location_id: Optional[int] = Field(default=None, - description="Reference to geographic_locations.location_id") - # foreign_key="geographic_locations.location_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - geometry_id: Optional[int] = Field(default=None) - geometry: Optional[str] = Field(default=None, - description="Geometry (PostGIS geom type)") - import_date: Optional[date] = Field(default=None) - - -class ExternalUSDA(SQLModel, table=True): - """USDA external geospatial data.""" - __tablename__ = "external_usda" - - usda_id: Optional[int] = Field(default=None, primary_key=True) - biomass_id: Optional[int] = Field(default=None, - description="Reference to biomass.biomass_id") - # foreign_key="biomass.biomass_id") - location_id: Optional[int] = Field(default=None, - description="Reference to geographic_locations.location_id") - # foreign_key="geographic_locations.location_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - geometry_id: Optional[int] = Field(default=None) - geometry: Optional[str] = Field(default=None, - description="Geometry (PostGIS geom type)") - import_date: Optional[date] = Field(default=None) diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/geographic_locations.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/geographic_locations.py deleted file mode 100644 index 84e6e21e..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/geographic_locations.py +++ /dev/null @@ -1,113 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - -# ---------------------------------------------------------------------- -# Geographic / Location tables -# ---------------------------------------------------------------------- - - -class GeographicLocation(SQLModel, table=True): - """Geographic location (can be anonymised).""" - __tablename__ = "geographic_locations" - - location_id: Optional[int] = Field(default=None, primary_key=True) - street_address_id: Optional[int] = Field(default=None, - description="Reference to street_addresses.street_address_id") - # foreign_key="street_addresses.street_address_id") - city_id: Optional[int] = Field(default=None, - description="Reference to cities.city_id") - # foreign_key="cities.city_id") - zip_id: Optional[int] = Field(default=None, - description="Reference to zips.zip_id") - # foreign_key="zips.zip_id") - county_id: Optional[int] = Field(default=None, - description="Reference to counties.county_id") - # foreign_key="counties.county_id") - state_id: Optional[int] = Field(default=None, - description="Reference to states.state_id") - # foreign_key="states.state_id") - region_id: Optional[int] = Field(default=None, - description="Reference to regions.region_id") - # foreign_key="regions.region_id") - fips_id: Optional[int] = Field(default=None, - description="Reference to fips.fips_id") - # foreign_key="fips.fips_id") - latitude: Optional[Decimal] = Field(default=None, - description="Can be null or generalized") - longitude: Optional[Decimal] = Field(default=None, - description="Can be null or generalized") - location_resolution_id: Optional[int] = Field(default=None, - description="Reference to location_resolutions.location_resolution_id") - # foreign_key="location_resolutions.location_resolution_id") - is_anonymous: Optional[bool] = Field(default=None) - - -class StreetAddress(SQLModel, table=True): - """Street address (may be null for privacy).""" - __tablename__ = "street_addresses" - - street_address_id: Optional[int] = Field(default=None, primary_key=True) - street_address: str = Field(..., description="Not null") - - -class City(SQLModel, table=True): - """City lookup.""" - __tablename__ = "cities" - - city_id: Optional[int] = Field(default=None, primary_key=True) - city_name: str = Field(..., unique=True, description="Not null") - - -class Zip(SQLModel, table=True): - """ZIP code lookup.""" - __tablename__ = "zips" - - zip_id: Optional[int] = Field(default=None, primary_key=True) - zip_code: str = Field(..., unique=True, description="Not null") - - -class County(SQLModel, table=True): - """County lookup.""" - __tablename__ = "counties" - - county_id: Optional[int] = Field(default=None, primary_key=True) - county_name: str = Field(..., unique=True, description="Not null") - - -class FIPS(SQLModel, table=True): - """FIPS code (preserve leading zeros).""" - __tablename__ = "fips" - - fips_id: Optional[int] = Field(default=None, primary_key=True) - fips_description: Optional[str] = Field(default=None) - - -class State(SQLModel, table=True): - """State lookup.""" - __tablename__ = "states" - - state_id: Optional[int] = Field(default=None, primary_key=True) - state_name: str = Field(..., unique=True, description="Not null") - - -class Region(SQLModel, table=True): - """Region lookup.""" - __tablename__ = "regions" - - region_id: Optional[int] = Field(default=None, primary_key=True) - region_name: str = Field(..., unique=True, description="Not null") - - -class LocationResolution(SQLModel, table=True): - """Resolution of a location (e.g., GPS, county, state).""" - __tablename__ = "location_resolutions" - - location_resolution_id: Optional[int] = Field(default=None, primary_key=True) - resolution_type: str = Field(..., unique=True, - description="region, state, city, county, etc") 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 new file mode 100644 index 00000000..94d9f8d2 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/ca_biositing.yaml @@ -0,0 +1,32 @@ +id: https://w3id.org/ca_biositing +name: ca_biositing +title: CA Biositing Schema +description: >- + LinkML schema for the CA Biositing project, defining data models for + bioeconomy site selection, including resources, sampling, analysis, and + infrastructure. +license: https://creativecommons.org/publicdomain/zero/1.0/ +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + schema: http://schema.org/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - modules/core + - modules/resource_information + - modules/field_sampling + - modules/places + - modules/people + - modules/lineage + - modules/data_sources_metadata + - modules/sample_preparation + - modules/methods_parameters_units + - modules/experiment_equipment + - modules/general_analysis + - modules/aim1_records + - modules/aim2_records + - modules/external_data diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/aim1_records.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/aim1_records.yaml new file mode 100644 index 00000000..8328faec --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/aim1_records.yaml @@ -0,0 +1,140 @@ +id: https://w3id.org/ca_biositing/aim1_records +name: aim1_records +title: Aim 1 Records +description: Records for Aim 1 analysis. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - general_analysis + - experiment_equipment + - resource_information + - sample_preparation + - methods_parameters_units + - data_sources_metadata + +classes: + Aim1RecordBase: + is_a: BaseEntity + abstract: true + slots: + - dataset_id + - experiment_id + - resource_id + - sample_id + - technical_replicate_no + - technical_replicate_total + - method_id + - analyst_id + - raw_data_id + - qc_pass + - note + + ProximateRecord: + is_a: Aim1RecordBase + description: Proximate analysis record. + + UltimateRecord: + is_a: Aim1RecordBase + description: Ultimate analysis record. + + CompositionalRecord: + is_a: Aim1RecordBase + description: Compositional analysis record. + + IcpRecord: + is_a: Aim1RecordBase + description: ICP analysis record. + + XrfRecord: + is_a: Aim1RecordBase + description: XRF analysis record. + slots: + - maybe_wavelength_nm + - maybe_intensity + - maybe_energy_slope + - maybe_energy_offset + + XrdRecord: + is_a: Aim1RecordBase + description: XRD analysis record. + slots: + - maybe_scan_low_nm + - maybe_scan_high_nm + + CalorimetryRecord: + is_a: Aim1RecordBase + description: Calorimetry analysis record. + + FtnirRecord: + is_a: Aim1RecordBase + description: FT-NIR analysis record. + + RgbRecord: + is_a: Aim1RecordBase + description: RGB analysis record. + +slots: + #Slots imported + #dataset_id: from general_analysis.yaml + #experiment_id: from experiments_equipment.yaml + #analyst_id: from experiments_equipment.yaml + #resource_id: from resource_information.yaml + #method_id: from experiments_equipment.yaml + #note: from core.yaml + + #New slots defined in Aim1RecordBase class + + sample_id: + range: integer + description: Reference to PreparedSample. + + technical_replicate_no: + range: integer + description: Replicate number. + + technical_replicate_total: + range: integer + description: Total number of replicates. + + raw_data_id: + range: integer + description: Reference to FileObjectMetadata. + + qc_pass: + range: boolean + description: Whether the record passed QC. + + #Potential slots for XrfRecord and XrdRecords + + maybe_wavelength_nm: + range: decimal + description: Wavelength in nm. + + maybe_intensity: + range: decimal + description: Intensity. + + maybe_energy_slope: + range: decimal + description: Energy slope. + + maybe_energy_offset: + range: decimal + description: Energy offset. + + maybe_scan_low_nm: + range: integer + description: Low scan range in nm. + + maybe_scan_high_nm: + range: integer + description: High scan range in nm. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/aim2_records.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/aim2_records.yaml new file mode 100644 index 00000000..8e20f1c9 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/aim2_records.yaml @@ -0,0 +1,170 @@ +id: https://w3id.org/ca_biositing/aim2_records +name: aim2_records +title: Aim 2 Records +description: Records for Aim 2 analysis. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - general_analysis + - experiment_equipment + - resource_information + - sample_preparation + - methods_parameters_units + - data_sources_metadata + - people + +classes: + Aim2RecordBase: + is_a: BaseEntity + abstract: true + slots: + - dataset_id + - experiment_id + - resource_id + - sample_id + - technical_replicate_total + - technical_replicate_no + - calc_method_id + - calc_analyst_id + - raw_data_id + - qc_pass + - note + + PretreatmentRecord: + is_a: Aim2RecordBase + description: Pretreatment record. + slots: + - pretreatment_method_id + - eh_method_id + - reaction_block_id + - block_position + - temperature + - replicate_no #delete bc redundancy with technical_replicate_no in aim2recordbase entity? + + FermentationRecord: + is_a: Aim2RecordBase + description: Fermentation record. + slots: + - strain_id + - pretreatment_method_id + - eh_method_id + - replicate_no #delete bc redundancy with technical_replicate_no in aim2recordbase entity? + - well_position + - temperature + - agitation_rpm + - vessel_id + - analyte_detection_equipment_id + + GasificationRecord: + is_a: Aim2RecordBase + description: Gasification record. + slots: + - feedstock_mass + - bed_temperature + - gas_flow_rate + + AutoclaveRecord: + is_a: Aim2RecordBase + description: Autoclave record. + slots: [] + + Strain: + is_a: LookupBase + description: Strain used in fermentation. + slots: + - parent_strain_id + +slots: + pretreatment_method_id: + range: integer + description: Reference to Method (pretreatment). + + eh_method_id: + range: integer + description: Reference to Method (enzymatic hydrolysis). + + reaction_block_id: + range: integer + description: ID of the reaction block. + + block_position: + range: string + description: Position in the block. + + temperature: + range: decimal + description: Temperature. + + replicate_no: + range: integer + description: Replicate number. + + strain_id: + range: integer + description: Reference to Strain. + + well_position: + range: string + description: Position in the well. + + agitation_rpm: + range: decimal + description: Agitation in RPM. + + vessel_id: + range: integer + description: Reference to Equipment (vessel). + + analyte_detection_equipment_id: + range: integer + description: Reference to Equipment (detection). + + feedstock_mass: + range: decimal + description: Mass of feedstock. + + bed_temperature: + range: decimal + description: Bed temperature. + + gas_flow_rate: + range: decimal + description: Gas flow rate. + + parent_strain_id: + range: integer + + sample_id: + range: integer + + raw_data_id: + range: integer + description: Reference to FileObjectMetadata. + + qc_pass: + range: boolean + description: Whether the record passed QC. + + technical_replicate_no: + range: integer + description: Replicate number. + + calc_method_id: + range: integer + description: Reference to Method used in calculation. + + calc_analyst_id: + range: integer + description: Reference to Analyst who performed calculation. + + technical_replicate_total: + range: integer diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/core.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/core.yaml new file mode 100644 index 00000000..870eb513 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/core.yaml @@ -0,0 +1,79 @@ +id: https://w3id.org/ca_biositing/core +name: core +title: Core Definitions +description: Base classes, lineage, and data source definitions. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + +classes: + BaseEntity: + mixin: true + description: Base entity included in all main entity tables. + slots: + - id + - created_at + - updated_at + - etl_run_id + - lineage_group_id + + LookupBase: + mixin: true + description: Base class for enum/ontology-like tables. + slots: + - id + - name + - description + - uri + +slots: + ##Slots from BaseEntity + + id: + identifier: true + range: integer + description: Unique identifier. + + created_at: + range: datetime + description: Timestamp when the record was created. + + updated_at: + range: datetime + description: Timestamp when the record was last updated. + + etl_run_id: + range: string + description: Identifier of the ETL run. + + lineage_group_id: + range: integer + description: Reference to the lineage group. + + ##Slots from LookupBase + + name: + range: string + description: Name of the entity. + + description: + range: string + description: Description of the entity. + + uri: + range: uri + description: URI for the entity. + + ##Slots for other basic fields used across the schema + + note: + range: string + description: Additional notes. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/data_sources_metadata.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/data_sources_metadata.yaml new file mode 100644 index 00000000..1eeb2f53 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/data_sources_metadata.yaml @@ -0,0 +1,169 @@ +id: https://w3id.org/ca_biositing/data_sources_metadata +name: data_sources_metadata +title: Data Sources and Metadata +description: Data sources, types, and file metadata. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - field_sampling + +classes: + DataSource: + is_a: BaseEntity + description: Source of data. + slots: + - name + - description + - data_source_type_id + - full_title + - creator + - subject + - publisher + - contributor + - date + - type + - biocirv + - format + - language + - relation + - temporal_coverage + - location_coverage_id + - rights + - license + - uri + - note + + FileObjectMetadata: + is_a: BaseEntity + description: Metadata for a file object. + slots: + - data_source_id + - bucket_path + - file_format + - file_size + - checksum_md5 + - checksum_sha256 + + DataSourceType: + is_a: BaseEntity + description: Type of data source (e.g. database, literature). + slots: + - source_type_id + + LocationResolution: + is_a: LookupBase + description: Resolution of the location (e.g. nation, state, county). + + SourceType: + is_a: LookupBase + description: Type of source (e.g. database, literature). + +slots: + #FileObjectMetadata slots + + data_source_id: + range: integer + description: Reference to DataSource. + + bucket_path: + range: string + description: Path to the file in the bucket. + + file_format: + range: string + description: Format of the file. + + file_size: + range: integer + description: Size of the file in bytes. + + checksum_md5: + range: string + description: MD5 checksum of the file. + + checksum_sha256: + range: string + description: SHA256 checksum of the file. + + #DataSourceType slots + + source_type_id: + range: integer + description: Reference to SourceType. + + #DataSource slots + + data_source_type_id: + range: integer + description: Reference to DataSourceType. + + full_title: + range: string + description: Full title of the data source. + + creator: + range: string + description: Entity primarily responsible for making the resource. + + subject: + range: string + description: The topic of the resource. + + publisher: + range: string + description: Publisher of the data source. + + contributor: + range: string + description: Entity responsible for making contributions to the resource. + + date: + range: datetime + description: + Point or period of time associated with an event in the lifecycle of the + resource. + + type: + range: string + description: The nature or genre of the resource. + + biocirv: + range: boolean + description: Internal data flag (FALSE=External, TRUE=Internal). + + format: + range: string + description: File format, physical medium, or dimensions of the resource. + + language: + range: string + description: A language of the resource. + + relation: + range: string + description: A related resource. + + temporal_coverage: + range: string + description: The temporal topic of the resource (Daterange). + + location_coverage_id: + range: integer + description: Reference to LocationResolution. + + rights: + range: string + description: Information about rights held in and over the resource. + + license: + range: string + description: License of the resource. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/experiment_equipment.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/experiment_equipment.yaml new file mode 100644 index 00000000..bc76394b --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/experiment_equipment.yaml @@ -0,0 +1,127 @@ +id: https://w3id.org/ca_biositing/experiment_equipment +name: experiment_equipment +title: Experiments and Equipment +description: Experimental data and equipment. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - places + - methods_parameters_units + - sample_preparation + - general_analysis + +classes: + Experiment: + is_a: BaseEntity + description: Experiment definition. + slots: + - analyst_id + - exper_start_date + - exper_duration + - exper_duration_unit_id + - exper_location_id + - description + + Equipment: + is_a: LookupBase + description: Equipment used in experiments. + slots: + - equipment_location_id + + ExperimentMethod: + description: Link between Experiment and Method. + slots: + - id + - experiment_id + - method_id + slot_usage: + id: + identifier: true + range: integer + + ExperimentEquipment: + description: Link between Experiment and Equipment. + slots: + - id + - experiment_id + - equipment_id + slot_usage: + id: + identifier: true + range: integer + + ExperimentAnalysis: + description: Link between Experiment and AnalysisType. + slots: + - id + - experiment_id + - analysis_type_id + slot_usage: + id: + identifier: true + range: integer + + ExperimentPreparedSample: + description: Link between Experiment and PreparedSample. + slots: + - id + - experiment_id + - prepared_sample_id + slot_usage: + id: + identifier: true + range: integer + +slots: + analyst_id: + range: integer + description: Reference to Contact (analyst). + + exper_start_date: + range: date + description: Start date of the experiment. + + exper_duration: + range: decimal + description: Duration of the experiment. + + exper_duration_unit_id: + range: integer + description: Reference to Unit. + + exper_location_id: + range: integer + description: Reference to LocationAddress. + + equipment_location_id: + range: integer + description: Reference to LocationAddress. + + experiment_id: + range: integer + description: Reference to Experiment. + + equipment_id: + range: integer + description: Reference to Equipment. + + analysis_type_id: + range: integer + description: Reference to AnalysisType. + + prepared_sample_id: + range: integer + description: Reference to PreparedSample. + + method_id: + range: integer + description: Reference to Method. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/external_data.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/external_data.yaml new file mode 100644 index 00000000..3321a2f4 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/external_data.yaml @@ -0,0 +1,441 @@ +id: https://w3id.org/ca_biositing/external_data +name: external_data +title: External Data +description: External datasets (USDA, LandIQ, etc.). +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - general_analysis + - places + - resource_information + - methods_parameters_units + - data_sources_metadata + +classes: + UsdaDomain: + is_a: LookupBase + description: USDA domain. + + UsdaStatisticCategory: + is_a: LookupBase + description: USDA statistic category. + + UsdaSurveyProgram: + is_a: LookupBase + description: USDA survey program. + + UsdaCensusRecord: + is_a: BaseEntity + description: USDA census record. + slots: + - dataset_id + - geoid + - commodity_code + - year + - source_reference + - note + + UsdaSurveyRecord: + is_a: BaseEntity + description: USDA survey record. + slots: + - dataset_id + - geoid + - commodity_code + - year + - survey_program_id + - survey_period + - reference_month + - seasonal_flag + - note + + #RESOURCE ONTOLOGY MAPPING + + UsdaCommodity: + is_a: LookupBase + description: USDA commodity. + slots: + - usda_source + - usda_code + - parent_commodity_id + + UsdaTermMap: + is_a: BaseEntity + description: Mapping of raw terms to USDA commodities. + slots: + - source_system + - source_context + - raw_term + - usda_commodity_id + - is_verified + - note + + ResourceUsdaCommodityMap: + is_a: BaseEntity + description: Mapping between resources/crops and USDA commodities. + slots: + - resource_id + - primary_crop_id + - usda_commodity_id + - match_tier + - note + + #USDA MARKET DATA + + UsdaMarketReport: + is_a: BaseEntity + description: USDA market report. + slots: + - slug_id + - slug_name + - report_series_title + - frequency + - office_name + - office_city_id + - office_state_fips + - source_id + + UsdaMarketRecord: + is_a: BaseEntity + description: USDA market record. + slots: + - report_id + - dataset_id + - report_begin_date + - report_end_date + - report_date + - commodity_id + - market_type_id + - market_type_category + - grp + - market_category_id + - class_ + - grade + - variety + - protein_pct + - application + - pkg + - sale_type + - price_unit_id + - freight + - trans_mode + + #LANDIQ DATA + + LandiqRecord: + is_a: BaseEntity + description: LandIQ record. + slots: + - dataset_id + - polygon_id + - main_crop + - secondary_crop + - tertiary_crop + - quaternary_crop + - confidence + - irrigated + - acres + - version + - note + + Polygon: + description: Geospatial polygon. + slots: + - id + - geoid + - geom + slot_usage: + id: + identifier: true + range: integer + + #BILLION TON DATA + + BillionTon2023Record: + is_a: BaseEntity + description: Billion Ton 2023 record. + slots: + - subclass_id + - resource_id + - geoid + - county_square_miles + - model_name + - scenario_name + - price_offered_usd + - production + - production_unit_id + - btu_ton + - production_energy_content + - energy_content_unit_id + - product_density_dtpersqmi + - land_source + +slots: + usda_source: + range: string + description: Source of the USDA definition (NASS, AMS). + + usda_code: + range: string + description: Official USDA code. + + parent_commodity_id: + range: integer + description: Reference to parent UsdaCommodity. + + source_system: + range: string + description: Source system (NASS, AMS). + + source_context: + range: string + description: Context of the source (Group, Slug ID). + + raw_term: + range: string + description: Raw term from the source. + + usda_commodity_id: + range: integer + description: Reference to UsdaCommodity. + + is_verified: + range: boolean + description: Whether the mapping is verified. + + match_tier: + range: string + description: Tier of the match. + + commodity_code: + range: integer + description: Reference to UsdaCommodity. + + year: + range: integer + description: Year of the record. + + source_reference: + range: string + description: Reference to the source. + + survey_program_id: + range: integer + description: Reference to UsdaSurveyProgram. + + survey_period: + range: string + description: Period of the survey. + + reference_month: + range: string + description: Reference month. + + seasonal_flag: + range: boolean + description: Whether the record is seasonal. + + slug_id: + range: integer + description: Slug ID. + + slug_name: + range: string + description: Slug name. + + report_series_title: + range: string + description: Title of the report series. + + frequency: + range: string + description: Frequency of the report. + + office_name: + range: string + description: Name of the office. + + office_city_id: + range: integer + description: Reference to LocationAddress. + + office_state_fips: + range: string + description: FIPS code of the office state. + + report_id: + range: integer + description: Reference to UsdaMarketReport. + + report_begin_date: + range: datetime + description: Begin date of the report. + + report_end_date: + range: datetime + description: End date of the report. + + report_date: + range: datetime + description: Date of the report. + + commodity_id: + range: integer + description: Reference to UsdaCommodity. + + market_type_id: + range: integer + description: ID of the market type. + + market_type_category: + range: string + description: Category of the market type. + + grp: + range: string + description: Group. + + market_category_id: + range: integer + description: ID of the market category. + + class_: + range: string + description: Class. + + grade: + range: string + description: Grade. + + variety: + range: string + description: Variety. + + protein_pct: + range: decimal + description: Protein percentage. + + application: + range: string + description: Application. + + pkg: + range: string + description: Package. + + sale_type: + range: string + description: Sale type. + + price_unit_id: + range: integer + description: Reference to Unit. + + freight: + range: string + description: Freight. + + trans_mode: + range: string + description: Transportation mode. + + polygon_id: + range: integer + description: Reference to Polygon. + + main_crop: + range: integer + description: Reference to PrimaryCrop. + + secondary_crop: + range: integer + description: Reference to PrimaryCrop. + + tertiary_crop: + range: integer + description: Reference to PrimaryCrop. + + quaternary_crop: + range: integer + description: Reference to PrimaryCrop. + + confidence: + range: integer + description: Confidence level. + + irrigated: + range: boolean + description: Whether the land is irrigated. + + acres: + range: float + description: Number of acres. + + version: + range: string + description: Version of the data source. + + subclass_id: + range: integer + description: Reference to ResourceSubclass. + + county_square_miles: + range: float + description: Square miles of the county. + + model_name: + range: string + description: Name of the model. + + scenario_name: + range: string + description: Name of the scenario. + + price_offered_usd: + range: decimal + description: Price offered in USD. + + production: + range: integer + description: Production amount. + + production_unit_id: + range: integer + description: Reference to Unit. + + btu_ton: + range: integer + description: BTU per ton. + + production_energy_content: + range: integer + description: Energy content of production. + + energy_content_unit_id: + range: integer + description: Reference to Unit. + + product_density_dtpersqmi: + range: decimal + description: Product density in dry tons per square mile. + + land_source: + range: string + description: Source of land data. + + geom: + range: string + description: Geometry (WKT or similar). + + test: + range: string + description: A test slot. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/field_sampling.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/field_sampling.yaml new file mode 100644 index 00000000..74ab00d6 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/field_sampling.yaml @@ -0,0 +1,200 @@ +id: https://w3id.org/ca_biositing/field_sampling +name: field_sampling +title: Field Sampling +description: Field sampling and preparation. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - places + - people + - resource_information + - methods_parameters_units + +classes: + FieldSample: + is_a: BaseEntity + description: Sample collected from the field. + slots: + - name + - resource_id + - provider_id + - collector_id + - sample_collection_source + - amount_collected + - amount_collected_unit_id + - sampling_location_id + - field_storage_method_id + - field_storage_duration_value + - field_storage_duration_unit_id + - field_storage_location_id + - collection_timestamp + - collection_method_id + - harvest_method_id + - harvest_date + - field_sample_storage_location_id + - note + + PhysicalCharacteristic: + is_a: BaseEntity + description: Physical characteristics of a sample. + slots: + - field_sample_id + - particle_length + - particle_width + - particle_height + - particle_unit_id + + FieldSampleCondition: + is_a: BaseEntity + description: Condition of the field sample. + slots: + - field_sample_id + - ag_treatment_id + - last_application_date + - treatment_amount_per_acre + - processing_method_id + + FieldStorageMethod: + is_a: LookupBase + description: Method of field storage. + + CollectionMethod: + is_a: LookupBase + description: Method of collection. + + HarvestMethod: + is_a: LookupBase + description: Method of harvest. + + ProcessingMethod: + is_a: LookupBase + description: Method of processing. + + SoilType: + is_a: LookupBase + description: Type of soil. + + AgTreatment: + is_a: LookupBase + description: Agricultural treatment. + + LocationSoilType: + is_a: BaseEntity + description: Soil type at a location. + slots: + - location_id + - soil_type_id + +slots: + provider_id: + range: integer + description: Reference to Provider. + + collector_id: + range: integer + description: Reference to Contact (collector). + + sample_collection_source: + range: string + description: Source of sample collection. + + amount_collected: + range: decimal + description: Amount collected. + + amount_collected_unit_id: + range: integer + description: Reference to Unit. + + sampling_location_id: + range: integer + description: Reference to LocationAddress. + + field_storage_method_id: + range: integer + description: Reference to FieldStorageMethod. + + field_storage_duration_value: + range: decimal + description: Duration of field storage. + + field_storage_duration_unit_id: + range: integer + description: Reference to Unit. + + field_storage_location_id: + range: integer + description: Reference to LocationAddress. + + collection_timestamp: + range: datetime + description: Timestamp of collection. + + collection_method_id: + range: integer + description: Reference to CollectionMethod. + + harvest_method_id: + range: integer + description: Reference to HarvestMethod. + + harvest_date: + range: date + description: Date of harvest. + + field_sample_storage_location_id: + range: integer + description: Reference to LocationAddress. + + field_sample_id: + range: integer + description: Reference to FieldSample. + + particle_length: + range: decimal + description: Length of particle. + + particle_width: + range: decimal + description: Width of particle. + + particle_height: + range: decimal + description: Height of particle. + + particle_unit_id: + range: integer + description: Reference to Unit. + + ag_treatment_id: + range: integer + description: Reference to AgTreatment. + + last_application_date: + range: date + description: Date of last application. + + treatment_amount_per_acre: + range: float + description: Amount of treatment per acre. + + processing_method_id: + range: integer + description: Reference to ProcessingMethod. + + location_id: + range: integer + description: Reference to LocationAddress. + + soil_type_id: + range: integer + description: Reference to SoilType. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/general_analysis.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/general_analysis.yaml new file mode 100644 index 00000000..6f9db701 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/general_analysis.yaml @@ -0,0 +1,97 @@ +id: https://w3id.org/ca_biositing/general_analysis +name: general_analysis +title: General Analysis +description: General analysis definitions. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - data_sources_metadata + - methods_parameters_units + +classes: + AnalysisType: + is_a: LookupBase + description: Type of analysis. + + Dataset: + is_a: BaseEntity + description: Dataset definition. + slots: + - name + - record_type + - source_id + - start_date + - end_date + - description + + DimensionType: + is_a: LookupBase + description: Type of dimension. + + Observation: + is_a: BaseEntity + description: Observation data. + slots: + - dataset_id + - record_type + - record_id + - parameter_id + - value + - unit_id + - dimension_type_id + - dimension_value + - dimension_unit_id + - note + +slots: + #Slots imported + #parameter_id: from methods.yaml + #note: from core.yaml + + record_type: + range: string + description: Type of record. + + start_date: + range: date + description: Start date of the dataset. + + end_date: + range: date + description: End date of the dataset. + + dataset_id: + range: integer + description: Reference to Dataset. + + record_id: + range: integer + description: ID of the record. + + value: + range: decimal + description: Value of the observation. + + unit_id: + range: integer + description: Reference to Unit. + + dimension_type_id: + range: integer + description: Reference to DimensionType. + + dimension_value: + range: decimal + description: Value of the dimension. + + dimension_unit_id: + range: integer diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/geography.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/geography.yaml new file mode 100644 index 00000000..0b6ec0eb --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/geography.yaml @@ -0,0 +1,109 @@ +id: https://w3id.org/ca_biositing/geography +name: geography +title: Geography Definitions +description: Geospatial entities and locations. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + +classes: + Geography: + description: Geographic region definition (e.g. county, state). + slots: + - geoid + - state_name + - state_fips + - county_name + - county_fips + - region_name + - agg_level_desc + slot_usage: + geoid: + identifier: true + + LocationAddress: + is_a: BaseEntity + description: Specific physical location. + slots: + - geography_id + - address_line1 + - address_line2 + - city + - zip + - lat + - lon + - is_anonymous + +slots: + geoid: + range: string + description: Geographic identifier. + + state_name: + range: string + description: Name of the state. + + state_fips: + range: string + description: FIPS code of the state. + + county_name: + range: string + description: Name of the county. + + county_fips: + range: string + description: FIPS code of the county. + + region_name: + range: string + description: Name of the region. + + agg_level_desc: + range: string + description: Description of the aggregation level. + + geography_id: + range: string + description: Reference to Geography geoid. + + address_line1: + range: string + description: Address line 1. + + address_line2: + range: string + description: Address line 2. + + city: + range: string + description: City name. + + zip: + range: string + description: ZIP code. + + lat: + range: float + description: Latitude. + + lon: + range: float + description: Longitude. + + is_anonymous: + range: boolean + description: Whether the location is anonymous. + + geom: + range: string # TODO: Define geometry type properly, maybe using a custom type or string for WKT + description: Geometry of the polygon. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/infrastructure.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/infrastructure.yaml new file mode 100644 index 00000000..6ce9edf9 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/infrastructure.yaml @@ -0,0 +1,1069 @@ +id: https://w3id.org/ca_biositing/infrastructure +name: infrastructure +title: Infrastructure +description: Infrastructure and facility data. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - general_analysis + - places + - resource_information + +classes: + FacilityRecord: + is_a: BaseEntity + description: Facility record. + slots: + - dataset_id + - facility_name + - location_id + - capacity_mw + - resource_id + - operator + - start_year + - note + + InfrastructureBiodieselPlants: + description: Biodiesel plants infrastructure. + slots: + - biodiesel_plant_id + - company + - bbi_index + - city + - state + - capacity_mmg_per_y + - feedstock + - status + - address + - coordinates + - latitude + - longitude + - source + slot_usage: + biodiesel_plant_id: + identifier: true + range: integer + + InfrastructureBiosolidsFacilities: + description: Biosolids facilities infrastructure. + slots: + - biosolid_facility_id + - report_submitted_date + - latitude + - longitude + - facility + - authority + - plant_type + - aqmd + - facility_address + - facility_city + - state + - facility_zip + - facility_county + - mailing_street_1 + - mailing_city + - mailing_state + - mailing_zip + - biosolids_number + - biosolids_contact + - biosolids_contact_phone + - biosolids_contact_email + - adwf + - potw_biosolids_generated + - twtds_biosolids_treated + - class_b_land_app + - class_b_applier + - class_a_compost + - class_a_heat_dried + - class_a_other + - class_a_other_applier + - twtds_transfer_to_second_preparer + - twtds_second_preparer_name + - adc_or_final_c + - landfill + - landfill_name + - surface_disposal + - deepwell_injection + - stored + - longterm_treatment + - other + - name_of_other + - incineration + slot_usage: + biosolid_facility_id: + identifier: true + range: integer + + InfrastructureCafoManureLocations: + description: CAFO manure locations infrastructure. + slots: + - cafo_manure_id + - latitude + - longitude + - owner_name + - facility_name + - address + - town + - state + - zip + - animal + - animal_feed_operation_type + - animal_units + - animal_count + - manure_total_solids + - source + - date_accessed + slot_usage: + cafo_manure_id: + identifier: true + range: integer + + InfrastructureEthanolBiorefineries: + description: Ethanol biorefineries infrastructure. + slots: + - ethanol_biorefinery_id + - name + - city + - state + - address + - type + - capacity_mgy + - production_mgy + - constr_exp + slot_usage: + ethanol_biorefinery_id: + identifier: true + range: integer + + InfrastructureLandfills: + description: Landfills infrastructure. + slots: + - project_id + - project_int_id + - ghgrp_id + - landfill_id + - landfill_name + - state + - physical_address + - city + - county + - zip_code + - latitude + - longitude + - ownership_type + - landfill_owner_orgs + - landfill_opened_year + - landfill_closure_year + - landfill_status + - waste_in_place + - waste_in_place_year + - lfg_system_in_place + - lfg_collected + - lfg_flared + - project_status + - project_name + - project_start_date + - project_shutdown_date + - project_type_category + - lfg_energy_project_type + - rng_delivery_method + - actual_mw_generation + - rated_mw_capacity + - lfg_flow_to_project + - direct_emission_reductions + - avoided_emission_reductions + slot_usage: + project_id: + identifier: true + range: string + + InfrastructureLivestockAnaerobicDigesters: + description: Livestock anaerobic digesters infrastructure. + slots: + - digester_id + - project_name + - project_type + - city + - state + - digester_type + - profile + - year_operational + - animal_type_class + - animal_types + - pop_feeding_digester + - total_pop_feeding_digester + - cattle + - dairy + - poultry + - swine + - codigestion + - biogas_generation_estimate + - electricity_generated + - biogas_end_uses + - methane_emission_reductions + - latitude + - longitude + slot_usage: + digester_id: + identifier: true + range: integer + + InfrastructureSafAndRenewableDieselPlants: + description: SAF and renewable diesel plants infrastructure. + slots: + - ibcc_index + - company + - city + - state + - country + - capacity + - feedstock + - products + - status + - address + - coordinates + - latitude + - longitude + slot_usage: + ibcc_index: + identifier: true + range: integer + + InfrastructureWastewaterTreatmentPlants: + description: Wastewater treatment plants infrastructure. + slots: + - plant_id + - name + - state + - codigestion + - flow_design_adjusted + - flow_average + - biosolids + - excess_flow + - biogas_utilized + - flaring + - excess_mass_loading_rate + - excess_mass_loading_rate_wet + - methane_production + - energy_content + - electric_kw + - thermal_mmbtu_d + - electric_kwh + - thermal_annual_mmbtu_y + - anaerobic_digestion_facility + - county + - dayload_bdt + - dayload + - equivalent_generation + - facility_type + - feedstock + - type + - city + - latitude + - longitude + - zipcode + slot_usage: + plant_id: + identifier: true + range: integer + + InfrastructureCombustionPlants: + description: Combustion plants infrastructure. + slots: + - combustion_fid + - objectid + - status + - city + - name + - county + - equivalent_generation + - np_mw + - cf + - yearload + - fuel + - notes + - type + - wkt_geom + - geom + - latitude + - longitude + slot_usage: + combustion_fid: + identifier: true + range: integer + + InfrastructureDistrictEnergySystems: + description: District energy systems infrastructure. + slots: + - des_fid + - cbg_id + - name + - system + - object_id + - city + - state + - primary_fuel + - secondary_fuel + - usetype + - cap_st + - cap_hw + - cap_cw + - chpcg_cap + - excess_c + - excess_h + - type + - wkt_geom + - geom + - latitude + - longitude + slot_usage: + des_fid: + identifier: true + range: integer + + InfrastructureFoodProcessingFacilities: + description: Food processing facilities infrastructure. + slots: + - processing_facility_id + - address + - county + - city + - company + - join_count + - master_type + - state + - subtype + - target_fid + - processing_type + - zip + - type + - wkt_geom + - geom + - latitude + - longitude + slot_usage: + processing_facility_id: + identifier: true + range: integer + + InfrastructureMswToEnergyAnaerobicDigesters: + description: MSW to energy anaerobic digesters infrastructure. + slots: + - wte_id + - city + - county + - equivalent_generation + - feedstock + - dayload + - dayload_bdt + - facility_type + - status + - notes + - source + - type + - wkt_geom + - geom + - latitude + - longitude + slot_usage: + wte_id: + identifier: true + range: integer + +slots: + facility_name: + range: string + description: Name of the facility. + + capacity_mw: + range: decimal + description: Capacity in MW. + + operator: + range: string + description: Operator of the facility. + + start_year: + range: integer + description: Start year of the facility. + + biodiesel_plant_id: + range: integer + description: ID of the biodiesel plant. + + company: + range: string + description: Company name. + + bbi_index: + range: integer + description: BBI index. + + city: + range: string + description: City. + + state: + range: string + description: State. + + capacity_mmg_per_y: + range: integer + description: Capacity in MMG per year. + + feedstock: + range: string + description: Feedstock. + + status: + range: string + description: Status. + + address: + range: string + description: Address. + + coordinates: + range: string + description: Coordinates. + + latitude: + range: decimal + description: Latitude. + + longitude: + range: decimal + description: Longitude. + + source: + range: string + description: Source. + + biosolid_facility_id: + range: integer + description: ID of the biosolids facility. + + report_submitted_date: + range: date + description: Date report submitted. + + facility: + range: string + description: Facility name. + + authority: + range: string + description: Authority. + + plant_type: + range: string + description: Plant type. + + aqmd: + range: string + description: AQMD. + + facility_address: + range: string + description: Facility address. + + facility_city: + range: string + description: Facility city. + + facility_zip: + range: string + description: Facility zip. + + facility_county: + range: string + description: Facility county. + + mailing_street_1: + range: string + description: Mailing street 1. + + mailing_city: + range: string + description: Mailing city. + + mailing_state: + range: string + description: Mailing state. + + mailing_zip: + range: string + description: Mailing zip. + + biosolids_number: + range: string + description: Biosolids number. + + biosolids_contact: + range: string + description: Biosolids contact. + + biosolids_contact_phone: + range: string + description: Biosolids contact phone. + + biosolids_contact_email: + range: string + description: Biosolids contact email. + + adwf: + range: decimal + description: ADWF. + + potw_biosolids_generated: + range: integer + description: POTW biosolids generated. + + twtds_biosolids_treated: + range: integer + description: TWTDS biosolids treated. + + class_b_land_app: + range: integer + description: Class B land application. + + class_b_applier: + range: string + description: Class B applier. + + class_a_compost: + range: integer + description: Class A compost. + + class_a_heat_dried: + range: integer + description: Class A heat dried. + + class_a_other: + range: integer + description: Class A other. + + class_a_other_applier: + range: string + description: Class A other applier. + + twtds_transfer_to_second_preparer: + range: integer + description: TWTDS transfer to second preparer. + + twtds_second_preparer_name: + range: string + description: TWTDS second preparer name. + + adc_or_final_c: + range: integer + description: ADC or final cover. + + landfill: + range: integer + description: Landfill. + + landfill_name: + range: string + description: Landfill name. + + surface_disposal: + range: integer + description: Surface disposal. + + deepwell_injection: + range: string + description: Deepwell injection. + + stored: + range: integer + description: Stored. + + longterm_treatment: + range: integer + description: Longterm treatment. + + other: + range: integer + description: Other. + + name_of_other: + range: string + description: Name of other. + + incineration: + range: integer + description: Incineration. + + cafo_manure_id: + range: integer + description: ID of the CAFO manure location. + + owner_name: + range: string + description: Owner name. + + town: + range: string + description: Town. + + zip: + range: string + description: Zip code. + + animal: + range: string + description: Animal. + + animal_feed_operation_type: + range: string + description: Animal feed operation type. + + animal_units: + range: integer + description: Animal units. + + animal_count: + range: integer + description: Animal count. + + manure_total_solids: + range: decimal + description: Manure total solids. + + date_accessed: + range: date + description: Date accessed. + + ethanol_biorefinery_id: + range: integer + description: ID of the ethanol biorefinery. + + type: + range: string + description: Type. + + capacity_mgy: + range: integer + description: Capacity in MGY. + + production_mgy: + range: integer + description: Production in MGY. + + constr_exp: + range: integer + description: Construction/expansion. + + project_id: + range: string + description: Project ID. + + project_int_id: + range: integer + description: Project integer ID. + + ghgrp_id: + range: string + description: GHGRP ID. + + landfill_id: + range: integer + description: Landfill ID. + + physical_address: + range: string + description: Physical address. + + county: + range: string + description: County. + + zip_code: + range: string + description: Zip code. + + ownership_type: + range: string + description: Ownership type. + + landfill_owner_orgs: + range: string + description: Landfill owner organizations. + + landfill_opened_year: + range: date + description: Landfill opened year. + + landfill_closure_year: + range: date + description: Landfill closure year. + + landfill_status: + range: string + description: Landfill status. + + waste_in_place: + range: integer + description: Waste in place. + + waste_in_place_year: + range: date + description: Waste in place year. + + lfg_system_in_place: + range: boolean + description: LFG system in place. + + lfg_collected: + range: decimal + description: LFG collected. + + lfg_flared: + range: decimal + description: LFG flared. + + project_status: + range: string + description: Project status. + + project_name: + range: string + description: Project name. + + project_start_date: + range: date + description: Project start date. + + project_shutdown_date: + range: date + description: Project shutdown date. + + project_type_category: + range: string + description: Project type category. + + lfg_energy_project_type: + range: string + description: LFG energy project type. + + rng_delivery_method: + range: string + description: RNG delivery method. + + actual_mw_generation: + range: decimal + description: Actual MW generation. + + rated_mw_capacity: + range: decimal + description: Rated MW capacity. + + lfg_flow_to_project: + range: decimal + description: LFG flow to project. + + direct_emission_reductions: + range: decimal + description: Direct emission reductions. + + avoided_emission_reductions: + range: decimal + description: Avoided emission reductions. + + digester_id: + range: integer + description: ID of the digester. + + project_type: + range: string + description: Project type. + + digester_type: + range: string + description: Digester type. + + profile: + range: string + description: Profile. + + year_operational: + range: date + description: Year operational. + + animal_type_class: + range: string + description: Animal type class. + + animal_types: + range: string + description: Animal types. + + pop_feeding_digester: + range: string + description: Population feeding digester. + + total_pop_feeding_digester: + range: integer + description: Total population feeding digester. + + cattle: + range: integer + description: Cattle. + + dairy: + range: integer + description: Dairy. + + poultry: + range: integer + description: Poultry. + + swine: + range: integer + description: Swine. + + codigestion: + range: string + description: Codigestion. + + biogas_generation_estimate: + range: integer + description: Biogas generation estimate. + + electricity_generated: + range: integer + description: Electricity generated. + + biogas_end_uses: + range: string + description: Biogas end uses. + + methane_emission_reductions: + range: integer + description: Methane emission reductions. + + ibcc_index: + range: integer + description: IBCC index. + + country: + range: string + description: Country. + + capacity: + range: string + description: Capacity. + + products: + range: string + description: Products. + + plant_id: + range: integer + description: ID of the plant. + + flow_design_adjusted: + range: decimal + description: Flow design adjusted. + + flow_average: + range: decimal + description: Flow average. + + biosolids: + range: decimal + description: Biosolids. + + excess_flow: + range: decimal + description: Excess flow. + + biogas_utilized: + range: boolean + description: Biogas utilized. + + flaring: + range: boolean + description: Flaring. + + excess_mass_loading_rate: + range: decimal + description: Excess mass loading rate. + + excess_mass_loading_rate_wet: + range: decimal + description: Excess mass loading rate wet. + + methane_production: + range: decimal + description: Methane production. + + energy_content: + range: decimal + description: Energy content. + + electric_kw: + range: decimal + description: Electric KW. + + thermal_mmbtu_d: + range: decimal + description: Thermal MMBTU/d. + + electric_kwh: + range: decimal + description: Electric KWh. + + thermal_annual_mmbtu_y: + range: decimal + description: Thermal annual MMBTU/y. + + anaerobic_digestion_facility: + range: string + description: Anaerobic digestion facility. + + dayload_bdt: + range: decimal + description: Dayload BDT. + + dayload: + range: decimal + description: Dayload. + + equivalent_generation: + range: decimal + description: Equivalent generation. + + facility_type: + range: string + description: Facility type. + + zipcode: + range: string + description: Zipcode. + + combustion_fid: + range: integer + description: Combustion FID. + + objectid: + range: integer + description: Object ID. + + np_mw: + range: decimal + description: NP MW. + + cf: + range: decimal + description: CF. + + yearload: + range: integer + description: Yearload. + + fuel: + range: string + description: Fuel. + + notes: + range: string + description: Notes. + + wkt_geom: + range: string + description: WKT geometry. + + geom: + range: string + description: Geometry. + + des_fid: + range: integer + description: DES FID. + + cbg_id: + range: integer + description: CBG ID. + + system: + range: string + description: System. + + object_id: + range: integer + description: Object ID. + + primary_fuel: + range: string + description: Primary fuel. + + secondary_fuel: + range: string + description: Secondary fuel. + + usetype: + range: string + description: Use type. + + cap_st: + range: decimal + description: Cap ST. + + cap_hw: + range: decimal + description: Cap HW. + + cap_cw: + range: decimal + description: Cap CW. + + chpcg_cap: + range: decimal + description: CHPCG Cap. + + excess_c: + range: decimal + description: Excess C. + + excess_h: + range: decimal + description: Excess H. + + processing_facility_id: + range: integer + description: Processing facility ID. + + join_count: + range: integer + description: Join count. + + master_type: + range: string + description: Master type. + + subtype: + range: string + description: Subtype. + + target_fid: + range: integer + description: Target FID. + + processing_type: + range: string + description: Processing type. + + wte_id: + range: integer + description: WTE ID. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/lineage.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/lineage.yaml new file mode 100644 index 00000000..ed0d6c99 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/lineage.yaml @@ -0,0 +1,88 @@ +id: https://w3id.org/ca_biositing/lineage +name: lineage +title: Lineage Definitions +description: Data lineage and ETL tracking. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + +classes: + LineageGroup: + description: Grouping for lineage information. + slots: + - id + - etl_run_id + - note + slot_usage: + id: + identifier: true + range: integer + + EntityLineage: + description: Lineage information for a specific entity. + slots: + - id + - lineage_group_id + - source_table + - source_row_id + - note + slot_usage: + id: + identifier: true + range: integer + + EtlRun: + description: Information about an ETL run. + slots: + - id + - started_at + - completed_at + - pipeline_name + - status + - records_ingested + - note + slot_usage: + id: + identifier: true + +slots: + #Slots for EntityLineage class + + source_table: + range: string + description: Source table name. + + source_row_id: + range: string + description: Source row identifier. + + #Slots for EtlRun class + + started_at: + range: datetime + description: Start time of the ETL run. + + completed_at: + range: datetime + description: Completion time of the ETL run. + + pipeline_name: + range: string + description: Name of the pipeline. + + status: + range: string + description: Status of the ETL run. + + records_ingested: + range: integer + description: Number of records ingested. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/methods_parameters_units.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/methods_parameters_units.yaml new file mode 100644 index 00000000..579609c2 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/methods_parameters_units.yaml @@ -0,0 +1,130 @@ +id: https://w3id.org/ca_biositing/methods_parameters_units +name: methods_parameters_units +title: Methods, Parameters, and Units +description: Analytical methods, parameters, and units of measurement. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - data_sources_metadata + +classes: + Unit: + is_a: LookupBase + description: Unit of measurement. + + Method: + is_a: BaseEntity + description: Analytical method. + slots: + - name + - method_abbrev_id + - method_category_id + - method_standard_id + - description + - detection_limits + - source_id + + MethodAbbrev: + is_a: LookupBase + description: Abbreviation for method. + + MethodCategory: + is_a: LookupBase + description: Category of method. + + MethodStandard: + is_a: LookupBase + description: Standard associated with the method. + + Parameter: + is_a: BaseEntity + description: Parameter being measured. + slots: + - name + - standard_unit_id + - calculated + - description + + ParameterCategory: + is_a: LookupBase + description: Category of parameter. + + ParameterCategoryParameter: + description: Link between Parameter and ParameterCategory. + slots: + - id + - parameter_id + - parameter_category_id + slot_usage: + id: + identifier: true + range: integer + + ParameterUnit: + description: Link between Parameter and Unit (alternate units). + slots: + - id + - parameter_id + - alternate_unit_id + slot_usage: + id: + identifier: true + range: integer + +slots: + #Method slots + + method_abbrev_id: + range: integer + description: Reference to MethodAbbrev. + + method_category_id: + range: integer + description: Reference to MethodCategory. + + method_standard_id: + range: integer + description: Reference to MethodStandard. + + detection_limits: + range: string + description: Detection limits of the method. + + source_id: + range: integer + description: Reference to DataSource. + + #Parameter slots + + standard_unit_id: + range: integer + description: Reference to Unit. + + calculated: + range: boolean + description: Whether the parameter is calculated. + + #ParameterCategoryParameter slots + + parameter_id: + range: integer + description: Reference to Parameter. + + parameter_category_id: + range: integer + description: Reference to ParameterCategory. + + #ParameterUnit slots + + alternate_unit_id: + range: integer + description: Reference to Unit. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/people.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/people.yaml new file mode 100644 index 00000000..5f5c59f5 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/people.yaml @@ -0,0 +1,61 @@ +id: https://w3id.org/ca_biositing/people +name: people +title: People Definitions +description: Contact and provider information. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + +classes: + Contact: + is_a: BaseEntity + description: Contact information for a person. + slots: + - first_name + - last_name + - email + - affiliation + slot_usage: + id: + identifier: true + range: integer + + Provider: + is_a: BaseEntity + description: Provider information. + slots: + - codename + slot_usage: + id: + identifier: true + range: integer + +slots: + first_name: + range: string + description: First name. + + last_name: + range: string + description: Last name. + + email: + range: string + description: Email address. + + affiliation: + range: string + description: Affiliation. + + codename: + range: string + description: Codename for the provider. diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/places.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/places.yaml new file mode 100644 index 00000000..5a6342d3 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/places.yaml @@ -0,0 +1,105 @@ +id: https://w3id.org/ca_biositing/places +name: places +title: Places Definitions +description: Geographic locations and addresses. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + +classes: + Geography: + description: Geographic location. + slots: + - geoid + - state_name + - state_fips + - county_name + - county_fips + - region_name + - agg_level_desc + slot_usage: + geoid: + identifier: true + + LocationAddress: + is_a: BaseEntity + description: Physical address. + slots: + - geography_id + - address_line1 + - address_line2 + - city + - zip + - lat + - lon + - is_anonymous + +slots: + geoid: + range: string + description: Unique identifier for geography. + + state_name: + range: string + description: State name. + + state_fips: + range: string + description: State FIPS code. + + county_name: + range: string + description: County name. + + county_fips: + range: string + description: County FIPS code. + + region_name: + range: string + description: Region name. + + agg_level_desc: + range: string + description: Aggregation level description. + + geography_id: + range: string + description: Reference to Geography. + + address_line1: + range: string + description: Address line 1. + + address_line2: + range: string + description: Address line 2. + + city: + range: string + description: City. + + zip: + range: string + description: ZIP code. + + lat: + range: float + description: Latitude. + + lon: + range: float + description: Longitude. + + is_anonymous: + range: boolean + description: Whether the location is anonymous. 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 new file mode 100644 index 00000000..eb2ca5ed --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/resource_information.yaml @@ -0,0 +1,184 @@ +id: https://w3id.org/ca_biositing/resource_information +name: resource_information +title: Resource Information +description: Biomass resources and their classifications. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - places + +classes: + Resource: + is_a: BaseEntity + description: Biomass resource definition. + slots: + - name + - primary_crop_id + - resource_class_id + - resource_subclass_id + - note + + ResourceClass: + is_a: LookupBase + description: Classification of resources. + + ResourceSubclass: + is_a: LookupBase + description: Sub-classification of resources. + + PrimaryCrop: + is_a: LookupBase + description: Primary crop definition. + slots: + - note + + ResourceAvailability: + is_a: BaseEntity + description: Availability of a resource in a location. + slots: + - resource_id + - geoid + - from_month + - to_month + - year_round + - note + + ResourceCounterfactual: + is_a: BaseEntity + description: Counterfactual uses of a resource. + slots: + - geoid + - resource_id + - counterfactual_description + - animal_bedding_percent + - animal_bedding_source_id + - animal_feed_percent + - animal_feed_source_id + - bioelectricty_percent + - bioelectricty_source_id + - burn_percent + - burn_source_id + - compost_percent + - compost_source_id + - landfill_percent + - landfill_source_id + - counterfactual_date + - note + + ResourceMorphology: + description: Morphology of a resource. + slots: + - id + - resource_id + - morphology_uri + slot_usage: + id: + identifier: true + range: integer + +slots: + #Resource slots + + primary_crop_id: + range: integer + description: Reference to PrimaryCrop. + + resource_class_id: + range: integer + description: Reference to ResourceClass. + + resource_subclass_id: + range: integer + description: Reference to ResourceSubclass. + + #ResourceAvailability slots + + resource_id: + range: integer + description: Reference to Resource. + + geoid: + range: string + description: Reference to Geography. + + from_month: + range: integer + description: Start month of availability. + + to_month: + range: integer + description: End month of availability. + + year_round: + range: boolean + description: Whether available year-round. + + #ResourceCounterfactual slots + + counterfactual_description: + range: string + description: Description of counterfactual scenario. + + animal_bedding_percent: + range: decimal + description: Percentage used for animal bedding. + + animal_bedding_source_id: + range: integer + description: Source for animal bedding data. + + animal_feed_percent: + range: decimal + description: Percentage used for animal feed. + + animal_feed_source_id: + range: integer + description: Source for animal feed data. + + bioelectricty_percent: + range: decimal + description: Percentage used for bioelectricity. + + bioelectricty_source_id: + range: integer + description: Source for bioelectricity data. + + burn_percent: + range: decimal + description: Percentage burned. + + burn_source_id: + range: integer + description: Source for burn data. + + compost_percent: + range: decimal + description: Percentage composted. + + compost_source_id: + range: integer + description: Source for compost data. + + landfill_percent: + range: decimal + description: Percentage landfilled. + + landfill_source_id: + range: integer + description: Source for landfill data. + + counterfactual_date: + range: date + description: Date of counterfactual data. + + morphology_uri: + range: string diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/sample_preparation.yaml b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/sample_preparation.yaml new file mode 100644 index 00000000..758bb6c8 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/linkml/modules/sample_preparation.yaml @@ -0,0 +1,70 @@ +id: https://w3id.org/ca_biositing/sample_preparation +name: sample_preparation +title: Sample Preparation +description: Sample preparation methods and records. +license: https://creativecommons.org/publicdomain/zero/1.0/ + +prefixes: + linkml: https://w3id.org/linkml/ + ca_biositing: https://w3id.org/ca_biositing/ + +default_prefix: ca_biositing +default_range: string + +imports: + - linkml:types + - core + - field_sampling + - people + +classes: + PreparationMethod: + is_a: BaseEntity + description: Method of sample preparation. + slots: + - name + - description + - prep_method_abbrev_id + - prep_temp_c + - uri + - drying_step + + PreparationMethodAbbreviation: + is_a: LookupBase + description: Abbreviation for preparation method. + + PreparedSample: + is_a: BaseEntity + description: Sample that has been prepared. + slots: + - name + - field_sample_id + - prep_method_id + - prep_date + - preparer_id + - note + +slots: + prep_method_abbrev_id: + range: integer + description: Reference to PreparationMethodAbbreviation. + + prep_temp_c: + range: decimal + description: Preparation temperature in Celsius. + + drying_step: + range: boolean + description: Whether drying step was involved. + + prep_method_id: + range: integer + description: Reference to PreparationMethod. + + prep_date: + range: date + description: Date of preparation. + + preparer_id: + range: integer + description: Reference to Contact (preparer). diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/metadata_samples.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/metadata_samples.py deleted file mode 100644 index 7ab750e7..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/metadata_samples.py +++ /dev/null @@ -1,79 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - - -class Metadata(SQLModel, table=True): - """Additional metadata linked to a field sample.""" - __tablename__ = "metadata" - - metadata_id: Optional[int] = Field(default=None, primary_key=True) - sample_id: Optional[int] = Field(default=None, - description="Reference to field_samples.sample_id") - # foreign_key="field_samples.sample_id") - ag_treatment_id: Optional[int] = Field(default=None, - description="Reference to ag_treatments.ag_treatment_id") - # foreign_key="ag_treatments.ag_treatment_id") - last_application_date: Optional[date] = Field(default=None, - description="if applicable") - treatment_amount_per_acre: Optional[Decimal] = Field(default=None, - description="if applicable") - soil_type: Optional[int] = Field(default=None, - description="Reference to soil_type.soil_type_id") - # foreign_key="soil_type.soil_type_id") - - -class ParticleSize(SQLModel, table=True): - """Particle‑size measurements for a sample.""" - __tablename__ = "particle_size" - - particle_size_id: Optional[int] = Field(default=None, primary_key=True) - sample_id: Optional[int] = Field(default=None, - description="Reference to field_samples.sample_id") - # foreign_key="field_samples.sample_id") - particle_length: Optional[int] = Field(default=None) - particle_width: Optional[int] = Field(default=None) - particle_height: Optional[int] = Field(default=None) - particle_units: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - - -class SoilType(SQLModel, table=True): - """Soil classification.""" - __tablename__ = "soil_type" - - soil_type_id: Optional[int] = Field(default=None, primary_key=True) - soil_type: Optional[str] = Field(default=None, unique=True) - soil_location: Optional[int] = Field(default=None, - description="Reference to geographic_locations.location_id") - # foreign_key="geographic_locations.location_id") - - -class AgTreatment(SQLModel, table=True): - """Agricultural treatment (e.g., pesticide, herbicide).""" - __tablename__ = "ag_treatments" - - ag_treatment_id: Optional[int] = Field(default=None, primary_key=True) - ag_treatment_name: Optional[str] = Field(default=None, - description="pesticide, herbicade") - - -class Taxonomy(SQLModel, table=True): - """Taxonomic hierarchy for a biomass.""" - __tablename__ = "taxonomy" - - taxonomy_id: Optional[int] = Field(default=None, primary_key=True) - kingdom: Optional[str] = Field(default=None) - phylum: Optional[str] = Field(default=None) - class_: Optional[str] = Field(default=None, alias="class") - order: Optional[str] = Field(default=None) - family: Optional[str] = Field(default=None) - genus: Optional[str] = Field(default=None) - species: Optional[str] = Field(default=None) - variety_subspecies_cultivar: Optional[str] = Field(default=None) diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/organizations.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/organizations.py deleted file mode 100644 index 2db06cbb..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/organizations.py +++ /dev/null @@ -1,46 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - - -# ---------------------------------------------------------------------- -# Organizational tables -# ---------------------------------------------------------------------- - - -class Affiliation(SQLModel, table=True): - """Affiliation (e.g., university, company).""" - __tablename__ = "affiliations" - - affiliation_id: Optional[int] = Field(default=None, primary_key=True) - affiliation_name: str = Field(..., unique=True, description="Not null") - - -class Building(SQLModel, table=True): - """Building that can house rooms / equipment.""" - __tablename__ = "buildings" - - building_id: Optional[int] = Field(default=None, primary_key=True) - building_name: Optional[str] = Field(default=None, unique=True) - location_id: Optional[int] = Field(default=None, - description="Reference to geographic_locations.location_id") - # foreign_key="geographic_locations.location_id") - affiliation_id: Optional[int] = Field(default=None, - description="Reference to affiliations.affiliation_id") - # foreign_key="affiliations.affiliation_id") - - -class Room(SQLModel, table=True): - """Room inside a building.""" - __tablename__ = "rooms" - - room_id: Optional[int] = Field(default=None, primary_key=True) - room_number: Optional[str] = Field(default=None, unique=True) - building_id: Optional[int] = Field(default=None, - description="Reference to buildings.building_id") - # foreign_key="buildings.building_id") diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/people_contacts.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/people_contacts.py deleted file mode 100644 index 9775edf0..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/people_contacts.py +++ /dev/null @@ -1,59 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - -# ---------------------------------------------------------------------- -# People / contacts -# ---------------------------------------------------------------------- - - -class AnalystContact(SQLModel, table=True): - """Analyst or data‑entry contact.""" - __tablename__ = "analyst_contact" - - analyst_id: Optional[int] = Field(default=None, primary_key=True) - analyst_first_name: Optional[str] = Field(default=None) - analyst_last_name: Optional[str] = Field(default=None) - analyst_email: Optional[str] = Field(default=None) - analyst_affiliation: Optional[int] = Field(default=None, - description="Reference to affiliations.affiliation_id") - # foreign_key="affiliations.affiliation_id") - - -class Provider(SQLModel, table=True): - """Provider of samples / data.""" - __tablename__ = "providers" - - provider_id: Optional[int] = Field(default=None, primary_key=True) - provider_name: str = Field(..., unique=True, description="Not null") - provider_affiliation: Optional[int] = Field(default=None, - description="Reference to affiliations.affiliation_id") - # foreign_key="affiliations.affiliation_id") - provider_type_id: Optional[int] = Field(default=None, - description="Reference to provider_types.provider_type_id") - # foreign_key="provider_types.provider_type_id") - anonymous: Optional[bool] = Field(default=None) - - -class ProviderType(SQLModel, table=True): - """Category of provider (facility, farm, processor, etc.).""" - __tablename__ = "provider_types" - - provider_type_id: Optional[int] = Field(default=None, primary_key=True) - provider_type: Optional[str] = Field(default=None) - - -class Collector(SQLModel, table=True): - """Collector of field samples.""" - __tablename__ = "collectors" - - collector_id: Optional[int] = Field(default=None, primary_key=True) - collector_name: str = Field(..., unique=True, description="Not null") - collector_affiliation: Optional[int] = Field(default=None, - description="Reference to affiliations.affiliation_id") - # foreign_key="affiliations.affiliation_id") diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/sample_preprocessing.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/sample_preprocessing.py deleted file mode 100644 index 769001f6..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/sample_preprocessing.py +++ /dev/null @@ -1,68 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - -# ---------------------------------------------------------------------- -# Sample preprocessing / processing -# ---------------------------------------------------------------------- - - -class PreprocessingMethod(SQLModel, table=True): - """Method used to pre‑process a sample.""" - __tablename__ = "preprocessing_methods" - - prepro_method_id: Optional[int] = Field(default=None, primary_key=True) - prepro_method: Optional[str] = Field(default=None, - description="As Is, Knife Mill (2mm), Oven Dry") - prepro_method_abbrev_id: Optional[int] = Field(default=None, - description="Reference to preprocessing_methods_abbreviations.prepro_methods_abbrev_id",) - # foreign_key="preprocessing_methods_abbreviations.prepro_methods_abbrev_id") - prepro_temp_c: Optional[Decimal] = Field(default=None) - drying_step: Optional[bool] = Field(default=None) - method_ref_id: Optional[int] = Field(default=None, - description="Reference to references.reference_id",) - # foreign_key="references.reference_id") - - -class PreprocessingMethodAbbreviation(SQLModel, table=True): - """Abbreviation for a preprocessing method.""" - __tablename__ = "preprocessing_methods_abbreviations" - - prepro_methods_abbrev_id: Optional[int] = Field(default=None, primary_key=True) - prepro_method_abbrev: Optional[str] = Field(default=None, unique=True) - - -class PreprocessedSample(SQLModel, table=True): - """Result of a preprocessing step.""" - __tablename__ = "preprocessed_samples" - - prepro_material_id: Optional[int] = Field(default=None, primary_key=True) - prepro_material_name: Optional[str] = Field(default=None) - biomass_sample_id: Optional[int] = Field(default=None, - description="Reference to field_samples.sample_id",) - # foreign_key="field_samples.sample_id") - prepro_method_id: Optional[int] = Field(default=None, - description="Reference to preprocessing_methods.prepro_method_id",) - # foreign_key="preprocessing_methods.prepro_method_id") - amount_before_drying_g: Optional[Decimal] = Field(default=None) - amount_after_drying: Optional[Decimal] = Field(default=None) - processing_date: Optional[date] = Field(default=None) - storage_building: Optional[int] = Field(default=None, - description="Reference to buildings.building_id",) - # foreign_key="buildings.building_id") - amount_remaining_g: Optional[Decimal] = Field(default=None) - amount_as_of_date: Optional[date] = Field(default=None) - prepro_analyst_id: Optional[int] = Field(default=None, - description="Reference to analyst_contact.analyst_id",) - # foreign_key="analyst_contact.analyst_id") - prepro_note: Optional[str] = Field(default=None) - - __table_args__ = ( - Index("idx_preprocessed_samples_biomass_sample_id", "biomass_sample_id"), - Index("idx_preprocessed_samples_prepro_method_id", "prepro_method_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 new file mode 100644 index 00000000..ef08780e --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim1_records.py @@ -0,0 +1,1746 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class ExperimentMethod(Base): + """ + Link between Experiment and Method. + """ + __tablename__ = 'experiment_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + method_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentMethod(id={self.id},experiment_id={self.experiment_id},method_id={self.method_id},)" + + + + + + +class ExperimentEquipment(Base): + """ + Link between Experiment and Equipment. + """ + __tablename__ = 'experiment_equipment' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + equipment_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentEquipment(id={self.id},experiment_id={self.experiment_id},equipment_id={self.equipment_id},)" + + + + + + +class ExperimentAnalysis(Base): + """ + Link between Experiment and AnalysisType. + """ + __tablename__ = 'experiment_analysis' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + analysis_type_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentAnalysis(id={self.id},experiment_id={self.experiment_id},analysis_type_id={self.analysis_type_id},)" + + + + + + +class ExperimentPreparedSample(Base): + """ + Link between Experiment and PreparedSample. + """ + __tablename__ = 'experiment_prepared_sample' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + prepared_sample_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentPreparedSample(id={self.id},experiment_id={self.experiment_id},prepared_sample_id={self.prepared_sample_id},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class Aim1RecordBase(BaseEntity): + """ + + """ + __tablename__ = 'aim1_record_base' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"Aim1RecordBase(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 AnalysisType(LookupBase): + """ + Type of analysis. + """ + __tablename__ = 'analysis_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AnalysisType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Dataset(BaseEntity): + """ + Dataset definition. + """ + __tablename__ = 'dataset' + + name = Column(Text()) + record_type = Column(Text()) + source_id = Column(Integer()) + start_date = Column(Date()) + end_date = Column(Date()) + description = 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"Dataset(name={self.name},record_type={self.record_type},source_id={self.source_id},start_date={self.start_date},end_date={self.end_date},description={self.description},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 DimensionType(LookupBase): + """ + Type of dimension. + """ + __tablename__ = 'dimension_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"DimensionType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Observation(BaseEntity): + """ + Observation data. + """ + __tablename__ = 'observation' + + dataset_id = Column(Integer()) + record_type = Column(Text()) + record_id = Column(Integer()) + parameter_id = Column(Integer()) + value = Column(Numeric()) + unit_id = Column(Integer()) + dimension_type_id = Column(Integer()) + dimension_value = Column(Numeric()) + dimension_unit_id = 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"Observation(dataset_id={self.dataset_id},record_type={self.record_type},record_id={self.record_id},parameter_id={self.parameter_id},value={self.value},unit_id={self.unit_id},dimension_type_id={self.dimension_type_id},dimension_value={self.dimension_value},dimension_unit_id={self.dimension_unit_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PreparationMethod(BaseEntity): + """ + Method of sample preparation. + """ + __tablename__ = 'preparation_method' + + name = Column(Text()) + description = Column(Text()) + prep_method_abbrev_id = Column(Integer()) + prep_temp_c = Column(Numeric()) + uri = Column(Text()) + drying_step = Column(Boolean()) + 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"PreparationMethod(name={self.name},description={self.description},prep_method_abbrev_id={self.prep_method_abbrev_id},prep_temp_c={self.prep_temp_c},uri={self.uri},drying_step={self.drying_step},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 PreparationMethodAbbreviation(LookupBase): + """ + Abbreviation for preparation method. + """ + __tablename__ = 'preparation_method_abbreviation' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PreparationMethodAbbreviation(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PreparedSample(BaseEntity): + """ + Sample that has been prepared. + """ + __tablename__ = 'prepared_sample' + + name = Column(Text()) + field_sample_id = Column(Integer()) + prep_method_id = Column(Integer()) + prep_date = Column(Date()) + preparer_id = 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"PreparedSample(name={self.name},field_sample_id={self.field_sample_id},prep_method_id={self.prep_method_id},prep_date={self.prep_date},preparer_id={self.preparer_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Experiment(BaseEntity): + """ + Experiment definition. + """ + __tablename__ = 'experiment' + + analyst_id = Column(Integer()) + exper_start_date = Column(Date()) + exper_duration = Column(Numeric()) + exper_duration_unit_id = Column(Integer()) + exper_location_id = Column(Integer()) + description = 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"Experiment(analyst_id={self.analyst_id},exper_start_date={self.exper_start_date},exper_duration={self.exper_duration},exper_duration_unit_id={self.exper_duration_unit_id},exper_location_id={self.exper_location_id},description={self.description},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 Equipment(LookupBase): + """ + Equipment used in experiments. + """ + __tablename__ = 'equipment' + + equipment_location_id = Column(Integer()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Equipment(equipment_location_id={self.equipment_location_id},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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. + """ + __tablename__ = 'proximate_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"ProximateRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 UltimateRecord(Aim1RecordBase): + """ + Ultimate analysis record. + """ + __tablename__ = 'ultimate_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"UltimateRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 CompositionalRecord(Aim1RecordBase): + """ + Compositional analysis record. + """ + __tablename__ = 'compositional_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"CompositionalRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 IcpRecord(Aim1RecordBase): + """ + ICP analysis record. + """ + __tablename__ = 'icp_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"IcpRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 XrfRecord(Aim1RecordBase): + """ + XRF analysis record. + """ + __tablename__ = 'xrf_record' + + maybe_wavelength_nm = Column(Numeric()) + maybe_intensity = Column(Numeric()) + maybe_energy_slope = Column(Numeric()) + maybe_energy_offset = Column(Numeric()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"XrfRecord(maybe_wavelength_nm={self.maybe_wavelength_nm},maybe_intensity={self.maybe_intensity},maybe_energy_slope={self.maybe_energy_slope},maybe_energy_offset={self.maybe_energy_offset},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 XrdRecord(Aim1RecordBase): + """ + XRD analysis record. + """ + __tablename__ = 'xrd_record' + + maybe_scan_low_nm = Column(Integer()) + maybe_scan_high_nm = Column(Integer()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"XrdRecord(maybe_scan_low_nm={self.maybe_scan_low_nm},maybe_scan_high_nm={self.maybe_scan_high_nm},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 CalorimetryRecord(Aim1RecordBase): + """ + Calorimetry analysis record. + """ + __tablename__ = 'calorimetry_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"CalorimetryRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 FtnirRecord(Aim1RecordBase): + """ + FT-NIR analysis record. + """ + __tablename__ = 'ftnir_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"FtnirRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 RgbRecord(Aim1RecordBase): + """ + RGB analysis record. + """ + __tablename__ = 'rgb_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"RgbRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 + } 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 new file mode 100644 index 00000000..db37c954 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/aim2_records.py @@ -0,0 +1,1599 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class ExperimentMethod(Base): + """ + Link between Experiment and Method. + """ + __tablename__ = 'experiment_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + method_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentMethod(id={self.id},experiment_id={self.experiment_id},method_id={self.method_id},)" + + + + + + +class ExperimentEquipment(Base): + """ + Link between Experiment and Equipment. + """ + __tablename__ = 'experiment_equipment' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + equipment_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentEquipment(id={self.id},experiment_id={self.experiment_id},equipment_id={self.equipment_id},)" + + + + + + +class ExperimentAnalysis(Base): + """ + Link between Experiment and AnalysisType. + """ + __tablename__ = 'experiment_analysis' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + analysis_type_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentAnalysis(id={self.id},experiment_id={self.experiment_id},analysis_type_id={self.analysis_type_id},)" + + + + + + +class ExperimentPreparedSample(Base): + """ + Link between Experiment and PreparedSample. + """ + __tablename__ = 'experiment_prepared_sample' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + prepared_sample_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentPreparedSample(id={self.id},experiment_id={self.experiment_id},prepared_sample_id={self.prepared_sample_id},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class Aim2RecordBase(BaseEntity): + """ + + """ + __tablename__ = 'aim2_record_base' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"Aim2RecordBase(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 Strain(LookupBase): + """ + Strain used in fermentation. + """ + __tablename__ = 'strain' + + parent_strain_id = Column(Integer()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Strain(parent_strain_id={self.parent_strain_id},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AnalysisType(LookupBase): + """ + Type of analysis. + """ + __tablename__ = 'analysis_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AnalysisType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Dataset(BaseEntity): + """ + Dataset definition. + """ + __tablename__ = 'dataset' + + name = Column(Text()) + record_type = Column(Text()) + source_id = Column(Integer()) + start_date = Column(Date()) + end_date = Column(Date()) + description = 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"Dataset(name={self.name},record_type={self.record_type},source_id={self.source_id},start_date={self.start_date},end_date={self.end_date},description={self.description},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 DimensionType(LookupBase): + """ + Type of dimension. + """ + __tablename__ = 'dimension_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"DimensionType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Observation(BaseEntity): + """ + Observation data. + """ + __tablename__ = 'observation' + + dataset_id = Column(Integer()) + record_type = Column(Text()) + record_id = Column(Integer()) + parameter_id = Column(Integer()) + value = Column(Numeric()) + unit_id = Column(Integer()) + dimension_type_id = Column(Integer()) + dimension_value = Column(Numeric()) + dimension_unit_id = 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"Observation(dataset_id={self.dataset_id},record_type={self.record_type},record_id={self.record_id},parameter_id={self.parameter_id},value={self.value},unit_id={self.unit_id},dimension_type_id={self.dimension_type_id},dimension_value={self.dimension_value},dimension_unit_id={self.dimension_unit_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PreparationMethod(BaseEntity): + """ + Method of sample preparation. + """ + __tablename__ = 'preparation_method' + + name = Column(Text()) + description = Column(Text()) + prep_method_abbrev_id = Column(Integer()) + prep_temp_c = Column(Numeric()) + uri = Column(Text()) + drying_step = Column(Boolean()) + 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"PreparationMethod(name={self.name},description={self.description},prep_method_abbrev_id={self.prep_method_abbrev_id},prep_temp_c={self.prep_temp_c},uri={self.uri},drying_step={self.drying_step},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 PreparationMethodAbbreviation(LookupBase): + """ + Abbreviation for preparation method. + """ + __tablename__ = 'preparation_method_abbreviation' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PreparationMethodAbbreviation(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PreparedSample(BaseEntity): + """ + Sample that has been prepared. + """ + __tablename__ = 'prepared_sample' + + name = Column(Text()) + field_sample_id = Column(Integer()) + prep_method_id = Column(Integer()) + prep_date = Column(Date()) + preparer_id = 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"PreparedSample(name={self.name},field_sample_id={self.field_sample_id},prep_method_id={self.prep_method_id},prep_date={self.prep_date},preparer_id={self.preparer_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Experiment(BaseEntity): + """ + Experiment definition. + """ + __tablename__ = 'experiment' + + analyst_id = Column(Integer()) + exper_start_date = Column(Date()) + exper_duration = Column(Numeric()) + exper_duration_unit_id = Column(Integer()) + exper_location_id = Column(Integer()) + description = 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"Experiment(analyst_id={self.analyst_id},exper_start_date={self.exper_start_date},exper_duration={self.exper_duration},exper_duration_unit_id={self.exper_duration_unit_id},exper_location_id={self.exper_location_id},description={self.description},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 Equipment(LookupBase): + """ + Equipment used in experiments. + """ + __tablename__ = 'equipment' + + equipment_location_id = Column(Integer()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Equipment(equipment_location_id={self.equipment_location_id},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 PretreatmentRecord(Aim2RecordBase): + """ + Pretreatment record. + """ + __tablename__ = 'pretreatment_record' + + pretreatment_method_id = Column(Integer()) + eh_method_id = Column(Integer()) + reaction_block_id = Column(Integer()) + block_position = Column(Text()) + temperature = Column(Numeric()) + replicate_no = Column(Integer()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"PretreatmentRecord(pretreatment_method_id={self.pretreatment_method_id},eh_method_id={self.eh_method_id},reaction_block_id={self.reaction_block_id},block_position={self.block_position},temperature={self.temperature},replicate_no={self.replicate_no},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 FermentationRecord(Aim2RecordBase): + """ + Fermentation record. + """ + __tablename__ = 'fermentation_record' + + strain_id = Column(Integer()) + pretreatment_method_id = Column(Integer()) + eh_method_id = Column(Integer()) + replicate_no = Column(Integer()) + well_position = Column(Text()) + temperature = Column(Numeric()) + agitation_rpm = Column(Numeric()) + vessel_id = Column(Integer()) + analyte_detection_equipment_id = Column(Integer()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"FermentationRecord(strain_id={self.strain_id},pretreatment_method_id={self.pretreatment_method_id},eh_method_id={self.eh_method_id},replicate_no={self.replicate_no},well_position={self.well_position},temperature={self.temperature},agitation_rpm={self.agitation_rpm},vessel_id={self.vessel_id},analyte_detection_equipment_id={self.analyte_detection_equipment_id},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 GasificationRecord(Aim2RecordBase): + """ + Gasification record. + """ + __tablename__ = 'gasification_record' + + feedstock_mass = Column(Numeric()) + bed_temperature = Column(Numeric()) + gas_flow_rate = Column(Numeric()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"GasificationRecord(feedstock_mass={self.feedstock_mass},bed_temperature={self.bed_temperature},gas_flow_rate={self.gas_flow_rate},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 AutoclaveRecord(Aim2RecordBase): + """ + Autoclave record. + """ + __tablename__ = 'autoclave_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"AutoclaveRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 + } 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 new file mode 100644 index 00000000..7cdc3fb0 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/ca_biositing.py @@ -0,0 +1,2447 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class LineageGroup(Base): + """ + Grouping for lineage information. + """ + __tablename__ = 'lineage_group' + + id = Column(Integer(), primary_key=True, nullable=False ) + etl_run_id = Column(Text()) + note = Column(Text()) + + + def __repr__(self): + return f"LineageGroup(id={self.id},etl_run_id={self.etl_run_id},note={self.note},)" + + + + + + +class EntityLineage(Base): + """ + Lineage information for a specific entity. + """ + __tablename__ = 'entity_lineage' + + id = Column(Integer(), primary_key=True, nullable=False ) + lineage_group_id = Column(Integer()) + source_table = Column(Text()) + source_row_id = Column(Text()) + note = Column(Text()) + + + def __repr__(self): + return f"EntityLineage(id={self.id},lineage_group_id={self.lineage_group_id},source_table={self.source_table},source_row_id={self.source_row_id},note={self.note},)" + + + + + + +class EtlRun(Base): + """ + Information about an ETL run. + """ + __tablename__ = 'etl_run' + + id = Column(Integer(), primary_key=True, nullable=False ) + started_at = Column(DateTime()) + completed_at = Column(DateTime()) + pipeline_name = Column(Text()) + status = Column(Text()) + records_ingested = Column(Integer()) + note = Column(Text()) + + + def __repr__(self): + return f"EtlRun(id={self.id},started_at={self.started_at},completed_at={self.completed_at},pipeline_name={self.pipeline_name},status={self.status},records_ingested={self.records_ingested},note={self.note},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class ExperimentMethod(Base): + """ + Link between Experiment and Method. + """ + __tablename__ = 'experiment_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + method_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentMethod(id={self.id},experiment_id={self.experiment_id},method_id={self.method_id},)" + + + + + + +class ExperimentEquipment(Base): + """ + Link between Experiment and Equipment. + """ + __tablename__ = 'experiment_equipment' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + equipment_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentEquipment(id={self.id},experiment_id={self.experiment_id},equipment_id={self.equipment_id},)" + + + + + + +class ExperimentAnalysis(Base): + """ + Link between Experiment and AnalysisType. + """ + __tablename__ = 'experiment_analysis' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + analysis_type_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentAnalysis(id={self.id},experiment_id={self.experiment_id},analysis_type_id={self.analysis_type_id},)" + + + + + + +class ExperimentPreparedSample(Base): + """ + Link between Experiment and PreparedSample. + """ + __tablename__ = 'experiment_prepared_sample' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + prepared_sample_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentPreparedSample(id={self.id},experiment_id={self.experiment_id},prepared_sample_id={self.prepared_sample_id},)" + + + + + + +class Polygon(Base): + """ + Geospatial polygon. + """ + __tablename__ = 'polygon' + + id = Column(Integer(), primary_key=True, nullable=False ) + geoid = Column(Text()) + geom = Column(Text()) + + + def __repr__(self): + return f"Polygon(id={self.id},geoid={self.geoid},geom={self.geom},)" + + + + + + +class Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PreparationMethod(BaseEntity): + """ + Method of sample preparation. + """ + __tablename__ = 'preparation_method' + + name = Column(Text()) + description = Column(Text()) + prep_method_abbrev_id = Column(Integer()) + prep_temp_c = Column(Numeric()) + uri = Column(Text()) + drying_step = Column(Boolean()) + 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"PreparationMethod(name={self.name},description={self.description},prep_method_abbrev_id={self.prep_method_abbrev_id},prep_temp_c={self.prep_temp_c},uri={self.uri},drying_step={self.drying_step},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 PreparationMethodAbbreviation(LookupBase): + """ + Abbreviation for preparation method. + """ + __tablename__ = 'preparation_method_abbreviation' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PreparationMethodAbbreviation(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PreparedSample(BaseEntity): + """ + Sample that has been prepared. + """ + __tablename__ = 'prepared_sample' + + name = Column(Text()) + field_sample_id = Column(Integer()) + prep_method_id = Column(Integer()) + prep_date = Column(Date()) + preparer_id = 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"PreparedSample(name={self.name},field_sample_id={self.field_sample_id},prep_method_id={self.prep_method_id},prep_date={self.prep_date},preparer_id={self.preparer_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Experiment(BaseEntity): + """ + Experiment definition. + """ + __tablename__ = 'experiment' + + analyst_id = Column(Integer()) + exper_start_date = Column(Date()) + exper_duration = Column(Numeric()) + exper_duration_unit_id = Column(Integer()) + exper_location_id = Column(Integer()) + description = 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"Experiment(analyst_id={self.analyst_id},exper_start_date={self.exper_start_date},exper_duration={self.exper_duration},exper_duration_unit_id={self.exper_duration_unit_id},exper_location_id={self.exper_location_id},description={self.description},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 Equipment(LookupBase): + """ + Equipment used in experiments. + """ + __tablename__ = 'equipment' + + equipment_location_id = Column(Integer()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Equipment(equipment_location_id={self.equipment_location_id},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AnalysisType(LookupBase): + """ + Type of analysis. + """ + __tablename__ = 'analysis_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AnalysisType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Dataset(BaseEntity): + """ + Dataset definition. + """ + __tablename__ = 'dataset' + + name = Column(Text()) + record_type = Column(Text()) + source_id = Column(Integer()) + start_date = Column(Date()) + end_date = Column(Date()) + description = 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"Dataset(name={self.name},record_type={self.record_type},source_id={self.source_id},start_date={self.start_date},end_date={self.end_date},description={self.description},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 DimensionType(LookupBase): + """ + Type of dimension. + """ + __tablename__ = 'dimension_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"DimensionType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Observation(BaseEntity): + """ + Observation data. + """ + __tablename__ = 'observation' + + dataset_id = Column(Integer()) + record_type = Column(Text()) + record_id = Column(Integer()) + parameter_id = Column(Integer()) + value = Column(Numeric()) + unit_id = Column(Integer()) + dimension_type_id = Column(Integer()) + dimension_value = Column(Numeric()) + dimension_unit_id = 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"Observation(dataset_id={self.dataset_id},record_type={self.record_type},record_id={self.record_id},parameter_id={self.parameter_id},value={self.value},unit_id={self.unit_id},dimension_type_id={self.dimension_type_id},dimension_value={self.dimension_value},dimension_unit_id={self.dimension_unit_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Aim1RecordBase(BaseEntity): + """ + + """ + __tablename__ = 'aim1_record_base' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"Aim1RecordBase(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 Aim2RecordBase(BaseEntity): + """ + + """ + __tablename__ = 'aim2_record_base' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"Aim2RecordBase(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 Strain(LookupBase): + """ + Strain used in fermentation. + """ + __tablename__ = 'strain' + + parent_strain_id = Column(Integer()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Strain(parent_strain_id={self.parent_strain_id},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaDomain(LookupBase): + """ + USDA domain. + """ + __tablename__ = 'usda_domain' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"UsdaDomain(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaStatisticCategory(LookupBase): + """ + USDA statistic category. + """ + __tablename__ = 'usda_statistic_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"UsdaStatisticCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaSurveyProgram(LookupBase): + """ + USDA survey program. + """ + __tablename__ = 'usda_survey_program' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"UsdaSurveyProgram(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaCensusRecord(BaseEntity): + """ + USDA census record. + """ + __tablename__ = 'usda_census_record' + + dataset_id = Column(Integer()) + geoid = Column(Text()) + commodity_code = Column(Integer()) + year = Column(Integer()) + source_reference = Column(Text()) + 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"UsdaCensusRecord(dataset_id={self.dataset_id},geoid={self.geoid},commodity_code={self.commodity_code},year={self.year},source_reference={self.source_reference},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 UsdaSurveyRecord(BaseEntity): + """ + USDA survey record. + """ + __tablename__ = 'usda_survey_record' + + dataset_id = Column(Integer()) + geoid = Column(Text()) + commodity_code = Column(Integer()) + year = Column(Integer()) + survey_program_id = Column(Integer()) + survey_period = Column(Text()) + reference_month = Column(Text()) + seasonal_flag = Column(Boolean()) + 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"UsdaSurveyRecord(dataset_id={self.dataset_id},geoid={self.geoid},commodity_code={self.commodity_code},year={self.year},survey_program_id={self.survey_program_id},survey_period={self.survey_period},reference_month={self.reference_month},seasonal_flag={self.seasonal_flag},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 UsdaCommodity(LookupBase): + """ + USDA commodity. + """ + __tablename__ = 'usda_commodity' + + usda_source = Column(Text()) + usda_code = Column(Text()) + parent_commodity_id = Column(Integer()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"UsdaCommodity(usda_source={self.usda_source},usda_code={self.usda_code},parent_commodity_id={self.parent_commodity_id},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaTermMap(BaseEntity): + """ + Mapping of raw terms to USDA commodities. + """ + __tablename__ = 'usda_term_map' + + source_system = Column(Text()) + source_context = Column(Text()) + raw_term = Column(Text()) + usda_commodity_id = Column(Integer()) + is_verified = Column(Boolean()) + 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"UsdaTermMap(source_system={self.source_system},source_context={self.source_context},raw_term={self.raw_term},usda_commodity_id={self.usda_commodity_id},is_verified={self.is_verified},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 ResourceUsdaCommodityMap(BaseEntity): + """ + Mapping between resources/crops and USDA commodities. + """ + __tablename__ = 'resource_usda_commodity_map' + + resource_id = Column(Integer()) + primary_crop_id = Column(Integer()) + usda_commodity_id = Column(Integer()) + match_tier = Column(Text()) + 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"ResourceUsdaCommodityMap(resource_id={self.resource_id},primary_crop_id={self.primary_crop_id},usda_commodity_id={self.usda_commodity_id},match_tier={self.match_tier},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 UsdaMarketReport(BaseEntity): + """ + USDA market report. + """ + __tablename__ = 'usda_market_report' + + slug_id = Column(Integer()) + slug_name = Column(Text()) + report_series_title = Column(Text()) + frequency = Column(Text()) + office_name = Column(Text()) + office_city_id = Column(Integer()) + office_state_fips = Column(Text()) + source_id = Column(Integer()) + 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"UsdaMarketReport(slug_id={self.slug_id},slug_name={self.slug_name},report_series_title={self.report_series_title},frequency={self.frequency},office_name={self.office_name},office_city_id={self.office_city_id},office_state_fips={self.office_state_fips},source_id={self.source_id},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 UsdaMarketRecord(BaseEntity): + """ + USDA market record. + """ + __tablename__ = 'usda_market_record' + + report_id = Column(Integer()) + dataset_id = Column(Integer()) + report_begin_date = Column(DateTime()) + report_end_date = Column(DateTime()) + report_date = Column(DateTime()) + commodity_id = Column(Integer()) + market_type_id = Column(Integer()) + market_type_category = Column(Text()) + grp = Column(Text()) + market_category_id = Column(Integer()) + class_ = Column(Text()) + grade = Column(Text()) + variety = Column(Text()) + protein_pct = Column(Numeric()) + application = Column(Text()) + pkg = Column(Text()) + sale_type = Column(Text()) + price_unit_id = Column(Integer()) + freight = Column(Text()) + trans_mode = 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"UsdaMarketRecord(report_id={self.report_id},dataset_id={self.dataset_id},report_begin_date={self.report_begin_date},report_end_date={self.report_end_date},report_date={self.report_date},commodity_id={self.commodity_id},market_type_id={self.market_type_id},market_type_category={self.market_type_category},grp={self.grp},market_category_id={self.market_category_id},class_={self.class_},grade={self.grade},variety={self.variety},protein_pct={self.protein_pct},application={self.application},pkg={self.pkg},sale_type={self.sale_type},price_unit_id={self.price_unit_id},freight={self.freight},trans_mode={self.trans_mode},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 LandiqRecord(BaseEntity): + """ + LandIQ record. + """ + __tablename__ = 'landiq_record' + + dataset_id = Column(Integer()) + polygon_id = Column(Integer()) + main_crop = Column(Integer()) + secondary_crop = Column(Integer()) + tertiary_crop = Column(Integer()) + quaternary_crop = Column(Integer()) + confidence = Column(Integer()) + irrigated = Column(Boolean()) + acres = Column(Float()) + version = Column(Text()) + 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"LandiqRecord(dataset_id={self.dataset_id},polygon_id={self.polygon_id},main_crop={self.main_crop},secondary_crop={self.secondary_crop},tertiary_crop={self.tertiary_crop},quaternary_crop={self.quaternary_crop},confidence={self.confidence},irrigated={self.irrigated},acres={self.acres},version={self.version},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 BillionTon2023Record(BaseEntity): + """ + Billion Ton 2023 record. + """ + __tablename__ = 'billion_ton2023_record' + + subclass_id = Column(Integer()) + resource_id = Column(Integer()) + geoid = Column(Text()) + county_square_miles = Column(Float()) + model_name = Column(Text()) + scenario_name = Column(Text()) + price_offered_usd = Column(Numeric()) + production = Column(Integer()) + production_unit_id = Column(Integer()) + btu_ton = Column(Integer()) + production_energy_content = Column(Integer()) + energy_content_unit_id = Column(Integer()) + product_density_dtpersqmi = Column(Numeric()) + land_source = 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"BillionTon2023Record(subclass_id={self.subclass_id},resource_id={self.resource_id},geoid={self.geoid},county_square_miles={self.county_square_miles},model_name={self.model_name},scenario_name={self.scenario_name},price_offered_usd={self.price_offered_usd},production={self.production},production_unit_id={self.production_unit_id},btu_ton={self.btu_ton},production_energy_content={self.production_energy_content},energy_content_unit_id={self.energy_content_unit_id},product_density_dtpersqmi={self.product_density_dtpersqmi},land_source={self.land_source},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. + """ + __tablename__ = 'proximate_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"ProximateRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 UltimateRecord(Aim1RecordBase): + """ + Ultimate analysis record. + """ + __tablename__ = 'ultimate_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"UltimateRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 CompositionalRecord(Aim1RecordBase): + """ + Compositional analysis record. + """ + __tablename__ = 'compositional_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"CompositionalRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 IcpRecord(Aim1RecordBase): + """ + ICP analysis record. + """ + __tablename__ = 'icp_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"IcpRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 XrfRecord(Aim1RecordBase): + """ + XRF analysis record. + """ + __tablename__ = 'xrf_record' + + maybe_wavelength_nm = Column(Numeric()) + maybe_intensity = Column(Numeric()) + maybe_energy_slope = Column(Numeric()) + maybe_energy_offset = Column(Numeric()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"XrfRecord(maybe_wavelength_nm={self.maybe_wavelength_nm},maybe_intensity={self.maybe_intensity},maybe_energy_slope={self.maybe_energy_slope},maybe_energy_offset={self.maybe_energy_offset},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 XrdRecord(Aim1RecordBase): + """ + XRD analysis record. + """ + __tablename__ = 'xrd_record' + + maybe_scan_low_nm = Column(Integer()) + maybe_scan_high_nm = Column(Integer()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"XrdRecord(maybe_scan_low_nm={self.maybe_scan_low_nm},maybe_scan_high_nm={self.maybe_scan_high_nm},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 CalorimetryRecord(Aim1RecordBase): + """ + Calorimetry analysis record. + """ + __tablename__ = 'calorimetry_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"CalorimetryRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 FtnirRecord(Aim1RecordBase): + """ + FT-NIR analysis record. + """ + __tablename__ = 'ftnir_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"FtnirRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 RgbRecord(Aim1RecordBase): + """ + RGB analysis record. + """ + __tablename__ = 'rgb_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_no = Column(Integer()) + technical_replicate_total = Column(Integer()) + method_id = Column(Integer()) + analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"RgbRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_no={self.technical_replicate_no},technical_replicate_total={self.technical_replicate_total},method_id={self.method_id},analyst_id={self.analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 PretreatmentRecord(Aim2RecordBase): + """ + Pretreatment record. + """ + __tablename__ = 'pretreatment_record' + + pretreatment_method_id = Column(Integer()) + eh_method_id = Column(Integer()) + reaction_block_id = Column(Integer()) + block_position = Column(Text()) + temperature = Column(Numeric()) + replicate_no = Column(Integer()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"PretreatmentRecord(pretreatment_method_id={self.pretreatment_method_id},eh_method_id={self.eh_method_id},reaction_block_id={self.reaction_block_id},block_position={self.block_position},temperature={self.temperature},replicate_no={self.replicate_no},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 FermentationRecord(Aim2RecordBase): + """ + Fermentation record. + """ + __tablename__ = 'fermentation_record' + + strain_id = Column(Integer()) + pretreatment_method_id = Column(Integer()) + eh_method_id = Column(Integer()) + replicate_no = Column(Integer()) + well_position = Column(Text()) + temperature = Column(Numeric()) + agitation_rpm = Column(Numeric()) + vessel_id = Column(Integer()) + analyte_detection_equipment_id = Column(Integer()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"FermentationRecord(strain_id={self.strain_id},pretreatment_method_id={self.pretreatment_method_id},eh_method_id={self.eh_method_id},replicate_no={self.replicate_no},well_position={self.well_position},temperature={self.temperature},agitation_rpm={self.agitation_rpm},vessel_id={self.vessel_id},analyte_detection_equipment_id={self.analyte_detection_equipment_id},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 GasificationRecord(Aim2RecordBase): + """ + Gasification record. + """ + __tablename__ = 'gasification_record' + + feedstock_mass = Column(Numeric()) + bed_temperature = Column(Numeric()) + gas_flow_rate = Column(Numeric()) + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"GasificationRecord(feedstock_mass={self.feedstock_mass},bed_temperature={self.bed_temperature},gas_flow_rate={self.gas_flow_rate},dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 AutoclaveRecord(Aim2RecordBase): + """ + Autoclave record. + """ + __tablename__ = 'autoclave_record' + + dataset_id = Column(Integer()) + experiment_id = Column(Integer()) + resource_id = Column(Integer()) + sample_id = Column(Integer()) + technical_replicate_total = Column(Integer()) + technical_replicate_no = Column(Integer()) + calc_method_id = Column(Integer()) + calc_analyst_id = Column(Integer()) + raw_data_id = Column(Integer()) + qc_pass = Column(Boolean()) + 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"AutoclaveRecord(dataset_id={self.dataset_id},experiment_id={self.experiment_id},resource_id={self.resource_id},sample_id={self.sample_id},technical_replicate_total={self.technical_replicate_total},technical_replicate_no={self.technical_replicate_no},calc_method_id={self.calc_method_id},calc_analyst_id={self.calc_analyst_id},raw_data_id={self.raw_data_id},qc_pass={self.qc_pass},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 + } diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/census_survey.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/census_survey.py deleted file mode 100644 index 158c32a4..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/census_survey.py +++ /dev/null @@ -1,132 +0,0 @@ - -from sqlalchemy import Column, Index, Table, ForeignKey -from sqlalchemy.orm import relationship -from sqlalchemy.sql.sqltypes import * -from sqlalchemy.orm import declarative_base -from sqlalchemy.ext.associationproxy import association_proxy - -Base = declarative_base() -metadata = Base.metadata - - -class USDARecord(Base): - """ - Base class for USDA agricultural data records. - """ - __tablename__ = 'USDARecord' - - id = Column(Integer(), primary_key=True, autoincrement=True , nullable=False ) - year = Column(Integer(), nullable=False ) - crop = Column(Enum('Almond', 'Pistachio', 'Tomato', 'Olive', name='CropEnum')) - variable = Column(Enum('ACREAGE_TOTAL', 'ACREAGE_BEARING', 'ACREAGE_NONBEARING', 'YIELD', 'PRODUCTION', 'OPERATIONS', name='VariableEnum')) - unit = Column(Enum('ACRES', 'TONS', 'TONS_PER_ACRE', 'OPERATIONS', name='UnitEnum')) - value = Column(Float()) - bearing_status = Column(Enum('BEARING', 'NONBEARING', 'NA', name='BearingStatusEnum')) - class_desc = Column(Text()) - domain_desc = Column(Text()) - source = Column(Text()) - notes = Column(Text()) - geography_id = Column(Integer(), ForeignKey('Geography.id')) - geography = relationship("Geography", uselist=False, foreign_keys=[geography_id]) - - - def __repr__(self): - return f"USDARecord(id={self.id},year={self.year},crop={self.crop},variable={self.variable},unit={self.unit},value={self.value},bearing_status={self.bearing_status},class_desc={self.class_desc},domain_desc={self.domain_desc},source={self.source},notes={self.notes},geography_id={self.geography_id},)" - - - - - - -class Geography(Base): - """ - Reference table for U.S. geographic identifiers. - """ - __tablename__ = 'Geography' - - id = Column(Integer(), primary_key=True, autoincrement=True , nullable=False ) - state_name = Column(Text()) - state_fips = Column(Text()) - county_name = Column(Text()) - county_fips = Column(Text()) - geoid = Column(Text()) - region_name = Column(Text()) - agg_level_desc = Column(Text()) - - - def __repr__(self): - return f"Geography(id={self.id},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},geoid={self.geoid},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" - - - - - - -class CensusRecord(USDARecord): - """ - A USDA Census of Agriculture record (every 5 years). - """ - __tablename__ = 'CensusRecord' - - id = Column(Integer(), primary_key=True, autoincrement=True , nullable=False ) - year = Column(Integer(), nullable=False ) - crop = Column(Enum('Almond', 'Pistachio', 'Tomato', 'Olive', name='CropEnum')) - variable = Column(Enum('ACREAGE_TOTAL', 'ACREAGE_BEARING', 'ACREAGE_NONBEARING', 'YIELD', 'PRODUCTION', 'OPERATIONS', name='VariableEnum')) - unit = Column(Enum('ACRES', 'TONS', 'TONS_PER_ACRE', 'OPERATIONS', name='UnitEnum')) - value = Column(Float()) - bearing_status = Column(Enum('BEARING', 'NONBEARING', 'NA', name='BearingStatusEnum')) - class_desc = Column(Text()) - domain_desc = Column(Text()) - source = Column(Text()) - notes = Column(Text()) - geography_id = Column(Integer(), ForeignKey('Geography.id')) - geography = relationship("Geography", uselist=False, foreign_keys=[geography_id]) - - - def __repr__(self): - return f"CensusRecord(id={self.id},year={self.year},crop={self.crop},variable={self.variable},unit={self.unit},value={self.value},bearing_status={self.bearing_status},class_desc={self.class_desc},domain_desc={self.domain_desc},source={self.source},notes={self.notes},geography_id={self.geography_id},)" - - - - - # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html - __mapper_args__ = { - 'concrete': True - } - - - -class SurveyRecord(USDARecord): - """ - A USDA Survey record (annual, seasonal, or periodic). - """ - __tablename__ = 'SurveyRecord' - - id = Column(Integer(), primary_key=True, autoincrement=True , nullable=False ) - period_desc = Column(Text()) - freq_desc = Column(Text()) - program_desc = Column(Text()) - year = Column(Integer(), nullable=False ) - crop = Column(Enum('Almond', 'Pistachio', 'Tomato', 'Olive', name='CropEnum')) - variable = Column(Enum('ACREAGE_TOTAL', 'ACREAGE_BEARING', 'ACREAGE_NONBEARING', 'YIELD', 'PRODUCTION', 'OPERATIONS', name='VariableEnum')) - unit = Column(Enum('ACRES', 'TONS', 'TONS_PER_ACRE', 'OPERATIONS', name='UnitEnum')) - value = Column(Float()) - bearing_status = Column(Enum('BEARING', 'NONBEARING', 'NA', name='BearingStatusEnum')) - class_desc = Column(Text()) - domain_desc = Column(Text()) - source = Column(Text()) - notes = Column(Text()) - geography_id = Column(Integer(), ForeignKey('Geography.id')) - geography = relationship("Geography", uselist=False, foreign_keys=[geography_id]) - - - def __repr__(self): - return f"SurveyRecord(id={self.id},period_desc={self.period_desc},freq_desc={self.freq_desc},program_desc={self.program_desc},year={self.year},crop={self.crop},variable={self.variable},unit={self.unit},value={self.value},bearing_status={self.bearing_status},class_desc={self.class_desc},domain_desc={self.domain_desc},source={self.source},notes={self.notes},geography_id={self.geography_id},)" - - - - - # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html - __mapper_args__ = { - 'concrete': True - } diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/core.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/core.py new file mode 100644 index 00000000..20ba55a2 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/core.py @@ -0,0 +1,46 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" 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 new file mode 100644 index 00000000..975b6bd5 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/data_sources_metadata.py @@ -0,0 +1,1029 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 + } 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 new file mode 100644 index 00000000..b93abd1f --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/experiment_equipment.py @@ -0,0 +1,1370 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class ExperimentMethod(Base): + """ + Link between Experiment and Method. + """ + __tablename__ = 'experiment_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + method_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentMethod(id={self.id},experiment_id={self.experiment_id},method_id={self.method_id},)" + + + + + + +class ExperimentEquipment(Base): + """ + Link between Experiment and Equipment. + """ + __tablename__ = 'experiment_equipment' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + equipment_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentEquipment(id={self.id},experiment_id={self.experiment_id},equipment_id={self.equipment_id},)" + + + + + + +class ExperimentAnalysis(Base): + """ + Link between Experiment and AnalysisType. + """ + __tablename__ = 'experiment_analysis' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + analysis_type_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentAnalysis(id={self.id},experiment_id={self.experiment_id},analysis_type_id={self.analysis_type_id},)" + + + + + + +class ExperimentPreparedSample(Base): + """ + Link between Experiment and PreparedSample. + """ + __tablename__ = 'experiment_prepared_sample' + + id = Column(Integer(), primary_key=True, nullable=False ) + experiment_id = Column(Integer()) + prepared_sample_id = Column(Integer()) + + + def __repr__(self): + return f"ExperimentPreparedSample(id={self.id},experiment_id={self.experiment_id},prepared_sample_id={self.prepared_sample_id},)" + + + + + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class Experiment(BaseEntity): + """ + Experiment definition. + """ + __tablename__ = 'experiment' + + analyst_id = Column(Integer()) + exper_start_date = Column(Date()) + exper_duration = Column(Numeric()) + exper_duration_unit_id = Column(Integer()) + exper_location_id = Column(Integer()) + description = 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"Experiment(analyst_id={self.analyst_id},exper_start_date={self.exper_start_date},exper_duration={self.exper_duration},exper_duration_unit_id={self.exper_duration_unit_id},exper_location_id={self.exper_location_id},description={self.description},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 Equipment(LookupBase): + """ + Equipment used in experiments. + """ + __tablename__ = 'equipment' + + equipment_location_id = Column(Integer()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Equipment(equipment_location_id={self.equipment_location_id},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 PreparationMethod(BaseEntity): + """ + Method of sample preparation. + """ + __tablename__ = 'preparation_method' + + name = Column(Text()) + description = Column(Text()) + prep_method_abbrev_id = Column(Integer()) + prep_temp_c = Column(Numeric()) + uri = Column(Text()) + drying_step = Column(Boolean()) + 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"PreparationMethod(name={self.name},description={self.description},prep_method_abbrev_id={self.prep_method_abbrev_id},prep_temp_c={self.prep_temp_c},uri={self.uri},drying_step={self.drying_step},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 PreparationMethodAbbreviation(LookupBase): + """ + Abbreviation for preparation method. + """ + __tablename__ = 'preparation_method_abbreviation' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PreparationMethodAbbreviation(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PreparedSample(BaseEntity): + """ + Sample that has been prepared. + """ + __tablename__ = 'prepared_sample' + + name = Column(Text()) + field_sample_id = Column(Integer()) + prep_method_id = Column(Integer()) + prep_date = Column(Date()) + preparer_id = 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"PreparedSample(name={self.name},field_sample_id={self.field_sample_id},prep_method_id={self.prep_method_id},prep_date={self.prep_date},preparer_id={self.preparer_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 AnalysisType(LookupBase): + """ + Type of analysis. + """ + __tablename__ = 'analysis_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AnalysisType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Dataset(BaseEntity): + """ + Dataset definition. + """ + __tablename__ = 'dataset' + + name = Column(Text()) + record_type = Column(Text()) + source_id = Column(Integer()) + start_date = Column(Date()) + end_date = Column(Date()) + description = 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"Dataset(name={self.name},record_type={self.record_type},source_id={self.source_id},start_date={self.start_date},end_date={self.end_date},description={self.description},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 DimensionType(LookupBase): + """ + Type of dimension. + """ + __tablename__ = 'dimension_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"DimensionType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Observation(BaseEntity): + """ + Observation data. + """ + __tablename__ = 'observation' + + dataset_id = Column(Integer()) + record_type = Column(Text()) + record_id = Column(Integer()) + parameter_id = Column(Integer()) + value = Column(Numeric()) + unit_id = Column(Integer()) + dimension_type_id = Column(Integer()) + dimension_value = Column(Numeric()) + dimension_unit_id = 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"Observation(dataset_id={self.dataset_id},record_type={self.record_type},record_id={self.record_id},parameter_id={self.parameter_id},value={self.value},unit_id={self.unit_id},dimension_type_id={self.dimension_type_id},dimension_value={self.dimension_value},dimension_unit_id={self.dimension_unit_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } 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 new file mode 100644 index 00000000..d86817b3 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/external_data.py @@ -0,0 +1,1556 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class Polygon(Base): + """ + Geospatial polygon. + """ + __tablename__ = 'polygon' + + id = Column(Integer(), primary_key=True, nullable=False ) + geoid = Column(Text()) + geom = Column(Text()) + + + def __repr__(self): + return f"Polygon(id={self.id},geoid={self.geoid},geom={self.geom},)" + + + + + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class UsdaDomain(LookupBase): + """ + USDA domain. + """ + __tablename__ = 'usda_domain' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"UsdaDomain(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaStatisticCategory(LookupBase): + """ + USDA statistic category. + """ + __tablename__ = 'usda_statistic_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"UsdaStatisticCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaSurveyProgram(LookupBase): + """ + USDA survey program. + """ + __tablename__ = 'usda_survey_program' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"UsdaSurveyProgram(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaCensusRecord(BaseEntity): + """ + USDA census record. + """ + __tablename__ = 'usda_census_record' + + dataset_id = Column(Integer()) + geoid = Column(Text()) + commodity_code = Column(Integer()) + year = Column(Integer()) + source_reference = Column(Text()) + 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"UsdaCensusRecord(dataset_id={self.dataset_id},geoid={self.geoid},commodity_code={self.commodity_code},year={self.year},source_reference={self.source_reference},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 UsdaSurveyRecord(BaseEntity): + """ + USDA survey record. + """ + __tablename__ = 'usda_survey_record' + + dataset_id = Column(Integer()) + geoid = Column(Text()) + commodity_code = Column(Integer()) + year = Column(Integer()) + survey_program_id = Column(Integer()) + survey_period = Column(Text()) + reference_month = Column(Text()) + seasonal_flag = Column(Boolean()) + 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"UsdaSurveyRecord(dataset_id={self.dataset_id},geoid={self.geoid},commodity_code={self.commodity_code},year={self.year},survey_program_id={self.survey_program_id},survey_period={self.survey_period},reference_month={self.reference_month},seasonal_flag={self.seasonal_flag},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 UsdaCommodity(LookupBase): + """ + USDA commodity. + """ + __tablename__ = 'usda_commodity' + + usda_source = Column(Text()) + usda_code = Column(Text()) + parent_commodity_id = Column(Integer()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"UsdaCommodity(usda_source={self.usda_source},usda_code={self.usda_code},parent_commodity_id={self.parent_commodity_id},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class UsdaTermMap(BaseEntity): + """ + Mapping of raw terms to USDA commodities. + """ + __tablename__ = 'usda_term_map' + + source_system = Column(Text()) + source_context = Column(Text()) + raw_term = Column(Text()) + usda_commodity_id = Column(Integer()) + is_verified = Column(Boolean()) + 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"UsdaTermMap(source_system={self.source_system},source_context={self.source_context},raw_term={self.raw_term},usda_commodity_id={self.usda_commodity_id},is_verified={self.is_verified},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 ResourceUsdaCommodityMap(BaseEntity): + """ + Mapping between resources/crops and USDA commodities. + """ + __tablename__ = 'resource_usda_commodity_map' + + resource_id = Column(Integer()) + primary_crop_id = Column(Integer()) + usda_commodity_id = Column(Integer()) + match_tier = Column(Text()) + 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"ResourceUsdaCommodityMap(resource_id={self.resource_id},primary_crop_id={self.primary_crop_id},usda_commodity_id={self.usda_commodity_id},match_tier={self.match_tier},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 UsdaMarketReport(BaseEntity): + """ + USDA market report. + """ + __tablename__ = 'usda_market_report' + + slug_id = Column(Integer()) + slug_name = Column(Text()) + report_series_title = Column(Text()) + frequency = Column(Text()) + office_name = Column(Text()) + office_city_id = Column(Integer()) + office_state_fips = Column(Text()) + source_id = Column(Integer()) + 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"UsdaMarketReport(slug_id={self.slug_id},slug_name={self.slug_name},report_series_title={self.report_series_title},frequency={self.frequency},office_name={self.office_name},office_city_id={self.office_city_id},office_state_fips={self.office_state_fips},source_id={self.source_id},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 UsdaMarketRecord(BaseEntity): + """ + USDA market record. + """ + __tablename__ = 'usda_market_record' + + report_id = Column(Integer()) + dataset_id = Column(Integer()) + report_begin_date = Column(DateTime()) + report_end_date = Column(DateTime()) + report_date = Column(DateTime()) + commodity_id = Column(Integer()) + market_type_id = Column(Integer()) + market_type_category = Column(Text()) + grp = Column(Text()) + market_category_id = Column(Integer()) + class_ = Column(Text()) + grade = Column(Text()) + variety = Column(Text()) + protein_pct = Column(Numeric()) + application = Column(Text()) + pkg = Column(Text()) + sale_type = Column(Text()) + price_unit_id = Column(Integer()) + freight = Column(Text()) + trans_mode = 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"UsdaMarketRecord(report_id={self.report_id},dataset_id={self.dataset_id},report_begin_date={self.report_begin_date},report_end_date={self.report_end_date},report_date={self.report_date},commodity_id={self.commodity_id},market_type_id={self.market_type_id},market_type_category={self.market_type_category},grp={self.grp},market_category_id={self.market_category_id},class_={self.class_},grade={self.grade},variety={self.variety},protein_pct={self.protein_pct},application={self.application},pkg={self.pkg},sale_type={self.sale_type},price_unit_id={self.price_unit_id},freight={self.freight},trans_mode={self.trans_mode},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 LandiqRecord(BaseEntity): + """ + LandIQ record. + """ + __tablename__ = 'landiq_record' + + dataset_id = Column(Integer()) + polygon_id = Column(Integer()) + main_crop = Column(Integer()) + secondary_crop = Column(Integer()) + tertiary_crop = Column(Integer()) + quaternary_crop = Column(Integer()) + confidence = Column(Integer()) + irrigated = Column(Boolean()) + acres = Column(Float()) + version = Column(Text()) + 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"LandiqRecord(dataset_id={self.dataset_id},polygon_id={self.polygon_id},main_crop={self.main_crop},secondary_crop={self.secondary_crop},tertiary_crop={self.tertiary_crop},quaternary_crop={self.quaternary_crop},confidence={self.confidence},irrigated={self.irrigated},acres={self.acres},version={self.version},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 BillionTon2023Record(BaseEntity): + """ + Billion Ton 2023 record. + """ + __tablename__ = 'billion_ton2023_record' + + subclass_id = Column(Integer()) + resource_id = Column(Integer()) + geoid = Column(Text()) + county_square_miles = Column(Float()) + model_name = Column(Text()) + scenario_name = Column(Text()) + price_offered_usd = Column(Numeric()) + production = Column(Integer()) + production_unit_id = Column(Integer()) + btu_ton = Column(Integer()) + production_energy_content = Column(Integer()) + energy_content_unit_id = Column(Integer()) + product_density_dtpersqmi = Column(Numeric()) + land_source = 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"BillionTon2023Record(subclass_id={self.subclass_id},resource_id={self.resource_id},geoid={self.geoid},county_square_miles={self.county_square_miles},model_name={self.model_name},scenario_name={self.scenario_name},price_offered_usd={self.price_offered_usd},production={self.production},production_unit_id={self.production_unit_id},btu_ton={self.btu_ton},production_energy_content={self.production_energy_content},energy_content_unit_id={self.energy_content_unit_id},product_density_dtpersqmi={self.product_density_dtpersqmi},land_source={self.land_source},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 DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AnalysisType(LookupBase): + """ + Type of analysis. + """ + __tablename__ = 'analysis_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AnalysisType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Dataset(BaseEntity): + """ + Dataset definition. + """ + __tablename__ = 'dataset' + + name = Column(Text()) + record_type = Column(Text()) + source_id = Column(Integer()) + start_date = Column(Date()) + end_date = Column(Date()) + description = 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"Dataset(name={self.name},record_type={self.record_type},source_id={self.source_id},start_date={self.start_date},end_date={self.end_date},description={self.description},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 DimensionType(LookupBase): + """ + Type of dimension. + """ + __tablename__ = 'dimension_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"DimensionType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Observation(BaseEntity): + """ + Observation data. + """ + __tablename__ = 'observation' + + dataset_id = Column(Integer()) + record_type = Column(Text()) + record_id = Column(Integer()) + parameter_id = Column(Integer()) + value = Column(Numeric()) + unit_id = Column(Integer()) + dimension_type_id = Column(Integer()) + dimension_value = Column(Numeric()) + dimension_unit_id = 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"Observation(dataset_id={self.dataset_id},record_type={self.record_type},record_id={self.record_id},parameter_id={self.parameter_id},value={self.value},unit_id={self.unit_id},dimension_type_id={self.dimension_type_id},dimension_value={self.dimension_value},dimension_unit_id={self.dimension_unit_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 + } 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 new file mode 100644 index 00000000..f699dc79 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/field_sampling.py @@ -0,0 +1,1029 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } 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 new file mode 100644 index 00000000..88195134 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/general_analysis.py @@ -0,0 +1,1147 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class AnalysisType(LookupBase): + """ + Type of analysis. + """ + __tablename__ = 'analysis_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AnalysisType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Dataset(BaseEntity): + """ + Dataset definition. + """ + __tablename__ = 'dataset' + + name = Column(Text()) + record_type = Column(Text()) + source_id = Column(Integer()) + start_date = Column(Date()) + end_date = Column(Date()) + description = 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"Dataset(name={self.name},record_type={self.record_type},source_id={self.source_id},start_date={self.start_date},end_date={self.end_date},description={self.description},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 DimensionType(LookupBase): + """ + Type of dimension. + """ + __tablename__ = 'dimension_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"DimensionType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Observation(BaseEntity): + """ + Observation data. + """ + __tablename__ = 'observation' + + dataset_id = Column(Integer()) + record_type = Column(Text()) + record_id = Column(Integer()) + parameter_id = Column(Integer()) + value = Column(Numeric()) + unit_id = Column(Integer()) + dimension_type_id = Column(Integer()) + dimension_value = Column(Numeric()) + dimension_unit_id = 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"Observation(dataset_id={self.dataset_id},record_type={self.record_type},record_id={self.record_id},parameter_id={self.parameter_id},value={self.value},unit_id={self.unit_id},dimension_type_id={self.dimension_type_id},dimension_value={self.dimension_value},dimension_unit_id={self.dimension_unit_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 + } diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/geography.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/geography.py index dcc8a564..349885b9 100644 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/geography.py +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/geography.py @@ -11,19 +11,96 @@ class Geography(Base): """ - Reference table for U.S. geographic identifiers. + Geographic region definition (e.g. county, state). """ - __tablename__ = 'Geography' + __tablename__ = 'geography' - id = Column(Integer(), primary_key=True, autoincrement=True , nullable=False ) + geoid = Column(Text(), primary_key=True, nullable=False ) state_name = Column(Text()) state_fips = Column(Text()) county_name = Column(Text()) county_fips = Column(Text()) - geoid = Column(Text()) region_name = Column(Text()) agg_level_desc = Column(Text()) def __repr__(self): - return f"Geography(id={self.id},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},geoid={self.geoid},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class LocationAddress(BaseEntity): + """ + Specific physical location. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 + } 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 new file mode 100644 index 00000000..833b7951 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/infrastructure.py @@ -0,0 +1,1624 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +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 BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +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 DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 AnalysisType(LookupBase): + """ + Type of analysis. + """ + __tablename__ = 'analysis_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AnalysisType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Dataset(BaseEntity): + """ + Dataset definition. + """ + __tablename__ = 'dataset' + + name = Column(Text()) + record_type = Column(Text()) + source_id = Column(Integer()) + start_date = Column(Date()) + end_date = Column(Date()) + description = 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"Dataset(name={self.name},record_type={self.record_type},source_id={self.source_id},start_date={self.start_date},end_date={self.end_date},description={self.description},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 DimensionType(LookupBase): + """ + Type of dimension. + """ + __tablename__ = 'dimension_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"DimensionType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Observation(BaseEntity): + """ + Observation data. + """ + __tablename__ = 'observation' + + dataset_id = Column(Integer()) + record_type = Column(Text()) + record_id = Column(Integer()) + parameter_id = Column(Integer()) + value = Column(Numeric()) + unit_id = Column(Integer()) + dimension_type_id = Column(Integer()) + dimension_value = Column(Numeric()) + dimension_unit_id = 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"Observation(dataset_id={self.dataset_id},record_type={self.record_type},record_id={self.record_id},parameter_id={self.parameter_id},value={self.value},unit_id={self.unit_id},dimension_type_id={self.dimension_type_id},dimension_value={self.dimension_value},dimension_unit_id={self.dimension_unit_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/lineage.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/lineage.py new file mode 100644 index 00000000..c1fb6e9a --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/lineage.py @@ -0,0 +1,109 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class LineageGroup(Base): + """ + Grouping for lineage information. + """ + __tablename__ = 'lineage_group' + + id = Column(Integer(), primary_key=True, nullable=False ) + etl_run_id = Column(Text()) + note = Column(Text()) + + + def __repr__(self): + return f"LineageGroup(id={self.id},etl_run_id={self.etl_run_id},note={self.note},)" + + + + + + +class EntityLineage(Base): + """ + Lineage information for a specific entity. + """ + __tablename__ = 'entity_lineage' + + id = Column(Integer(), primary_key=True, nullable=False ) + lineage_group_id = Column(Integer()) + source_table = Column(Text()) + source_row_id = Column(Text()) + note = Column(Text()) + + + def __repr__(self): + return f"EntityLineage(id={self.id},lineage_group_id={self.lineage_group_id},source_table={self.source_table},source_row_id={self.source_row_id},note={self.note},)" + + + + + + +class EtlRun(Base): + """ + Information about an ETL run. + """ + __tablename__ = 'etl_run' + + id = Column(Integer(), primary_key=True, nullable=False ) + started_at = Column(DateTime()) + completed_at = Column(DateTime()) + pipeline_name = Column(Text()) + status = Column(Text()) + records_ingested = Column(Integer()) + note = Column(Text()) + + + def __repr__(self): + return f"EtlRun(id={self.id},started_at={self.started_at},completed_at={self.completed_at},pipeline_name={self.pipeline_name},status={self.status},records_ingested={self.records_ingested},note={self.note},)" + + + + + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" 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 new file mode 100644 index 00000000..61f06d91 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/methods_parameters_units.py @@ -0,0 +1,1029 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/people.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/people.py new file mode 100644 index 00000000..8219be89 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/people.py @@ -0,0 +1,106 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 + } diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/places.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/places.py new file mode 100644 index 00000000..4eccd8ac --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/places.py @@ -0,0 +1,106 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 + } 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 new file mode 100644 index 00000000..b1d3d70e --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/resource_information.py @@ -0,0 +1,307 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 + } 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 new file mode 100644 index 00000000..db5d6386 --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/generated/sample_preparation.py @@ -0,0 +1,1118 @@ + +from sqlalchemy import Column, Index, Table, ForeignKey +from sqlalchemy.orm import relationship +from sqlalchemy.sql.sqltypes import * +from sqlalchemy.orm import declarative_base +from sqlalchemy.ext.associationproxy import association_proxy + +Base = declarative_base() +metadata = Base.metadata + + +class BaseEntity(Base): + """ + Base entity included in all main entity tables. + """ + __tablename__ = 'base_entity' + + 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"BaseEntity(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},)" + + + + + + +class LookupBase(Base): + """ + Base class for enum/ontology-like tables. + """ + __tablename__ = 'lookup_base' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LookupBase(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + + +class Geography(Base): + """ + Geographic location. + """ + __tablename__ = 'geography' + + geoid = Column(Text(), primary_key=True, nullable=False ) + state_name = Column(Text()) + state_fips = Column(Text()) + county_name = Column(Text()) + county_fips = Column(Text()) + region_name = Column(Text()) + agg_level_desc = Column(Text()) + + + def __repr__(self): + return f"Geography(geoid={self.geoid},state_name={self.state_name},state_fips={self.state_fips},county_name={self.county_name},county_fips={self.county_fips},region_name={self.region_name},agg_level_desc={self.agg_level_desc},)" + + + + + + +class ResourceMorphology(Base): + """ + Morphology of a resource. + """ + __tablename__ = 'resource_morphology' + + id = Column(Integer(), primary_key=True, nullable=False ) + resource_id = Column(Integer()) + morphology_uri = Column(Text()) + + + def __repr__(self): + return f"ResourceMorphology(id={self.id},resource_id={self.resource_id},morphology_uri={self.morphology_uri},)" + + + + + + +class ParameterCategoryParameter(Base): + """ + Link between Parameter and ParameterCategory. + """ + __tablename__ = 'parameter_category_parameter' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + parameter_category_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterCategoryParameter(id={self.id},parameter_id={self.parameter_id},parameter_category_id={self.parameter_category_id},)" + + + + + + +class ParameterUnit(Base): + """ + Link between Parameter and Unit (alternate units). + """ + __tablename__ = 'parameter_unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + parameter_id = Column(Integer()) + alternate_unit_id = Column(Integer()) + + + def __repr__(self): + return f"ParameterUnit(id={self.id},parameter_id={self.parameter_id},alternate_unit_id={self.alternate_unit_id},)" + + + + + + +class PreparationMethod(BaseEntity): + """ + Method of sample preparation. + """ + __tablename__ = 'preparation_method' + + name = Column(Text()) + description = Column(Text()) + prep_method_abbrev_id = Column(Integer()) + prep_temp_c = Column(Numeric()) + uri = Column(Text()) + drying_step = Column(Boolean()) + 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"PreparationMethod(name={self.name},description={self.description},prep_method_abbrev_id={self.prep_method_abbrev_id},prep_temp_c={self.prep_temp_c},uri={self.uri},drying_step={self.drying_step},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 PreparationMethodAbbreviation(LookupBase): + """ + Abbreviation for preparation method. + """ + __tablename__ = 'preparation_method_abbreviation' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PreparationMethodAbbreviation(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PreparedSample(BaseEntity): + """ + Sample that has been prepared. + """ + __tablename__ = 'prepared_sample' + + name = Column(Text()) + field_sample_id = Column(Integer()) + prep_method_id = Column(Integer()) + prep_date = Column(Date()) + preparer_id = 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"PreparedSample(name={self.name},field_sample_id={self.field_sample_id},prep_method_id={self.prep_method_id},prep_date={self.prep_date},preparer_id={self.preparer_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationAddress(BaseEntity): + """ + Physical address. + """ + __tablename__ = 'location_address' + + geography_id = Column(Text()) + address_line1 = Column(Text()) + address_line2 = Column(Text()) + city = Column(Text()) + zip = Column(Text()) + lat = Column(Float()) + lon = Column(Float()) + is_anonymous = Column(Boolean()) + 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"LocationAddress(geography_id={self.geography_id},address_line1={self.address_line1},address_line2={self.address_line2},city={self.city},zip={self.zip},lat={self.lat},lon={self.lon},is_anonymous={self.is_anonymous},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 Contact(BaseEntity): + """ + Contact information for a person. + """ + __tablename__ = 'contact' + + first_name = Column(Text()) + last_name = Column(Text()) + email = Column(Text()) + affiliation = 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"Contact(first_name={self.first_name},last_name={self.last_name},email={self.email},affiliation={self.affiliation},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 Provider(BaseEntity): + """ + Provider information. + """ + __tablename__ = 'provider' + + codename = 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"Provider(codename={self.codename},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 Resource(BaseEntity): + """ + Biomass resource definition. + """ + __tablename__ = 'resource' + + name = Column(Text()) + primary_crop_id = Column(Integer()) + resource_class_id = Column(Integer()) + resource_subclass_id = 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"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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceClass(LookupBase): + """ + Classification of resources. + """ + __tablename__ = 'resource_class' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceClass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceSubclass(LookupBase): + """ + Sub-classification of resources. + """ + __tablename__ = 'resource_subclass' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ResourceSubclass(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PrimaryCrop(LookupBase): + """ + Primary crop definition. + """ + __tablename__ = 'primary_crop' + + note = Column(Text()) + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"PrimaryCrop(note={self.note},id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ResourceAvailability(BaseEntity): + """ + Availability of a resource in a location. + """ + __tablename__ = 'resource_availability' + + resource_id = Column(Integer()) + geoid = Column(Text()) + from_month = Column(Integer()) + to_month = Column(Integer()) + year_round = Column(Boolean()) + 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"ResourceAvailability(resource_id={self.resource_id},geoid={self.geoid},from_month={self.from_month},to_month={self.to_month},year_round={self.year_round},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 ResourceCounterfactual(BaseEntity): + """ + Counterfactual uses of a resource. + """ + __tablename__ = 'resource_counterfactual' + + geoid = Column(Text()) + resource_id = Column(Integer()) + counterfactual_description = Column(Text()) + animal_bedding_percent = Column(Numeric()) + animal_bedding_source_id = Column(Integer()) + animal_feed_percent = Column(Numeric()) + animal_feed_source_id = Column(Integer()) + bioelectricty_percent = Column(Numeric()) + bioelectricty_source_id = Column(Integer()) + burn_percent = Column(Numeric()) + burn_source_id = Column(Integer()) + compost_percent = Column(Numeric()) + compost_source_id = Column(Integer()) + landfill_percent = Column(Numeric()) + landfill_source_id = Column(Integer()) + counterfactual_date = Column(Date()) + 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"ResourceCounterfactual(geoid={self.geoid},resource_id={self.resource_id},counterfactual_description={self.counterfactual_description},animal_bedding_percent={self.animal_bedding_percent},animal_bedding_source_id={self.animal_bedding_source_id},animal_feed_percent={self.animal_feed_percent},animal_feed_source_id={self.animal_feed_source_id},bioelectricty_percent={self.bioelectricty_percent},bioelectricty_source_id={self.bioelectricty_source_id},burn_percent={self.burn_percent},burn_source_id={self.burn_source_id},compost_percent={self.compost_percent},compost_source_id={self.compost_source_id},landfill_percent={self.landfill_percent},landfill_source_id={self.landfill_source_id},counterfactual_date={self.counterfactual_date},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 FieldSample(BaseEntity): + """ + Sample collected from the field. + """ + __tablename__ = 'field_sample' + + name = Column(Text()) + resource_id = Column(Integer()) + provider_id = Column(Integer()) + collector_id = Column(Integer()) + sample_collection_source = Column(Text()) + amount_collected = Column(Numeric()) + amount_collected_unit_id = Column(Integer()) + sampling_location_id = Column(Integer()) + field_storage_method_id = Column(Integer()) + field_storage_duration_value = Column(Numeric()) + field_storage_duration_unit_id = Column(Integer()) + field_storage_location_id = Column(Integer()) + collection_timestamp = Column(DateTime()) + collection_method_id = Column(Integer()) + harvest_method_id = Column(Integer()) + harvest_date = Column(Date()) + field_sample_storage_location_id = 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"FieldSample(name={self.name},resource_id={self.resource_id},provider_id={self.provider_id},collector_id={self.collector_id},sample_collection_source={self.sample_collection_source},amount_collected={self.amount_collected},amount_collected_unit_id={self.amount_collected_unit_id},sampling_location_id={self.sampling_location_id},field_storage_method_id={self.field_storage_method_id},field_storage_duration_value={self.field_storage_duration_value},field_storage_duration_unit_id={self.field_storage_duration_unit_id},field_storage_location_id={self.field_storage_location_id},collection_timestamp={self.collection_timestamp},collection_method_id={self.collection_method_id},harvest_method_id={self.harvest_method_id},harvest_date={self.harvest_date},field_sample_storage_location_id={self.field_sample_storage_location_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},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class PhysicalCharacteristic(BaseEntity): + """ + Physical characteristics of a sample. + """ + __tablename__ = 'physical_characteristic' + + field_sample_id = Column(Integer()) + particle_length = Column(Numeric()) + particle_width = Column(Numeric()) + particle_height = Column(Numeric()) + particle_unit_id = Column(Integer()) + 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"PhysicalCharacteristic(field_sample_id={self.field_sample_id},particle_length={self.particle_length},particle_width={self.particle_width},particle_height={self.particle_height},particle_unit_id={self.particle_unit_id},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 FieldSampleCondition(BaseEntity): + """ + Condition of the field sample. + """ + __tablename__ = 'field_sample_condition' + + field_sample_id = Column(Integer()) + ag_treatment_id = Column(Integer()) + last_application_date = Column(Date()) + treatment_amount_per_acre = Column(Float()) + processing_method_id = Column(Integer()) + 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"FieldSampleCondition(field_sample_id={self.field_sample_id},ag_treatment_id={self.ag_treatment_id},last_application_date={self.last_application_date},treatment_amount_per_acre={self.treatment_amount_per_acre},processing_method_id={self.processing_method_id},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 FieldStorageMethod(LookupBase): + """ + Method of field storage. + """ + __tablename__ = 'field_storage_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"FieldStorageMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class CollectionMethod(LookupBase): + """ + Method of collection. + """ + __tablename__ = 'collection_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"CollectionMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class HarvestMethod(LookupBase): + """ + Method of harvest. + """ + __tablename__ = 'harvest_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"HarvestMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class ProcessingMethod(LookupBase): + """ + Method of processing. + """ + __tablename__ = 'processing_method' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ProcessingMethod(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SoilType(LookupBase): + """ + Type of soil. + """ + __tablename__ = 'soil_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SoilType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class AgTreatment(LookupBase): + """ + Agricultural treatment. + """ + __tablename__ = 'ag_treatment' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"AgTreatment(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class LocationSoilType(BaseEntity): + """ + Soil type at a location. + """ + __tablename__ = 'location_soil_type' + + location_id = Column(Integer()) + soil_type_id = Column(Integer()) + 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"LocationSoilType(location_id={self.location_id},soil_type_id={self.soil_type_id},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 DataSource(BaseEntity): + """ + Source of data. + """ + __tablename__ = 'data_source' + + name = Column(Text()) + description = Column(Text()) + data_source_type_id = Column(Integer()) + full_title = Column(Text()) + creator = Column(Text()) + subject = Column(Text()) + publisher = Column(Text()) + contributor = Column(Text()) + date = Column(DateTime()) + type = Column(Text()) + biocirv = Column(Boolean()) + format = Column(Text()) + language = Column(Text()) + relation = Column(Text()) + temporal_coverage = Column(Text()) + location_coverage_id = Column(Integer()) + rights = Column(Text()) + license = Column(Text()) + uri = Column(Text()) + 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"DataSource(name={self.name},description={self.description},data_source_type_id={self.data_source_type_id},full_title={self.full_title},creator={self.creator},subject={self.subject},publisher={self.publisher},contributor={self.contributor},date={self.date},type={self.type},biocirv={self.biocirv},format={self.format},language={self.language},relation={self.relation},temporal_coverage={self.temporal_coverage},location_coverage_id={self.location_coverage_id},rights={self.rights},license={self.license},uri={self.uri},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 FileObjectMetadata(BaseEntity): + """ + Metadata for a file object. + """ + __tablename__ = 'file_object_metadata' + + data_source_id = Column(Integer()) + bucket_path = Column(Text()) + file_format = Column(Text()) + file_size = Column(Integer()) + checksum_md5 = Column(Text()) + checksum_sha256 = 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"FileObjectMetadata(data_source_id={self.data_source_id},bucket_path={self.bucket_path},file_format={self.file_format},file_size={self.file_size},checksum_md5={self.checksum_md5},checksum_sha256={self.checksum_sha256},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 DataSourceType(BaseEntity): + """ + Type of data source (e.g. database, literature). + """ + __tablename__ = 'data_source_type' + + source_type_id = Column(Integer()) + 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"DataSourceType(source_type_id={self.source_type_id},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 LocationResolution(LookupBase): + """ + Resolution of the location (e.g. nation, state, county). + """ + __tablename__ = 'location_resolution' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"LocationResolution(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class SourceType(LookupBase): + """ + Type of source (e.g. database, literature). + """ + __tablename__ = 'source_type' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"SourceType(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Unit(LookupBase): + """ + Unit of measurement. + """ + __tablename__ = 'unit' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"Unit(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Method(BaseEntity): + """ + Analytical method. + """ + __tablename__ = 'method' + + name = Column(Text()) + method_abbrev_id = Column(Integer()) + method_category_id = Column(Integer()) + method_standard_id = Column(Integer()) + description = Column(Text()) + detection_limits = Column(Text()) + source_id = Column(Integer()) + 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"Method(name={self.name},method_abbrev_id={self.method_abbrev_id},method_category_id={self.method_category_id},method_standard_id={self.method_standard_id},description={self.description},detection_limits={self.detection_limits},source_id={self.source_id},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 MethodAbbrev(LookupBase): + """ + Abbreviation for method. + """ + __tablename__ = 'method_abbrev' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodAbbrev(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodCategory(LookupBase): + """ + Category of method. + """ + __tablename__ = 'method_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class MethodStandard(LookupBase): + """ + Standard associated with the method. + """ + __tablename__ = 'method_standard' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"MethodStandard(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } + + + +class Parameter(BaseEntity): + """ + Parameter being measured. + """ + __tablename__ = 'parameter' + + name = Column(Text()) + standard_unit_id = Column(Integer()) + calculated = Column(Boolean()) + description = 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"Parameter(name={self.name},standard_unit_id={self.standard_unit_id},calculated={self.calculated},description={self.description},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 ParameterCategory(LookupBase): + """ + Category of parameter. + """ + __tablename__ = 'parameter_category' + + id = Column(Integer(), primary_key=True, nullable=False ) + name = Column(Text()) + description = Column(Text()) + uri = Column(Text()) + + + def __repr__(self): + return f"ParameterCategory(id={self.id},name={self.name},description={self.description},uri={self.uri},)" + + + + + # Using concrete inheritance: see https://docs.sqlalchemy.org/en/14/orm/inheritance.html + __mapper_args__ = { + 'concrete': True + } diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/initial_linkML_conversion/dbdiagram_dump.md b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/initial_linkML_conversion/dbdiagram_dump.md new file mode 100644 index 00000000..4583cf2c --- /dev/null +++ b/src/ca_biositing/datamodels/ca_biositing/datamodels/schemas/initial_linkML_conversion/dbdiagram_dump.md @@ -0,0 +1,981 @@ +/////////////////////////////////////////////////////////// // BASE ENTITY +(included in all main entity tables) // id int [pk, increment] // created_at +datetime [default: `current_timestamp`] // updated_at datetime [default: +`current_timestamp`] // etl_run_id string // lineage_group_id int [ref: > +lineage_group.id] /////////////////////////////////////////////////////////// + +// LookupBase for enum/ontology-like tables // id int [pk, increment] // name +string [not null, unique] // description string // uri string +/////////////////////////////////////////////////////////// + +//===================TABLE GROUPS================== TableGroup "Resource +Information" [color: #1E69FD] { resource resource_class resource_subclass +primary_crop resource_availability resource_counterfactual resource_morphology } + +TableGroup "Field Sampling" [color: #d35400] { field_sample field_storage_method +collection_method harvest_method physical_characteristic soil_type ag_treatment +field_sample_condition processing_method location_soil_type } + +TableGroup "Places" { geography location_address } + +TableGroup "People" { provider contact } + +TableGroup "Lineage" { lineage_group entity_lineage etl_run } + +TableGroup "Data Sources & Metadata" [color: #990D0D]{ data_source +data_source_type source_type file_object_metadata location_resolution } + +TableGroup "Sample Preparation" [color:#F7AC5E] { preparation_method +preparation_method_abbreviation prepared_sample } + +TableGroup "Methods, Parameters, Units" [color: #F0B7B7]{ unit method_abbrev +method_category method_standard parameter_category method parameter +parameter_unit + +} + +TableGroup "Experiment, Equipment" [color: #CDFC9F]{ experiment +experiment_method equipment experiment_analysis experiment_equipment +experiment_prepared_sample } + +TableGroup "General Analysis" [color: #A15CF5]{ analysis_type observation +dataset dimension_type } + +TableGroup "Aim2 Records" [color: #cc0000]{ fermentation_record +gasification_record pretreatment_record autoclave_record strain } + +TableGroup "Aim1 Records" [color: #ffc84f] { proximate_record +compositional_record ultimate_record icp_record calorimetry_record xrf_record +xrd_record rgb_record ftnir_record } + +TableGroup "External Data" [color:#20b2aa] { usda_census_record //usda_commodity +//usda_commodity_to_primary_crop usda_domain usda_statistic_category +usda_survey_program usda_survey_record usda_market_record +billion_ton_2023_record landiq_record polygon //I think this is used to +essentially get all polygons in a county? + +} + +TableGroup "Infrastructure" [color:#6495ed]{ facility_record +infrastructure_biodiesel_plants infrastructure_biosolids_facilities +infrastructure_cafo_manure_locations infrastructure_ethanol_biorefineries +infrastructure_landfills infrastructure_livestock_anaerobic_digesters +infrastructure_saf_and_renewable_diesel_plants +infrastructure_wastewater_treatment_plants infrastructure_combustion_plants +infrastructure_district_energy_systems infrastructure_food_processing_facilities +infrastructure_msw_to_energy_anaerobic_digesters } + +/////////////////////////////////////////////////////////// // LINEAGE TABLES +/////////////////////////////////////////////////////////// + +Table lineage_group { id int [pk, increment] etl_run_id string [ref:> +etl_run.id] note text } + +Table entity_lineage { id int [pk, increment] lineage_group_id int [not null, +ref: > lineage_group.id] source_table string [not null] // sheet or raw table +source_row_id string [not null] // row index or key note text } + +Table etl_run { id string [pk] // UUID started_at datetime completed_at datetime +pipeline_name string status string // success/failure/partial records_ingested +int note text } + +/////////////////////////////////////////////////////////// // RESOURCE +/////////////////////////////////////////////////////////// + +Table resource { // BaseEntity id int [pk, increment] created_at datetime +[default: `current_timestamp`] updated_at datetime [default: +`current_timestamp`] etl_run_id string lineage_group_id int [ref: > +lineage_group.id] + +// Domain fields name string [not null, unique] primary_crop_id int [not null, +ref: > primary_crop.id] resource_class_id int [not null, ref: > +resource_class.id] resource_subclass_id int [ref: > resource_subclass.id] note +text } + +Table resource_class { // LookupBase id int [pk, increment] name string [not +null, unique] description string uri string } + +Table resource_subclass { // LookupBase id int [pk, increment] name string [not +null, unique] description string uri string } + +/////////////////////////////////////////////////////////// // PRIMARY CROP +/////////////////////////////////////////////////////////// + +Table primary_crop { // LookupBase (+ ontology) id int [pk, increment] name +string [not null, unique] description string uri string note text } + +/////////////////////////////////////////////////////////// // RESOURCE +AVAILABILITY /////////////////////////////////////////////////////////// + +Table resource_availability { // BaseEntity id int [pk, increment] created_at +datetime [default: `current_timestamp`] updated_at datetime [default: +`current_timestamp`] etl_run_id string lineage_group_id int [ref: > +lineage_group.id] + +// Domain fields resource_id int [not null, ref: > resource.id] geoid string +[not null, ref: > geography.geoid] + +from_month int to_month int year_round boolean note text } + +/////////////////////////////////////////////////////////// // RESOURCE +COUNTERFACTUAL /////////////////////////////////////////////////////////// + +Table resource_counterfactual { // BaseEntity id int [pk, increment] created_at +datetime [default: `current_timestamp`] updated_at datetime [default: +`current_timestamp`] etl_run_id string lineage_group_id int [ref: > +lineage_group.id] // Domain fields geoid string [not null, ref: > +geography.geoid] //location resource_id int [not null, ref: > resource.id] +counterfactual_description text //animal is too broad. Want just livestock and +poultry animal_bedding_percent decimal animal_bedding_source_id int [ref:> +data_source.id] animal_feed_percent decimal animal_feed_source_id int [ref:> +data_source.id] bioelectricty_percent decimal bioelectricty_source_id int [ref:> +data_source.id] burn_percent decimal burn_source_id int [ref:> data_source.id] +compost_percent decimal compost_source_id int [ref:> data_source.id] +landfill_percent decimal landfill_source_id int [ref:> data_source.id] +counterfactual_date date //contained in source. Set a base year as a disclaimer +//scenario identifier note text } + +/////////////////////////////////////////////////////////// // RESOURCE +MORPHOLOGY (many-to-many) +/////////////////////////////////////////////////////////// + +//'Check morphology ontology with Andrea' Table resource_morphology { id int +[pk, increment] resource_id int [not null, ref: > resource.id] morphology_uri +string [not null] // ontology URI for plant part (stem, shell, leaf…) } + +/////////////////////////////////////////////////////////// // GEOGRAPHY / +PLACES /////////////////////////////////////////////////////////// + +Table geography { geoid string [pk] state_name string state_fips string +county_name string county_fips string region_name string agg_level_desc string } + +Table location_address { id int [pk, increment] geography_id string [ref: > +geography.geoid] address_line1 string address_line2 string city string zip +string lat float lon float is_anonymous boolean } + +/////////////////////////////////////////////////////////// // NOTES +/////////////////////////////////////////////////////////// + +///////////////////////////////////////////////////////// // FIELD SAMPLES TABLE +GROUP //////////////////////////////////////////////////////// + +Table field_sample [headercolor: #d35400] { //Base entity id int [pk, increment] +created_at datetime [default: `current_timestamp`] updated_at datetime [default: +`current_timestamp`] etl_run_id string lineage_group_id int [ref: > +lineage_group.id] //Domain Specific name string [not null, note: "e.g., +Ene-WaHu018"] //Should link perfectly to Gsheet sample name resource_id integer +[not null, ref: > resource.id] provider_id integer [ref: > provider.id] // needs +to be anon //add this! collector_id integer [ref: > contact.id] +sample_collection_source text //this is kind of free for all in the sample +metadata gsheet amount_collected decimal //consider making not null +amount_collected_unit_id integer [ref:> unit.id] //consider making not null +//source_codename_id integer [note: "Anonymized source identifier"] //not sure +what to do with this? Should we keep? sampling_location_id integer [not null, +ref: > location_address.id] // needs to be anon. May be null if from external +sources //I think we can do this via permissions in the database itself... +field_storage_method_id integer [ref: > field_storage_method.id] +field_storage_duration_value decimal field_storage_duration_unit_id integer +[ref:> unit.id] field_storage_location_id integer [ref:> location_address.id] // +nullable; may be same as sampling_location_id collection_timestamp timestamp +collection_method_id integer [ref: > collection_method.id] harvest_method_id +integer [ref: > harvest_method.id] harvest_date date //soil_type_id integer +[ref:> soil_type.id] //I am not sure I like this here. Maybe morve to +field_sample_condition? field_sample_storage_location_id integer [ref:> +location_address.id] //Used to describe where the sample is now note text + +indexes { resource_id //will we use this often enough to index? +//source_codename_id } } + +Table field_storage_method [headercolor: #d35400]{ // LookupBase for +enum/ontology-like tables id int [pk, increment] name string [not null, unique] +description string uri string } + +Table collection_method [headercolor: #d35400]{ // LookupBase for +enum/ontology-like tables id int [pk, increment] name string [not null, unique] +description string uri string } + +Table harvest_method [headercolor: #d35400]{ // LookupBase for +enum/ontology-like tables id int [pk, increment] name string [not null, unique] +description string uri string } + +Table processing_method [headercolor: #d35400]{ // LookupBase for +enum/ontology-like tables id int [pk, increment] name string [not null, unique] +description string uri string } + +//consider moving this to the analysis table group Table physical_characteristic +[headercolor: #d35400]{ //Base entity id int [pk, increment] created_at datetime +[default: `current_timestamp`] updated_at datetime [default: +`current_timestamp`] etl_run_id string lineage_group_id int [ref: > +lineage_group.id] // field_sample_id integer [not null, ref: > field_sample.id] +particle_length decimal particle_width decimal particle_height decimal +particle_unit_id integer [ref:> unit.id] //Could add index in here } + +Table soil_type [headercolor: #d35400] { // LookupBase for enum/ontology-like +tables id int [pk, increment] name string [not null, unique] description string +uri string //soil_location integer [ref: > geography.id] //not sure if this +should be in a different "Base" table } + +Table ag_treatment [headercolor: #d35400] { // LookupBase for enum/ontology-like +tables id int [pk, increment] name string [not null, unique] description string +uri string } + +Table field_sample_condition [headercolor: #d35400] { //Would like to find a +better name for this table, or maybe break it apart //Base entity id int [pk, +increment] created_at datetime [default: `current_timestamp`] updated_at +datetime [default: `current_timestamp`] etl_run_id string lineage_group_id int +[ref: > lineage_group.id] // field_sample_id int [not null, ref:> +field_sample.id] ag_treatment_id int [not null, ref:> ag_treatment.id] +last_application_date date [note: "if applicable"] treatment_amount_per_acre +float processing_method_id int [ref:> processing_method.id] } + +Table location_soil_type [headercolor: #d35400] { //Base entity id int [pk, +increment] created_at datetime [default: `current_timestamp`] updated_at +datetime [default: `current_timestamp`] etl_run_id string lineage_group_id int +[ref: > lineage_group.id] //Domain specific location_id int [not null, ref:> +location_address.id] soil_type_id int [not null, ref:> soil_type.id] } + +///////////////////////////////////////////////////////// ///////// UNITS +//////////////// //////////////////////////////////////////////////////// + +Table unit { id int [pk, increment] name string [not null, unique] // e.g., +"cm", "kg", "m3" description string //can be longform like centimeter, +kilograms, cubic meters uri url } + +//////////////////////////////////////////////////////// ///////SAMPLE +PREPARATION///////////// +//////////////////////////////////////////////////////// + +Table preparation_method [headercolor: #F7AC5E] { //Base entity id int [pk, +increment] created_at datetime [default: `current_timestamp`] updated_at +datetime [default: `current_timestamp`] etl_run_id string lineage_group_id int +[ref: > lineage_group.id] // name string [note: "As Is, Knife Mill (2mm), Oven +Dry"] description text prep_method_abbrev_id integer [ref:- +preparation_method_abbreviation.id] prep_temp_c decimal //I feel like this +should just be in the method right? uri string //ideally a protocols.io linked +DOI drying_step boolean //I think this should also just be in the method +//method_ref_id integer //[ref: > references.reference_id] } + +Table preparation_method_abbreviation [headercolor: #F7AC5E] { // LookupBase for +enum/ontology-like tables id int [pk, increment] name string [not null, unique] +description string uri string } + +Table prepared_sample [headercolor: #f7ac5e] { //Base entity id int [pk, +increment] created_at datetime [default: `current_timestamp`] updated_at +datetime [default: `current_timestamp`] etl_run_id string lineage_group_id int +[ref: > lineage_group.id] // name string // this should correspond with +prepro_material_name in Gsheets. field_sample_id integer [not null, ref:- +field_sample.id] prep_method_id integer [not null, ref:- preparation_method.id] +//amount_before_drying decimal //amount_after_drying decimal prep_date date +//storage_location_id integer [ref: > location_address.id] //We may want this to +be location with a room. Need to ask James how specific the storage location is +for the samples cus in th Gsheets it is only the building //amount_remaining +decimal //amount_remaining_unit_id integer [ref:> unit.id] //amount_as_of_date +date preparer_id integer //[ref: > analysts_contact.analyst_id] note text + +indexes { field_sample_id prep_method_id } + +} + +//////////////////////////////////////////////////////// ///////DATA SOURCES AND +METADATA///////////// //////////////////////////////////////////////////////// + +Table data_source [headercolor: #990D0D] { //Base entity id int [pk, increment] +created_at datetime [default: `current_timestamp`] updated_at datetime [default: +`current_timestamp`] etl_run_id string lineage_group_id int [ref: > +lineage_group.id] // name string [not null] //a short english identifier for the +source, such as the in-text citation (e.g. "Smith 2019" "BT23" "ForageOne") +description text //purpose of the data maybe. Unabbreviated names +data_source_type_id int [not null, ref:- data_source_type.id] // Foreign key +referenceing source_types full_title string [not null] creator string subject +string publisher string contributor string date datetime type string [not null] +biocirv boolean // e.g. "External data" = FALSE, "Internal data" = TRUE format +string language string relation string temporal_coverage daterange //The spatial +or temporal topic of the resource. location_coverage int [ref:> +location_resolution.id] rights string uri string [not null] } + +Table data_source_type [headercolor: #990D0D] { //Base entity id int [pk, +increment] created_at datetime [default: `current_timestamp`] updated_at +datetime [default: `current_timestamp`] etl_run_id string lineage_group_id int +[ref: > lineage_group.id] // source_type_id int [ref: > source_type.id] } + +Table location_resolution [headercolor: #990D0D] { //nation, state, county, +region, etc // LookupBase for enum/ontology-like tables id int [pk, increment] +name string [not null, unique] //database, literature, internal, etc description +string uri string } + +Table source_type [headercolor: #990D0D]{ // LookupBase for enum/ontology-like +tables id int [pk, increment] name string [not null, unique] //database, +literature, industry report, government report, etc description string uri +string } + +Table file_object_metadata [headercolor: #990D0D] { //Base entity id int [pk, +increment] created_at datetime [default: `current_timestamp`] updated_at +datetime [default: `current_timestamp`] etl_run_id string lineage_group_id int +[ref: > lineage_group.id] // data_source_id int [ref: > data_source.id] +bucket_path string file_format string file_size int checksum_md5 string +checksum_sha256 string } + +//THIS IS FOR LATER WHEN WE DO ANALYSIS RESULTS //analysis_result_file_object { +// analysis_result_id int [ref: > analysis_result.id] // file_object_id int +[ref: > file_object.id] // primary key (analysis_result_id, file_object_id) //} + +///////////////////////// ////// METHODS, PARAMETERS, UNITS +///////////////////////// + +Table method [headercolor: #F0B7B7] { //Base entity id int [pk, increment] +created_at datetime [default: `current_timestamp`] updated_at datetime [default: +`current_timestamp`] etl_run_id string lineage_group_id int [ref: > +lineage_group.id] //Domain fields name string [unique] method_abbrev_id int +[ref: > method_abbrev.id] // Foreign key referencing method_abbrevs +method_category_id int [ref: > method_category.id] // Foreign key referencing +method_categories method_standard_id int [ref: > method_standard.id] // Foreign +key referencing method_standards description text detection_limits text //maybe +make this substantial in the future source_id int [ref: > data_source.id] +//protocols.io + +indexes { name } } + +Table method_abbrev [headercolor: #F0B7B7] { // LookupBase for +enum/ontology-like tables id int [pk, increment] name string [not null, unique] +// e.g. ICP, Ult description string uri string } + +Table method_category [headercolor: #F0B7B7] { //still need to better define +what this would be... // LookupBase for enum/ontology-like tables id int [pk, +increment] name string [not null, unique] //"ICP method, CompAna method, dry, +wet" description string uri string } + +Table method_standard [headercolor: #F0B7B7] { // LookupBase for +enum/ontology-like tables id int [pk, increment] name string [not null, unique] +// Standard associated with the method (e.g., AOAC 997.02, TAPPI T203) +description string uri string } + +Table parameter [headercolor:#F0B7B7] { //Base entity id int [pk, increment] +created_at datetime [default: `current_timestamp`] updated_at datetime [default: +`current_timestamp`] etl_run_id string lineage_group_id int [ref: > +lineage_group.id] // name string [not null, unique] //parameter_category_id +integer [ref: > parameter_catagory.id] //"Fermentation, Minerals, Elements, +Compositional Analysis, etc" standard_unit_id integer [ref : > unit.id] +//Expected unit of a result. Is this the right way to do this? Should we use a +different //table to facilitate the identification and coercing of mismathed +units across internal and external datasets? //alternate_units text [note: "JSON +array of alternative units"] //I think I have eled this in the parameter_units +bridge table calculated boolean [note:"if not calculated then it is measured +directly. E.g glucose vs glucan"] description text //typical_range_min decimal +//typical_range_max decimal } + +Table parameter_catagory_parameter [headercolor: #F0B7B7] { id int [pk, +increment] parameter_id int [not null, ref: > parameter.id] +parameter_catagory_id int [not null, ref: > parameter_category.id] } + +Table parameter_category [headercolor: #F0B7B7] { //need to better define // +LookupBase for enum/ontology-like tables id int [pk, increment] name string [not +null, unique] //[note: "Fermentation, Minerals, Elements, Compositional +Analysis, etc"] description string uri string } + +Table parameter_unit [headercolor: #F0B7B7] { id integer [pk] parameter_id +integer [ref: > parameter.id] //contains the standard unit alternate_unit_id +integer [not null, ref:> unit.id] } + +Ref: "experiment_prepared_sample"."id" < +"experiment_prepared_sample"."prepared_sample_id" + +///////////////////////// ////// Experiments, Equipment +///////////////////////// + +Table experiment { id int [pk, increment] // Primary key created_at datetime +[default: `current_timestamp`] // When this row was created updated_at datetime +[default: `current_timestamp`] // Last updated timestamp + +// ETL tracking / provenance etl_run_id string [note: "ETL process that +generated this experiment row"] lineage_group_id int [ref: > lineage_group.id, +note: "Links to original source data (sheet, row, file, etc.)"] + +// Domain-specific fields analyst_id int [note: "Person responsible for +experiment"] exper_start_date date [note: "Date the experiment started"] +exper_duration decimal [note: "Duration of experiment"] exper_duration_unit_id +int [ref: > unit.id, note: "Unit for exper_duration, e.g., days, hours"] +exper_location_id int [ref: > location_address.id, note: "Where the experiment +was performed"] description text [note: "Optional notes or description of the +experiment"] } + +Table equipment [headercolor: #CDFC9F]{ // LookupBase for enum/ontology-like +tables id int [pk, increment] name string [not null, unique] // description +string uri string // equipment_location_id integer [ref: > location_address.id] +//from room can access building, affiliation, address, etc } + +Table experiment_equipment [headercolor: #CDFC9F]{ id int [pk] experiment_id int +[not null, ref: > experiment.id] equipment_id int [not null, ref: > +equipment.id] } + +Table experiment_analysis [headercolor: #CDFC9F] { id int [pk, increment] +experiment_id int [ref:> experiment.id] analysis_type_id int [ref:> +analysis_type.id] } + +Table experiment_prepared_sample [headercolor: #CDFC9F] { id int [pk, increment] +experiment_id int [ref:> experiment.id] prepared_sample_id int [ref:> +prepared_sample.id] } + +Table experiment_method [headercolor: #CDFC9F] { id int [pk] experiment_id int +[ref: > experiment.id] method_id int [ref: > method.id] + +indexes { method_id experiment_id } } //====================================== +// DATASET TABLE //====================================== + +//A dataset is defined by a publisher and the time //period over which it took +observations which are grouped //but non-redundant. //so that methodology and +observation space is the same.? + +//Ex: LandIQ is a record_type but there are multiple years of //LandIQ data so +record_type is insufficient to differentiate //a polygon from 2020 and 2022. + +//Ex. Phyllis2 is a publisher, but it releases data in sections //based on +analysis type so we will import "Phyllis 2 Proximate //analysis" "Phyllis 2 +Ultimate Analysis" as datasets. //What is the problem though just have Phyllis2 +as a dataset that //is an aggregation of those datasets? + +//Ex: BioCirV is a publisher that takes data across a timeframe. //Should we +differentiate Aim1 and Aim2? I vote no. + +Table dataset { id int [pk, increment] name string // Human-readable dataset +name record_type string [note: "Determines which child record table rows belong +to this dataset"] // e.g. "ultimate_record", "compositional_record" +//experiment_id int [ref: > experiment.id, note: "Nullable; only applies for +lab-produced datasets"] source_id int [ref:> data_source.id] start_date date +end_date date description text } + +//=========================================================== // OBSERVATION +TABLE (parameter/value pairs) +//=========================================================== + +Table observation { id int [pk, increment] dataset_id int [ref: > dataset.id] + +// Polymorphic link to child record table record_type string [note: "ENUM of +child record tables"] record_id int [note: "Points to ID in table defined by +record_type"] + +parameter_id int [ref: > parameter.id] value decimal unit_id int [ref: > +unit.id] + +// Optional dimensions (e.g., timepoint for timeseries data, wavelength, +replicate time) dimension_type_id int [ref: > dimension_type.id] dimension_value +decimal dimension_unit_id int [ref: > unit.id] + +//observation_source_id int [ref: > data_source.id] note text + +indexes { (dataset_id, record_id, parameter_id) } } + +//=========================================================== // CHILD RECORD +TABLES – ANALYTICAL DATA +//=========================================================== + +//A record is the surrounding information needed to understand an observation. +//Record tables give context for the parameter + value + unit //from the +observation table. They explain which data groupings (samples, experiments, +//and datasets) that these observations belong to. + +//A technical replicate is defined by a sample and a given experiment +//(analyst, on a day, at a time, on a machine) + +//A sample replicate is defined by a sample and an analytical method + +////////////////////////////////////////////////// ////// INTERNAL RECORD BASE +CLASS///////////////// ////////////////////////////////////////////////// + +//id int [pk, increment] //dataset_id int [ref: > dataset.id] //experiment_id +int [ref: > experiment.id] //resource_id int [ref:> resource.id] //sample_id int +[ref: > prepared_sample.id] //technical_replicate_no int //which replicate this +record represents //technical_replicate_total int //total number of replicates +for a sample //method_id int [ref: > method.id] //we suspect this will be +captured in the experiment_id //raw_data_id int [ref:> file_object_metadata.id] +//qc_pass boolean //note text + +////////////////////////////////////////////////// + +Table proximate_record { id int [pk, increment] dataset_id int [ref: > +dataset.id] experiment_id int [ref: > experiment.id] resource_id int [ref:> +resource.id] sample_id int [ref: > prepared_sample.id] technical_replicate_no +int //which replicate this record represents technical_replicate_total int +//total number of replicates for a sample method_id int [ref: > method.id] //we +suspect this will be captured in the experiment_id //equipment_id int [ref: > +equipment.id] //we suspect this will be captured in the experiment_id +//analyst_id int [ref: > contact.id] //we suspect this will be captured in the +experiment_id raw_data_id int [ref:> file_object_metadata.id] qc_pass boolean +note text } + +Table ultimate_record { id int [pk, increment] dataset_id int [ref: > +dataset.id] experiment_id int [ref: > experiment.id] resource_id int [ref:> +resource.id] sample_id int [ref: > prepared_sample.id] technical_replicate_no +int //which replicate this record represents technical_replicate_total int +//total number of replicates for a sample method_id int [ref: > method.id] +//equipment_id int [ref: > equipment.id] //analyst_id int [ref: > contact.id] +raw_data_id int [ref:> file_object_metadata.id] qc_pass boolean note text } + +Table compositional_record { id int [pk, increment] dataset_id int [ref: > +dataset.id] experiment_id int [ref: > experiment.id] resource_id int [ref:> +resource.id] sample_id int [ref: > prepared_sample.id] technical_replicate_no +int //which replicate this record represents technical_replicate_total int +//total number of replicates for a sample method_id int [ref: > method.id] +//equipment_id int [ref: > equipment.id] //analyst_id int [ref: > contact.id] +raw_data_id int [ref:> file_object_metadata.id] qc_pass boolean note text } + +Table icp_record { id int [pk, increment] dataset_id int [ref: > dataset.id] +experiment_id int [ref: > experiment.id] resource_id int [ref:> resource.id] +sample_id int [ref: > prepared_sample.id] technical_replicate_no int //which +replicate this record represents technical_replicate_total int //total number of +replicates for a sample method_id int [ref: > method.id] //equipment_id int +[ref: > equipment.id] //analyst_id int [ref: > contact.id] raw_data_id int +[ref:> file_object_metadata.id] qc_pass boolean note text } + +Table xrf_record { id int [pk, increment] dataset_id int [ref: > dataset.id] +experiment_id int [ref: > experiment.id] resource_id int [ref:> resource.id] +sample_id int [ref: > prepared_sample.id] technical_replicate_no int //which +replicate this record represents technical_replicate_total int //total number of +replicates for a sample method_id int [ref: > method.id] maybe_wavelength_nm +decimal ////might be in the method maybe_intensity decimal //might be in the +method maybe_energy_slope decimal //might be in the method maybe_energy_offset +decimal //might be in the method //equipment_id int [ref: > equipment.id] +//analyst_id int [ref: > contact.id] raw_data_id int [ref:> +file_object_metadata.id] qc_pass boolean note text } + +Table xrd_record { id int [pk, increment] dataset_id int [ref: > dataset.id] +experiment_id int [ref: > experiment.id] resource_id int [ref:> resource.id] +sample_id int [ref: > prepared_sample.id] technical_replicate_no int //which +replicate this record represents technical_replicate_total int //total number of +replicates for a sample maybe_scan_low_nm int ////might be in the method +maybe_scan_high_nm int ////might be in the method method_id int [ref: > +method.id] //equipment_id int [ref: > equipment.id] //analyst_id int [ref: > +contact.id] raw_data_id int [ref:> file_object_metadata.id] qc_pass boolean note +text } + +Table calorimetry_record { id int [pk, increment] dataset_id int [ref: > +dataset.id] experiment_id int [ref: > experiment.id] resource_id int [ref:> +resource.id] sample_id int [ref: > prepared_sample.id] technical_replicate_no +int //which replicate this record represents technical_replicate_total int +//total number of replicates for a sample method_id int [ref: > method.id] +//equipment_id int [ref: > equipment.id] //analyst_id int [ref: > contact.id] +raw_data_id int [ref:> file_object_metadata.id] qc_pass boolean note text } + +Table ftnir_record { id int [pk, increment] dataset_id int [ref: > dataset.id] +experiment_id int [ref: > experiment.id] resource_id int [ref:> resource.id] +sample_id int [ref: > prepared_sample.id] technical_replicate_no int //which +replicate this record represents technical_replicate_total int //total number of +replicates for a sample method_id int [ref: > method.id] //equipment_id int +[ref: > equipment.id] //analyst_id int [ref: > contact.id] raw_data_id int +[ref:> file_object_metadata.id] qc_pass boolean note text } + +Table rgb_record { id int [pk, increment] dataset_id int [ref: > dataset.id] +experiment_id int [ref: > experiment.id] resource_id int [ref:> resource.id] +sample_id int [ref: > prepared_sample.id] technical_replicate_no int //which +replicate this record represents technical_replicate_total int //total number of +replicates for a sample method_id int [ref: > method.id] //equipment_id int +[ref: > equipment.id] //analyst_id int [ref: > contact.id] raw_data_id int +[ref:> file_object_metadata.id] qc_pass boolean note text } + +///////////////////////////////////// ////// AIM2 EXPERIMENTAL DATA +///////////////////////////////////// + +Table pretreatment_record { id int [pk, increment] dataset_id int [ref: > +dataset.id] experiment_id int [ref: > experiment.id] resource_id int [ref:> +resource.id] sample_id int [ref: > prepared_sample.id] pretreatment_method int +[ref:> method.id] eh_method_id int [ref:> method.id] reaction_block_id int +block_position varchar temperature decimal replicate_no int analyst_id int +[ref:> contact.id] qc_pass boolean note text } + +Table fermentation_record { id int [pk, increment] dataset_id int [ref: > +dataset.id] experiment_id int [ref: > experiment.id] resource_id int [ref: > +resource.id] //this is denormalized, but maybe necessary for external data +sample_id int [ref: > prepared_sample.id] strain_id int [ref:> strain.id] +pretreatement_method_id int [ref:> method.id] //decon method in gsheet +eh_method_id int [ref:> method.id] //enzymatic hydrolysis method replicate_no +int well_position varchar temperature decimal //ph decimal //Is this at the +beginning? End? agitation_rpm decimal vessel_id int [ref:> equipment.id] +analyte_detection_equipment_id int [ref:> equipment.id] analyst_id int [ref: > +contact.id] raw_data_id int [ref:> file_object_metadata.id] qc_pass boolean note +text } + +Table gasification_record { id int [pk, increment] dataset_id int [ref: > +dataset.id] experiment_id int [ref: > experiment.id] resource_id int [ref: > +resource.id] //this is denormalized, but maybe necessary for external data +sample_id int [ref:> prepared_sample.id] feedstock_mass decimal bed_temperature +decimal gas_flow_rate decimal technical_replicate_no int analyst_id int [ref: > +contact.id] raw_data_id int [ref:> file_object_metadata.id] qc_pass boolean note +text } + +Table autoclave_record { id int [pk, increment] dataset_id int [ref:> +dataset.id] experiment_id int [ref:> experiment.id] resource_id int [ref:> +resource.id] sample_id int [ref:> prepared_sample.id] technical_replicate_no int +analyst_id int [ref: > contact.id] raw_data_id int [ref:> +file_object_metadata.id] qc_pass boolean note text } + +//=========================================================== // CHILD RECORD +TABLES – USDA DATA //=========================================================== + +//I want to create a base "usda_record" class that will be used for both +usda_census and usda_survey //records. I would also like to explore the class +also being applicable to usda_market type records, //although these are much +more different. + +Table usda_census_record [headercolor: #ffc72f] { id int [pk, increment] +dataset_id int [ref: > dataset.id] geoid int [ref:> geography.geoid] +commodity_code int [ref: > usda_commodity.id] year int source_reference string +// this may be the same as any other source attribute note text } + +Table usda_survey_record [headercolor: #ffc72f] { id int [pk, increment] +dataset_id int [ref: > dataset.id] geoid int [ref:> geography.geoid] +commodity_code int [ref: > usda_commodity.id] year int survey_program_id int +[ref: > usda_survey_program.id] survey_period string reference_month string +seasonal_flag boolean note text } + +//=========================================================== // CHILD RECORD +TABLE – USDA MARKET NEWS +//=========================================================== + +Table usda_market_report [headercolor: #ffc72f]{ id int [pk, increment] + +// IDENTIFIERS slug_id int [not null, note: "The constant MARS ID, e.g., 3667. +Defines the 'Series'."] slug_name string report_series_title string //e.g. +"Feedstuffs Report" + +// FREQUENCY & ORIGIN frequency string // e.g., "Monthly", "Weekly" office_name +varchar office_city_id int [ref:> location_address.id] office_state_fips varchar +[ref:> geography.geoid] source int [ref : - data_source.id] //might be +unnecessary since data can be looked up by slug_id and data in this table + +// Note: Splitting this table is NORMALIZATION. // It prevents repeating +'Monthly Feedstuffs Report' 10,000 times. } + +Table usda_market_record [headercolor: #ffc72f] { id int [pk, increment] +report_id int [not null, ref: > usda_market_report.id] dataset_id int [ref:> +dataset.id] //office_name varchar //office_city_id int [ref:> +location_address.id] //office_state_fips varchar [ref:> geography.geoid] +report_begin_date datetime //This report refers to the report_end_date datetime +report_date datetime //not sure how this differs from the other dates, but it is +earlier... //published_date datetime commodity_id int [not null, ref: > +usda_commodity.id] //primary_crop_id int [not null, ref:> primary_crop.id] +//assumes we can control what USDA market data we input and import only data for +primary crops in our database. otherwise the "not null" designation may present +issue market_type_id int //[ref:> market_type.id] market_type_catagory varchar +//this could be normalized, but it is all just "summary" in the example data +//slug_id int //slug_name string //report_title string grp string +market_catagory_id int // [ref;> market_catagory.id] class string grade string +variety string protein_pct decimal application string pkg string // sale_type +string //"FOB" (Free on Board - buyer pays shipping) or "Delivered" (seller pays +shipping) price_unit_id int [ref:> unit.id] //price_min decimal //these all go +into the parameter unit observation table //price_max decimal //price_min_change +decimal //price_min_direction varchar //price_max_change decimal +//price_max_direction decimal //avg_price decimal //avg_price_year_ago decimal +freight string trans_mode string } + +//=========================================================== // CHILD RECORD +TABLE – LAND IQ //=========================================================== + +//I think I may want to create a base "polygon" or "geometry" record type //for +geospatial records. Please log this and flag for discussion later. + +Table landiq_record [headercolor: #808080] { id int [pk, increment] dataset_id +int [ref: > dataset.id] polygon_id int [ref: > polygon.id] main_crop int [ref: > +primary_crop.id] secondary_crop int [ref: > primary_crop.id] tertiary_crop int +[ref: > primary_crop.id] quaternary_crop int [ref: > primary_crop.id] confidence +int irrigated boolean acres float version string note text } + +//=========================================================== // CHILD RECORD +TABLE – FACILITY/INFRASTRUCTURE DATA +//=========================================================== + +Table facility_record { id int [pk, increment] dataset_id int [ref: > +dataset.id] facility_name string location_id int [ref: > location_address.id] +capacity_mw decimal resource_id int [ref:> resource.id] //could have multiple +resources per facility. For example almond shells and hulls. operator string +start_year int note text } + +//INFRASTRUCTURE RECORD SET PLACEHOLDER. + +//These records are for now to be simply modeled as + +//==================== TABLE GROUP ========================= +//==================== INFRASTRUCTURE INDUSTRIAL DATASETS +========================= + +Table infrastructure_biodiesel_plants [headercolor: #008B8B] { // two joined +datasets biodiesel_plant_id integer [pk] company varchar bbi_index integer // +blank for some companies city varchar state char(2) [note: "convert to state +abbreviation"] // some rows have whole names written out; reduce to +abbreviations capacity_mmg_per_y integer // should it be integer? feedstock +varchar [note: "multiselect"] // blank for some companies status varchar [note: +"select ; options listed are either 'operational' or 'idle'"] // blank for some +companies address varchar // blank for some companies coordinates varchar [note: +"currently string, convert to geometric point"] // blank for some companies +latitude decimal longitude decimal source text [note: "change to url later"] } + +Table infrastructure_biosolids_facilities [headercolor: #008B8B] { // lots of +mixed all-caps and proper formatting biosolid_facility_id integer [pk] +report_submitted_date date // one row says "06-Kan-24" - correct typo and +convert to date latitude decimal longitude decimal facility varchar authority +varchar plant_type varchar [note: "multiselect"] aqmd varchar // some blank +entries. could also make multiselect if we had a unified format? e.g. "feather +river" and "feather river aqmd" is the same facility_address varchar // some +blank facility_city varchar // some blank state varchar(2) facility_zip varchar +// some blank facility_county varchar // some blank (make multiselect?) +mailing_street_1 varchar // some blank mailing_city varchar // some blank (make +multiselect?) mailing_state varchar(2) // some blank? mailing_zip varchar +biosolids_number varchar // add custom check alter - should be CALX###### +biosolids_contact varchar biosolids_contact_phone varchar // convert to single +custom format biosolids_contact_email varchar // convert to single custom format +adwf decimal potw_biosolids_generated integer twtds_biosolids_treated integer // +very blank class_b_land_app integer // very blank class_b_applier varchar // +very blank class_a_compost integer // very blank class_a_heat_dried integer // +very blank class_a_other integer // very blank class_a_other_applier varchar // +very blank twtds_transfer_to_second_preparer int // very blank +twtds_second_preparer_name varchar [note: "sometimes multiple preparers are +reported along with respective amt of biosolids transferred"] adc_or_final_c +integer // very blank landfill integer landfill_name varchar // very blank +surface_disposal integer // VERY blank deepwell_injection varchar //I don't even +know what is this stored integer // has some random varchar content in there +longterm_treatment integer // very blank other integer // very blank +name_of_other varchar incineration integer Note: "probably could change to a +long format? a lot of blank fields and random columns near the bottom" } + +Table infrastructure_cafo_manure_locations [headercolor: #008B8B] { +cafo_manure_id integer [pk] latitude decimal longitude decimal owner_name +varchar // very blank facility_name varchar address varchar town varchar state +varchar(2) zip varchar(5) animal varchar [note: "select"] +animal_feed_operation_type varchar [note:"select"] animal_units integer // +partially blank animal_count integer // partially blank; also some of them end +with 333, 667, or 000? are these calculations? manure_total_solids decimal +[note: "million gallons a year"] source text [note: "change to url later"] +date_accessed date } + +Table infrastructure_ethanol_biorefineries [headercolor: #008B8B] { +ethanol_biorefinery_id integer [pk] name varchar city varchar state varchar(2) +address varchar type varchar [note: "multiselect"] capacity_mgy integer +production_mgy integer constr_exp integer // don't know what this is } + +Table infrastructure_landfills [headercolor: #008B8B] { project_int_id integer +project_id varchar [pk] ghgrp_id varchar landfill_id integer landfill_name +varchar state varchar(2) physical_address text city varchar county varchar +zip_code varchar latitude decimal longitude decimal ownership_type varchar +[note: "select, either Public or Private"] landfill_owner_orgs varchar +landfill_opened_year date [note: "year only; should it be int or date?"] +landfill_closure_year date [note: "year only; should it be int or date?"] +landfill_status varchar [note: "select"] waste_in_place integer [note: "in +tons"] waste_in_place_year date [note: "assuming year collected?"] +lfg_system_in_place boolean [note: "currently yes/no"] lfg_collected decimal +[note: "in mmscfd"] lfg_flared decimal [note: "in mmscfd"] project_status +varchar [note: "select"] project_name varchar [note: "select?"] +project_start_date date project_shutdown_date date // very empty +project_type_category varchar [note: "select"] lfg_energy_project_type varchar +[note: "select"] rng_delivery_method varchar actual_mw_generation decimal +rated_mw_capacity decimal lfg_flow_to_project decimal [note: "mmscfd"] +direct_emission_reductions decimal [note: "MMTCO2e/yr for current year"] +avoided_emission_reductions decimal [note: "MMTCO2e/yr for current year"] } + +Table infrastructure_livestock_anaerobic_digesters [headercolor: #008B8B] { +digester_id integer [pk] project_name varchar project_type varchar [note: +"select or multiselect"] city varchar state varchar(2) digester_type varchar +[note: "select or multiselect"] profile text [note: "url"] year_operational date +[note: "year only"] animal_type_class varchar [note: "select"] animal_types +varchar [note: "multiselect"] pop_feeding_digester varchar [note: "either single +integer or multiple integers separated by a semicolon"] // is this even +necessary? total_pop_feeding_digester integer cattle integer dairy integer +poultry integer swine integer codigestion varchar [note: "multiselect"] +biogas_generation_estimate integer [note: "cu/ft per day"] electricity_generated +integer [note: "kWh/yr"] biogas_end_uses varchar [note: "multiselect"] +methane_emission_reductions integer [note: "metric tons CO2e/yr"] latitude +decimal longitude decimal } + +Table infrastructure_saf_and_renewable_diesel_plants [headercolor: #008B8B] { +ibcc_index integer [pk] company varchar city varchar state varchar(2) country +varchar capacity varchar [note: "mmg per yr; mostly integers with some strings +in the format '#/#' where # is a number"] feedstock varchar [note: +"multiselect"] products varchar [note: "multiselect"] status varchar [note: +"multiselect"] address text coordinates text latitude decimal longitude decimal +} + +Table infrastructure_wastewater_treatment_plants [headercolor: #008B8B] { +plant_id integer [pk] name varchar state varchar(2) codigestion boolean [note: +"currently 0/1"] flow_design_adjusted decimal [note: "MGD"] flow_average decimal +[note: "MGD"] biosolids decimal [note: "BDT/yr"] excess_flow decimal [note: +"MGD"] biogas_utilized boolean [note: "currently 0/1"] flaring boolean [note: +"currently 0/1"] excess_mass_loading_rate decimal [note: "BDT/d"] +excess_mass_loading_rate_wet decimal [note: "tons per day?"] methane_production +decimal [note: "cubic ft/d"] energy_content decimal [note: "BTU/d"] electric_kw +decimal thermal_mmbtu_d decimal electric_kwh decimal thermal_annual_mmbtu_y +decimal anaerobic_digestion_facility varchar // partially blank county varchar +// partially blank dayload_bdt decimal // for ca only dayload decimal // what's +the difference between this and the prev one? for ca only equivalent_generation +decimal // for ca only facility_type varchar [note: "select"] // for ca only +feedstock varchar [note: "select"] // for ca only type varchar [note: "select"] +// for ca only city varchar latitude decimal longitude decimal zipcode varchar } + +Table infrastructure_combustion_plants [headercolor: #008B8B] { combustion_fid +integer [pk] objectid integer // several object ids are 0 status varchar [note: +"select: active, retired, unknown"] // has a random 0 in there. does that mean +unknown city varchar name varchar county varchar equivalent_generation decimal +np_mw decimal // what does this mean? look up cf decimal // what does this mean? +yearload integer [note: "in bdt"] fuel varchar [note: "select WDS, MSW, AB"] +notes varchar [note: "optional field, blanks replaced by zeroes"] type varchar +[note: "all COMB_pts; is it necessary"] wkt_geom text geom point latitude +decimal longitude decimal } + +Table infrastructure_district_energy_systems [headercolor: #008B8B] { des_fid +integer [pk] cbg_id integer name varchar system varchar // partially blank +object_id integer city varchar state varchar(2) primary_fuel varchar [note: +"selection of NG, E/Electric"] secondary_fuel varchar [note: "selection"] // +partially blank usetype varchar [note: "selection btwn College, +Downtown/Utility, Healthcare, Airport, Gov, Military"] cap_st decimal // what +does this mean? cap_hw decimal // what does this mean? cap_cw decimal // what +does this mean? chpcg_cap decimal // what does this mean? excess_c decimal +[note: 'all zeroes'] excess_h decimal [note: 'all zeroes'] type varchar [note: +'all DES_CBG'] wkt_geom text geom point latitude decimal longitude decimal } + +Table infrastructure_food_processing_facilities [headercolor: #008B8B] { +processing_facility_id integer [pk] address varchar county varchar city varchar +company varchar join_count integer // unsure if this is necessary. could omit? +master_type varchar [note: 'select; this is the main crop'] state varchar(2) +subtype varchar [note: 'select; this is also crop/product type'] target_fid +integer // lots of zeroes processing_type varchar [note: 'select'] zip varchar +type varchar [note: 'all PROC'] // unsure if this is needed wkt_geom text geom +point latitude decimal longitude decimal } + +Table infrastructure_msw_to_energy_anaerobic_digesters [headercolor: #008B8B] { +wte_id integer [pk] city varchar county varchar equivalent_generation decimal // +note: number stored as text feedstock varchar [note: 'multiselect'] dayload +decimal // note: number stored as text dayload_bdt decimal // note: number +stored as text facility_type varchar [note: 'select'] status varchar [note: +'select'] notes text source text type varchar [note: 'all W2E_pts'] // unsure if +needed wkt_geom text geom point latitude decimal longitude decimal } + +//=========================================================== // CHILD RECORD +TABLE – BT23 //=========================================================== + +Table billion_ton_2023_record [headercolor: #EB801B] { id int [pk, increment] +subclass_id int [ref:> resource_subclass.id] resource_id int [ref:> resource.id] +geoid varchar [ref:> geography.geoid] county_square_miles float model_name +varchar //enumerated list with POLYSIS, NASS, etc. scenario_name varchar +//Enumerated list of near-term, mature-market, etc price_offered_usd decimal +production int production_unit_id int [ref:> unit.id] btu_ton int +production_energy_content int energy_content_unit_id int [ref:> unit.id] +product_density_dtpersqmi decimal land_source varchar } + +/////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////// Table +usda_domain [headercolor: #ffc72f] { //domain still needs linkage! id int [pk, +increment] name string [not null, unique] description string uri string } + +// Table usda_commodity [headercolor: #ffc72f] { // id int [pk, increment] // +name string [not null, unique] // description string // uri string // } + +// Table usda_commodity_to_primary_crop [headercolor: #ffc72f] { // +usda_commodity_id int [ref: > usda_commodity.id] // primary_crop_id int [ref: > +primary_crop.id] // } + +Table usda_statistic_category [headercolor: #ffc72f] { id int [pk, increment] +name string [not null, unique] description string uri string } + +Table usda_survey_program [headercolor: #ffc72f] { id int [pk, increment] name +string [not null, unique] description string uri string } + +Table dimension_type [headercolor: #A15CF5] { id int [pk, increment] name string +[not null, unique, note: "E.g., TIMEPOINT, WAVELENGTH, DEPTH"] description text +uri string } + +Table analysis_type [headercolor: #A15CF5] { //we may want to be careful +difference between analysis and methods // LookupBase for enum/ontology-like +tables id int [pk, increment] name string [not null, unique, note: "X-Ray +Fluorescence analysis, Proximate analysis, Chemical Composition, Fermentation +Profile, etc"] // description string uri string // } + +Table polygon [headercolor: #808080] { id int [pk] geoid string [ref: > +geography.geoid] geom geometry } + +Table strain { // LookupBase for enum/ontology-like tables id int [pk, +increment] name string [not null, unique, note: "X-Ray Fluorescence analysis, +Proximate analysis, Chemical Composition, Fermentation Profile, etc"] // +parent_strain_id int [ref:> strain.id, note: "recursive"] description string uri +string // + +} + +# // ========================================== // USDA HIERARCHY & MAPPING // + +TableGroup "Resource Ontology Mapping" [color: #5D6D7E] { usda_commodity +resource_usda_commodity_map // usda_term_map // <--- The Dictionary (Raw Text -> +Clean USDA Node) + +} + +Table usda_commodity { // LookupBase id int [pk, increment] name string [not +null] // e.g., "Almonds", "Tree Nuts", "Rice, Long Grain" usda_source string // +"usda_source" = Who OWNS this official definition? // - "NASS": It is a census +crop (e.g., Almonds). // - "AMS": It is a market term not tracked by NASS (e.g., +Almond Hulls). usda_code string [note: "The official code used by USDA API"] + +// The Cleanup Mechanism (Self-Referencing Hierarchy) parent_commodity_id int +[ref: > usda_commodity.id, note: "If this is 'Almonds Hulls', parent might be +'Almonds'. There might be another row where commodity code is 'Almonds', and its +parent would be 'Tree Nuts'. 'Tree Nuts' would have NULL listed for parent."] +//Gemini has promised that the USDA NASS API already has structured commodity +relations so it should be a programmable task. + +description string uri string + +Note: ''' + +# ETL INGESTION RULE + +1. **Ingest NASS First:** The NASS API is the primary source of truth. + Programmatically populate this table using NASS "Group" -> "Commodity" -> + "Class" hierarchy. +2. **Ingest AMS Second:** The AMS API (Market Data) is messy. - When Python + encounters a term in AMS (e.g., "Almond Hulls"), it must check this table. - + If the term exists (from NASS), link to it. - If the term is NEW, create a + new node here with usda_source = "AMS". - **Manual Step:** A human must + periodically review new "AMS" nodes and link them to their NASS parent (e.g., + Link "Almond Hulls" -> "Almonds"). ''' } + +Table usda_term_map { id int [pk, increment] + +// THE INPUT (The Messy Reality) source_system string [note: " 'NASS' or 'AMS' +"] // "source_system" = Where did we FIND this specific messy text string. // We +need this so if we re-run the ingestion script, we know which rules apply (NASS +data is prioritized, AMS data is referenced and then added if not already +captured) source_context string [note: "For AMS: The Slug ID (e.g. 3667). For +NASS: The Group."] // "source_context" = The container where we found it. // - +For NASS: The Group Name (e.g., "Tree Nuts"). // - For AMS: The Slug ID (e.g., +"3668" = "Monthly National Grain and Oilseed Processor Feedstuff Report"). +raw_term string [not null, note: "The exact string from the API, e.g., 'Hulls', +'Hull/Shell Mix'"] + +// THE OUTPUT (The Decision) usda_commodity_id int [ref: > usda_commodity.id] +//We review this manually. + +// METADATA is_verified boolean [default: false] //Note whether we've confirmed +mapping note text } + +Table resource_usda_commodity_map { id int [pk, increment] + +// 1. THE INTERNAL TARGET (Who is asking?) // We allow linking to EITHER a +specific resource OR a general crop resource_id int [ref: > resource.id, null] +// Specific: "Almond Hulls" primary_crop_id int [ref: > primary_crop.id, null] +// General: "Almonds" + +// 2. THE EXTERNAL SOURCE (Who has the data?) usda_commodity_id int [ref: > +usda_commodity.id, not null] + +// 3. THE LOGIC (How good is the match?) match_tier string [not null, note: +"ENUM: 'DIRECT_MATCH', 'CROP_FALLBACK', 'AGGREGATE_PARENT'"] + +// Metadata created_at datetime [default: `current_timestamp`] note text [note: +"Explanation of why this link was made"] + +// LOGIC: A row must have EITHER a resource_id OR a primary_crop_id, but not +both null. } + +///////////////////////////////////////////////////////////// //////////// +PEOPLE ////////////// +//////////////////////////////////////////////////////////// + +Table contact { id int [pk] first_name varchar last_name varchar email varchar +[unique] affiliation varchar //maybe link to an enumerated list } + +Table provider { id int [pk] codename string } diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/specific_aalysis_results.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/specific_aalysis_results.py deleted file mode 100644 index f416bdf2..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/specific_aalysis_results.py +++ /dev/null @@ -1,199 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, date -from decimal import Decimal -from typing import Optional - -from sqlmodel import SQLModel, Field -from sqlalchemy import Index - -# ---------------------------------------------------------------------- -# Specific analysis result tables -# ---------------------------------------------------------------------- - - -class ProximateAnalysis(SQLModel, table=True): - """Proximate analysis results (e.g., moisture, ash).""" - __tablename__ = "proximate_analysis" - - prox_id: Optional[int] = Field(default=None, primary_key=True) - result_id: Optional[int] = Field(default=None, - description="Reference to analysis_results.result_id") - # foreign_key="analysis_results.result_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - notes: Optional[str] = Field(default=None) - - -class ICPAnalysis(SQLModel, table=True): - """ICP (Inductively Coupled Plasma) analysis.""" - __tablename__ = "icp_analysis" - - icp_id: Optional[int] = Field(default=None, primary_key=True) - result_id: Optional[int] = Field(default=None, - description="Reference to analysis_results.result_id") - # foreign_key="analysis_results.result_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - concentration_calculation_url_id: Optional[int] = Field(default=None, - description="Reference to url.url_id") - # foreign_key="url.url_id") - result_wavelength: Optional[Decimal] = Field(default=None) - raw_url: Optional[str] = Field(default=None) - notes: Optional[str] = Field(default=None) - - -class CompositionalAnalysis(SQLModel, table=True): - """Compositional analysis (derived parameters).""" - __tablename__ = "compositional_analysis" - - cmp_id: Optional[int] = Field(default=None, primary_key=True) - result_id: Optional[int] = Field(default=None, - description="Reference to analysis_results.result_id") - # foreign_key="analysis_results.result_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - calculated_parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - calculated_parameter_value: Optional[Decimal] = Field(default=None) - calculated_parameter_unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - notes: Optional[str] = Field(default=None) - - -class XRFAnalysis(SQLModel, table=True): - """X‑Ray Fluorescence analysis.""" - __tablename__ = "xrf_analysis" - - xrf_id: Optional[int] = Field(default=None, primary_key=True) - result_id: Optional[int] = Field(default=None, - description="Reference to analysis_results.result_id") - # foreign_key="analysis_results.result_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - notes: Optional[str] = Field(default=None) - - -class FermentationProfile(SQLModel, table=True): - """Fermentation profile results.""" - __tablename__ = "fermentation_profile" - - fp_id: Optional[int] = Field(default=None, primary_key=True) - result_id: Optional[int] = Field(default=None, - description="Reference to analysis_results.result_id") - # foreign_key="analysis_results.result_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - organism_id: Optional[int] = Field(default=None, - description="Reference to organisms.organism_id") - # foreign_key="organisms.organism_id") - product_type_id: Optional[int] = Field(default=None, - description="Reference to product_type.product_type_id") - # foreign_key="product_type.product_type_id") - product_value: Optional[Decimal] = Field(default=None) - product_unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - notes: Optional[str] = Field(default=None) - - -class Organism(SQLModel, table=True): - """Organism used in a fermentation.""" - __tablename__ = "organisms" - - organism_id: Optional[int] = Field(default=None, primary_key=True) - organism_name: Optional[str] = Field(default=None) - organism_strain_id: Optional[int] = Field(default=None) - notes: Optional[str] = Field(default=None) - - -class GasificationProfile(SQLModel, table=True): - """Gasification profile results.""" - __tablename__ = "gasification_profile" - - gasification_id: Optional[int] = Field(default=None, primary_key=True) - result_id: Optional[int] = Field(default=None, - description="Reference to analysis_results.result_id") - # foreign_key="analysis_results.result_id") - parameter_id: Optional[int] = Field(default=None, - description="Reference to parameters.parameter_id") - # foreign_key="parameters.parameter_id") - value: Optional[Decimal] = Field(default=None) - unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - notes: Optional[str] = Field(default=None) - product_type_id: Optional[int] = Field(default=None, - description="Reference to product_type.product_type_id") - # foreign_key="product_type.product_type_id") - product_value: Optional[Decimal] = Field(default=None) - product_unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - - -class AutoclaveProfile(SQLModel, table=True): - """Autoclave experiment results.""" - __tablename__ = "autoclave_profile" - - autoclave_id: Optional[int] = Field(default=None, primary_key=True) - result_id: Optional[int] = Field(default=None, - description="Reference to analysis_results.result_id") - # foreign_key="analysis_results.result_id") - product_type_id: Optional[int] = Field(default=None, - description="Reference to product_type.product_type_id") - # foreign_key="product_type.product_type_id") - product_value: Optional[Decimal] = Field(default=None) - product_unit_id: Optional[int] = Field(default=None, - description="Reference to units.unit_id") - # foreign_key="units.unit_id") - - -class AnalysisReplicate(SQLModel, table=True): - """Link between a result and its replicate UUID (used for G‑Sheet tracking).""" - __tablename__ = "analysis_replicate_id" - - analysis_replicate_id: Optional[int] = Field(default=None, primary_key=True) - result_id: Optional[int] = Field(default=None, - description="Reference to analysis_results.result_id") - # foreign_key="analysis_results.result_id") - analysis_types_id: Optional[int] = Field(default=None, - description="Reference to analysis_types.analysis_type_id") - # foreign_key="analysis_types.analysis_type_id") - analysis_replicate_uuid: Optional[str] = Field(default=None) - - -class ProductType(SQLModel, table=True): - """Product type produced in a process (e.g., Butyric, Biochar).""" - __tablename__ = "product_type" - - product_type_id: Optional[int] = Field(default=None, primary_key=True) - product: Optional[str] = Field(default=None, - description="e.g., Butyric, Iso‑Butyric, Propionic, Hydrogen, Syngas, Biochar, Indigoidine, 3HP, etc") diff --git a/src/ca_biositing/datamodels/ca_biositing/datamodels/user.py b/src/ca_biositing/datamodels/ca_biositing/datamodels/user.py deleted file mode 100644 index 7864a64c..00000000 --- a/src/ca_biositing/datamodels/ca_biositing/datamodels/user.py +++ /dev/null @@ -1,13 +0,0 @@ -from typing import Optional -from sqlmodel import SQLModel, Field - -class User(SQLModel, table=True): - __tablename__ = 'testusers2' - - id: Optional[int] = Field(default=None, primary_key=True) - name: Optional[str] = Field(default=None) - fullname: Optional[str] = Field(default=None) - nickname: Optional[str] = Field(default=None) - - def __repr__(self): - return f"" diff --git a/src/ca_biositing/datamodels/pyproject.toml b/src/ca_biositing/datamodels/pyproject.toml index 9d9a5d1c..6b4f49ee 100644 --- a/src/ca_biositing/datamodels/pyproject.toml +++ b/src/ca_biositing/datamodels/pyproject.toml @@ -27,6 +27,8 @@ dependencies = [ "psycopg2-binary>=2.9.6,<3", "pydantic>=2.0.0", "pydantic-settings>=2.0.0", + "linkml>=1.8.0", + "sqlalchemy>=2.0.0", ] [project.urls] diff --git a/src/ca_biositing/datamodels/utils/generate_sqla.py b/src/ca_biositing/datamodels/utils/generate_sqla.py new file mode 100644 index 00000000..50c0825f --- /dev/null +++ b/src/ca_biositing/datamodels/utils/generate_sqla.py @@ -0,0 +1,86 @@ +import os +import re +import subprocess +from pathlib import Path + +def to_snake_case(name): + """Converts PascalCase to snake_case.""" + s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name) + return re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1).lower() + +def post_process_file(file_path): + """ + Post-processes the generated file to convert table names to snake_case. + """ + with open(file_path, 'r') as f: + content = f.read() + + # Regex to find __tablename__ assignments + # Matches: __tablename__ = 'SomeName' + pattern = r"__tablename__ = '([A-Za-z0-9]+)'" + + def replace_tablename(match): + original_name = match.group(1) + snake_name = to_snake_case(original_name) + return f"__tablename__ = '{snake_name}'" + + new_content = re.sub(pattern, replace_tablename, content) + + with open(file_path, 'w') as f: + f.write(new_content) + +def generate_sqla(): + """ + Generates SQLAlchemy models from LinkML schema modules. + """ + base_dir = Path(__file__).parent.parent + linkml_dir = base_dir / "ca_biositing/datamodels/linkml" + modules_dir = linkml_dir / "modules" + output_dir = base_dir / "ca_biositing/datamodels/schemas/generated" + + # Ensure output directory exists + output_dir.mkdir(parents=True, exist_ok=True) + + # Clean output directory + print(f"Cleaning output directory: {output_dir}") + for file in output_dir.glob("*.py"): + if file.name != "__init__.py": + file.unlink() + + # Generate for modules + for yaml_file in modules_dir.glob("*.yaml"): + module_name = yaml_file.stem + output_file = output_dir / f"{module_name}.py" + print(f"Generating {output_file} from {yaml_file}...") + + cmd = [ + "python", "-m", "linkml.generators.sqlalchemygen", + "--no-mergeimports", + str(yaml_file) + ] + + with open(output_file, "w") as f: + subprocess.run(cmd, stdout=f, check=True) + + post_process_file(output_file) + + # Generate for main schema + main_yaml = linkml_dir / "ca_biositing.yaml" + main_output = output_dir / "ca_biositing.py" + print(f"Generating {main_output} from {main_yaml}...") + + cmd = [ + "python", "-m", "linkml.generators.sqlalchemygen", + "--no-mergeimports", + str(main_yaml) + ] + + with open(main_output, "w") as f: + subprocess.run(cmd, stdout=f, check=True) + + post_process_file(main_output) + + print("Generation complete.") + +if __name__ == "__main__": + generate_sqla() diff --git a/src/ca_biositing/datamodels/utils/orchestrate_schema_update.py b/src/ca_biositing/datamodels/utils/orchestrate_schema_update.py new file mode 100644 index 00000000..07281d32 --- /dev/null +++ b/src/ca_biositing/datamodels/utils/orchestrate_schema_update.py @@ -0,0 +1,58 @@ +import subprocess +import sys +import argparse +import shlex +from pathlib import Path + +def run_command(command, cwd=None): + print(f"Running: {command}") + try: + # If command is a string, use shell=True. If list, use shell=False. + shell = isinstance(command, str) + subprocess.run(command, shell=shell, check=True, cwd=cwd) + except subprocess.CalledProcessError as e: + print(f"Error running command: {command}") + sys.exit(e.returncode) + +def main(): + parser = argparse.ArgumentParser(description="Orchestrate schema update workflow.") + parser.add_argument("-m", "--message", required=True, help="Migration message") + args = parser.parse_args() + + # 1. Generate SQLAlchemy models + print("--- Generating SQLAlchemy models ---") + script_path = Path(__file__).parent / "generate_sqla.py" + run_command(f"python {script_path}") + + # 2. Rebuild services + print("--- Rebuilding services ---") + # We assume we are in the project root or pixi handles the path + run_command("pixi run rebuild-services") + + # 3. Start services + print("--- Starting services ---") + run_command("pixi run start-services") + + # 4. Generate migration + print(f"--- Generating migration: {args.message} ---") + + # Construct the bash command to run inside the container + # usage of shlex.quote ensures the message is safely quoted for the inner bash shell + safe_message = shlex.quote(args.message) + inner_cmd = f"source /shell-hook.sh && alembic revision --autogenerate -m {safe_message}" + + # We invoke docker-compose directly via pixi to avoid potential argument parsing issues + # with pixi task aliases when handling complex nested quotes. + cmd = [ + "pixi", "run", "docker-compose", + "-f", "resources/docker/docker-compose.yml", + "exec", "prefect-worker", + "/bin/bash", "-c", inner_cmd + ] + run_command(cmd) + + print("--- Schema update orchestration complete! ---") + print("Don't forget to run 'pixi run migrate' to apply the changes.") + +if __name__ == "__main__": + main() diff --git a/src/ca_biositing/pipeline/ca_biositing/pipeline/utils/database_interaction.ipynb b/src/ca_biositing/pipeline/ca_biositing/pipeline/utils/database_interaction.ipynb index 41d5e443..671f288a 100644 --- a/src/ca_biositing/pipeline/ca_biositing/pipeline/utils/database_interaction.ipynb +++ b/src/ca_biositing/pipeline/ca_biositing/pipeline/utils/database_interaction.ipynb @@ -23,9 +23,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Libraries and models imported successfully.\n" + ] + } + ], "source": [ "import pandas as pd\n", "from sqlmodel import create_engine, Session, select\n", @@ -53,9 +61,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Database engine created. Ready to connect to: postgresql+psycopg2://biocirv_user:@localhost:5432/biocirv_db\n" + ] + } + ], "source": [ "DATABASE_URL = \"postgresql+psycopg2://biocirv_user:biocirv_dev_password@localhost:5432/biocirv_db\"\n", "\n", @@ -77,9 +93,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "- Loaded 0 records from 'field_samples'.\n", + "- Loaded 0 records from 'geographic_locations'.\n", + "- Loaded 18 records from 'primary_product'.\n" + ] + } + ], "source": [ "field_samples_df = None\n", "locations_df = None\n", @@ -111,9 +137,118 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.microsoft.datawrangler.viewer.v0+json": { + "columns": [ + { + "name": "analysis_type_id", + "rawType": "int64", + "type": "integer" + }, + { + "name": "analysis_name", + "rawType": "object", + "type": "string" + } + ], + "ref": "29cf402a-5519-4cf9-9c5d-27d39dd02736", + "rows": [ + [ + "1", + "Proximate analysis" + ], + [ + "2", + "ICP-OES" + ], + [ + "3", + "Chemical composition" + ], + [ + "4", + "XRF analysis" + ], + [ + "5", + "Ultimate analysis" + ] + ], + "shape": { + "columns": 1, + "rows": 5 + } + }, + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
analysis_name
analysis_type_id
1Proximate analysis
2ICP-OES
3Chemical composition
4XRF analysis
5Ultimate analysis
\n", + "
" + ], + "text/plain": [ + " analysis_name\n", + "analysis_type_id \n", + "1 Proximate analysis\n", + "2 ICP-OES\n", + "3 Chemical composition\n", + "4 XRF analysis\n", + "5 Ultimate analysis" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "df2 = pd.read_sql(\"SELECT * FROM analysis_types\", engine)\n", "df2 = df2.set_index(\"analysis_type_id\")\n", @@ -134,9 +269,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Skipping join because 'field_samples' table is empty.\n" + ] + } + ], "source": [ "merged_df = None\n", "\n", @@ -169,9 +312,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No data to display.\n" + ] + } + ], "source": [ "if merged_df is not None:\n", " display(merged_df.head())\n", @@ -196,7 +347,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.14.0" + "version": "3.13.9" } }, "nbformat": 4, diff --git a/src/pipeline/README.md b/src/pipeline/README.md deleted file mode 100644 index f2db60b9..00000000 --- a/src/pipeline/README.md +++ /dev/null @@ -1,168 +0,0 @@ -# ETL Pipeline Project - -This project implements a modular ETL (Extract, Transform, Load) pipeline that -extracts data from Google Sheets (or other sources), transforms it using Python, -and loads it into a PostgreSQL database. The entire environment is containerized -with Docker. - ---- - -## Core Workflows - -This project has three key development workflows. For detailed, step-by-step -instructions, please refer to the dedicated workflow guides. A high-level -overview is provided here to give conceptual understanding before you begin. - -### 1. Docker Environment Management - -- **Purpose:** Managing the lifecycle of your development containers (app and - database). -- **Details:** For starting, stopping, and rebuilding your environment. -- **[See the full guide: DOCKER_WORKFLOW.md](../../docs/pipeline/DOCKER_WORKFLOW.md)** - -### 2. Database Schema Migrations (Alembic) - -- **Purpose:** Making and applying changes to the database schema (e.g., adding - tables or columns). -- **Details:** How to automatically generate and apply migration scripts based - on your SQLModel changes. -- **[See the full guide: ALEMBIC_WORKFLOW.md](../../docs/pipeline/ALEMBIC_WORKFLOW.md)** - -### 3. ETL Pipeline Development (Prefect) - -- **Purpose:** Running the ETL pipeline and adding new data pipelines using - Prefect's "flow of flows" pattern. -- **Details:** The `run_prefect_flow.py` script acts as a master orchestrator - that runs all individual pipeline flows defined in the `src/flows/` directory. - To add a new pipeline, you must create a new flow file and add it to the - master flow. -- **[See the full guide: ETL_WORKFLOW.md](../../docs/pipeline/ETL_WORKFLOW.md)** - -### 4. Creating New Database Models - -- **Purpose:** Adding a new table to the database schema. -- **Details:** Use the `model_template.py` to define your new table, then follow - the Alembic workflow to generate and apply the migration. -- **[See the model template: src/models/templates/model_template.py](./src/models/templates/model_template.py)** -- **[See the migration guide: ALEMBIC_WORKFLOW.md](../../docs/pipeline/ALEMBIC_WORKFLOW.md)** - ---- - -## Local Development Environment (Pixi) - -This project uses **Pixi** to manage dependencies and run tasks for local -development. This environment is used for both running the application locally -and for code quality tools like `pre-commit`. The Docker container also uses -Pixi to install dependencies. - -**1. Install Pixi:** - -- Follow the official instructions to - [install Pixi](https://pixi.sh/latest/installation/) on your system. - -**2. Install Local Dependencies:** - -- Once Pixi is installed, navigate to the `ca-biositing` root directory and run: - - ```bash - pixi install - ``` - - This will install the required local tools (like `pre-commit`) into a managed - environment. - - If you have issues with the install on Windows, you may need to command: - - ``` - pixi workspace platform add win-64 - ``` - - Once pixi is installed, run the following command to set up pre-commit checks - on every commit: - - ```bash - pixi run pre-commit-install - ``` - -**3. Activate the Local Environment:** - -- To activate this environment in your shell, run: - - ```bash - pixi shell - ``` - - This command is the equivalent of a traditional `source venv/bin/activate`. - You will see a prefix in your shell prompt indicating that the environment is - active. You can now run commands like `pre-commit` directly. - ---- - -## Getting Started - -Follow these steps to set up and run the project for the first time. - -**1. Google Cloud Setup:** - -- To allow the application to access Google Sheets, you must first create a - service account and generate a `credentials.json` file. -- **[Follow the full guide here: GCP_SETUP.md](../../docs/pipeline/GCP_SETUP.md)** - -**2. Environment Setup:** - -- Create a `.env` file in the project root directory by copying the - `.env.example` file. -- The database connection settings (e.g., `POSTGRES_USER`) are used to connect - to the PostgreSQL container. The default values in `.env.example` are - sufficient for local development. You do not need to change them unless you - have a custom setup. - -**3. Build the Docker Image:** - -- From the project root directory, build the Docker image. - - ```bash - docker-compose build - ``` - -**4. Start the Services:** - -- Start the application and database containers in detached mode. - - ```bash - docker-compose up -d - ``` - -**5. Apply Database Migrations:** - -- The first time you start the project, you need to apply the database - migrations to create the tables. This command applies existing migrations; you - only need to consult the Alembic workflow guide when creating _new_ - migrations. - - ```bash - docker-compose exec app pixi run alembic upgrade head - ``` - -The environment is now fully set up and running. - ---- - -## Project Structure - -This `pipeline` directory is a self-contained ETL project located within the -larger `ca-biositing` repository. Here is a brief overview of its key -directories: - -``` -pipeline/ -├── alembic/ # Database migration scripts -├── etl/ -│ ├── extract/ # ETL Task: Modules for extracting data -│ ├── transform/ # ETL Task: Modules for transforming data -│ ├── load/ # ETL Task: Modules for loading data -│ └── templates/ # Templates for new ETL modules -├── flows/ # Prefect Flows: Individual pipeline definitions -├── models/ # SQLModel class definitions (database tables) -└── utils/ # Shared utility functions -```