canopy-ag-sdk 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- canopy_ag_sdk-0.1.0/.gitignore +283 -0
- canopy_ag_sdk-0.1.0/PKG-INFO +104 -0
- canopy_ag_sdk-0.1.0/README.md +92 -0
- canopy_ag_sdk-0.1.0/config.yml +11 -0
- canopy_ag_sdk-0.1.0/project.json +45 -0
- canopy_ag_sdk-0.1.0/pyproject.toml +52 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk/__init__.py +32 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk/client.py +144 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk/redaction.py +36 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/__init__.py +8 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/device_events/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/device_events/device_events_controller_find_all.py +169 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/device_events/device_events_controller_get_status.py +156 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/device_events/device_events_controller_webhook.py +116 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/devices/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/devices/devices_controller_audit.py +196 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/devices/devices_controller_create.py +178 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/devices/devices_controller_find_all.py +251 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/devices/devices_controller_find_one.py +176 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/devices/devices_controller_relay_device_number_readiness.py +233 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/devices/devices_controller_remove.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/devices/devices_controller_update.py +194 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/grow_zones/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/grow_zones/grow_zones_controller_create.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/grow_zones/grow_zones_controller_find_all.py +238 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/grow_zones/grow_zones_controller_find_one.py +176 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/grow_zones/grow_zones_controller_get_status.py +172 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/grow_zones/grow_zones_controller_remove.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/grow_zones/grow_zones_controller_update.py +194 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/health/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/health/health_controller_get_health.py +89 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_create_preference.py +178 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_deliver_batch.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_deliver_latest.py +103 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_find_all.py +193 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_find_all_preferences.py +161 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_find_runtime_for_zone_and_date.py +134 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_generate.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_generate_manual_preview.py +190 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_get_preference_audit.py +184 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_get_schedule_adherence.py +230 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_get_schedules_by_batch.py +181 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_get_summary.py +103 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_list_batches.py +195 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_regenerate.py +115 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_run_pipeline.py +115 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_update_preference.py +198 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_validate_plan.py +186 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_schedules/irrigation_schedules_controller_validate_plan_by_relay.py +194 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zone_maps/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zone_maps/irrigation_zone_maps_controller_create.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zone_maps/irrigation_zone_maps_controller_find_all.py +193 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zone_maps/irrigation_zone_maps_controller_find_by_irrigation_zone.py +177 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zone_maps/irrigation_zone_maps_controller_find_one.py +176 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zone_maps/irrigation_zone_maps_controller_remove.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zone_maps/irrigation_zone_maps_controller_update.py +190 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_create.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_find_all.py +253 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_find_one.py +176 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_get_active_run.py +192 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_get_ganged_relays.py +111 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_get_run_now_constraints.py +111 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_remove.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_run_now.py +125 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_stop.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/irrigation_zones_controller_update.py +194 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/irrigation_zones/recommended_runtime_controller_get_recommended_runtime.py +140 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/locations/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/locations/locations_controller_create.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/locations/locations_controller_find_all.py +223 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/locations/locations_controller_find_one.py +176 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/locations/locations_controller_remove.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/locations/locations_controller_update.py +194 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/manual_irrigation_schedules_controller_create.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/manual_irrigation_schedules_controller_create_by_relay.py +197 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/manual_irrigation_schedules_controller_find_active.py +161 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/manual_irrigation_schedules_controller_find_all.py +195 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/manual_irrigation_schedules_controller_find_one.py +176 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/manual_irrigation_schedules_controller_remove.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/manual_irrigation_schedules_controller_toggle_active.py +172 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/manual_irrigation_schedules/manual_irrigation_schedules_controller_update.py +190 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/observations/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/observations/observations_controller_create.py +186 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/observations/observations_controller_find_all.py +187 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/observations/observations_controller_find_latest.py +238 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/observations/observations_controller_find_series.py +303 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/plant_lots_controller_append_event.py +198 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/plant_lots_controller_create.py +178 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/plant_lots_controller_find_all.py +292 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/plant_lots_controller_find_events.py +213 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/plant_lots_controller_find_one.py +176 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/plant_lots_controller_import.py +202 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/plant_lots_controller_remove.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_lots/plant_lots_controller_update.py +194 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_varieties/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_varieties/plant_varieties_controller_create.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_varieties/plant_varieties_controller_find_all.py +223 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_varieties/plant_varieties_controller_find_one.py +176 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_varieties/plant_varieties_controller_remove.py +116 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/plant_varieties/plant_varieties_controller_update.py +194 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_create_preference.py +178 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_find_all.py +191 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_find_all_preferences.py +161 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_force_generate.py +156 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_generate.py +156 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_generate_custom.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_get_by_date.py +177 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_get_preference_audit.py +184 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_remove_preference.py +113 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/runtimes/runtimes_controller_update_preference.py +198 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/sensor_registry/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/sensor_registry/sensor_registry_controller_find_all.py +254 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/service_credentials/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/service_credentials/tenant_service_credentials_controller_list.py +85 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/service_credentials/tenant_service_credentials_controller_mint.py +115 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/service_credentials/tenant_service_credentials_controller_mintable_scopes.py +136 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/service_credentials/tenant_service_credentials_controller_revoke.py +105 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/tenants/__init__.py +1 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/tenants/tenant_controller_create.py +116 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/tenants/tenant_controller_create_tenant_database.py +108 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/tenants/tenant_controller_find_all.py +85 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/tenants/tenant_controller_find_one.py +105 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/tenants/tenant_controller_remove.py +111 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/api/tenants/tenant_controller_update.py +126 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/client.py +272 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/errors.py +16 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/__init__.py +343 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/constraint_violation_dto.py +133 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/constraint_violation_dto_details.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/constraint_violation_dto_severity.py +9 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_device_dto.py +168 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_device_dto_configuration.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_device_dto_metadata.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_grow_zone_dto.py +146 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_grow_zone_dto_boundary.py +55 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_irrigation_zone_dto.py +191 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_irrigation_zone_dto_area_unit.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_irrigation_zone_dto_flow_rate_unit.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_irrigation_zone_map_dto.py +98 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_location_dto.py +98 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_manual_irrigation_schedule_by_relay_dto.py +156 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_manual_irrigation_schedule_by_relay_dto_recurrence_type.py +12 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_manual_irrigation_schedule_dto.py +154 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_manual_irrigation_schedule_dto_recurrence_type.py +12 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_observation_dto.py +131 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_observation_dto_subject_type.py +10 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_plant_lot_dto.py +151 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_plant_lot_dto_container_class.py +22 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_plant_lot_dto_current_stage.py +12 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_plant_lot_event_dto.py +105 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_plant_lot_event_dto_event_type.py +14 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_plant_lot_event_dto_payload.py +50 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_plant_variety_dto.py +99 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_runtime_preference_dto.py +71 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_runtime_preference_dto_key.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_schedule_preference_dto.py +81 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_schedule_preference_dto_key.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/create_tenant_dto.py +81 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/custom_zone_duration_dto.py +69 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_audit_response_dto.py +157 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_audit_response_dto_summary.py +53 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_entity.py +311 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_entity_configuration.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_entity_metadata.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_events_controller_find_all_event_type.py +9 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_status_dto.py +130 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_status_dto_current_status.py +10 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_status_summary_dto.py +86 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/device_status_summary_dto_summary.py +52 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/devices_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/generate_custom_runtimes_dto.py +86 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/generate_manual_schedule_dto.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/generate_schedule_dto.py +79 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/grow_zone_entity.py +194 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/grow_zone_entity_boundary.py +54 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/grow_zone_status_dto.py +129 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/grow_zone_status_dto_device_connectivity.py +10 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/grow_zone_status_dto_status.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/grow_zone_status_response_dto.py +84 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/grow_zones_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/import_plant_lots_response_dto.py +91 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedule_batch_entity.py +97 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedule_batch_entity_metadata.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedule_dto.py +216 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedule_entity.py +193 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedule_preference_entity.py +81 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedule_preference_entity_key.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedules_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedules_controller_get_preference_audit_key.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_schedules_controller_list_batches_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_zone_entity.py +171 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_zone_entity_area_unit.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_zone_entity_flow_rate_unit.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_zone_map_entity.py +79 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_zone_maps_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/irrigation_zones_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/location_entity.py +109 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/locations_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/manual_irrigation_schedule_entity.py +155 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/manual_irrigation_schedule_entity_recurrence_type.py +12 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/manual_irrigation_schedules_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/mint_tenant_service_credential_dto.py +83 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/mint_tenant_service_credential_dto_roles_item.py +16 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/mintable_scopes_response_dto.py +85 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/normalization_collision_dto.py +93 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/observation_entity.py +159 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/observation_series_bucket_dto.py +101 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/observations_controller_find_all_subject_type.py +10 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/observations_controller_find_latest_subject_type.py +10 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/observations_controller_find_series_bucket.py +9 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/observations_controller_find_series_subject_type.py +10 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/paginated_response_dto.py +67 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/pagination_meta.py +101 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lot_event_response_dto.py +177 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lot_event_response_dto_payload_type_0.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lot_import_error_dto.py +80 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lot_response_dto.py +328 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lots_controller_find_all_container_class.py +22 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lots_controller_find_all_current_stage.py +12 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lots_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lots_controller_find_events_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_lots_controller_import_body.py +75 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_varieties_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/plant_variety_entity.py +99 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/regenerate_dto.py +61 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/relay_device_number_device_readiness_dto.py +161 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/relay_device_number_readiness_dto.py +136 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/run_now_dto.py +61 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/run_pipeline_dto.py +79 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/run_pipeline_dto_mode.py +9 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/runtime_batch_entity.py +69 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/runtime_entity.py +149 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/runtime_preference_entity.py +71 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/runtime_preference_entity_key.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/runtimes_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/runtimes_controller_get_preference_audit_key.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/schedule_adherence_response_dto.py +100 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/schedule_constraints.py +81 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/schedule_generation_response.py +110 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/sensor_registry_controller_find_all_response_200.py +92 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/sensor_registry_entity.py +180 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/sensor_registry_entity_calibration_type_0.py +52 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/sensor_registry_entity_metrics.py +52 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/shaped_cycle_dto.py +93 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/stale_device_dto.py +116 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/tenant_config_audit_log_entity.py +149 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/tenant_config_audit_log_entity_action.py +9 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/unavailable_mint_scope_dto.py +72 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/unavailable_mint_scope_dto_scope.py +16 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/unnormalizable_device_dto.py +94 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/unresolved_device_identifier_dto.py +101 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_device_dto.py +167 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_device_dto_configuration.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_device_dto_metadata.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_grow_zone_dto.py +144 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_grow_zone_dto_boundary.py +55 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_irrigation_zone_dto.py +189 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_irrigation_zone_dto_area_unit.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_irrigation_zone_dto_flow_rate_unit.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_irrigation_zone_map_dto.py +97 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_location_dto.py +97 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_manual_irrigation_schedule_dto.py +161 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_manual_irrigation_schedule_dto_recurrence_type.py +12 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_plant_lot_dto.py +174 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_plant_lot_dto_container_class.py +22 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_plant_lot_dto_current_stage.py +12 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_plant_variety_dto.py +97 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_runtime_preference_dto.py +78 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_runtime_preference_dto_key.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_schedule_preference_dto.py +87 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_schedule_preference_dto_key.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_tenant_dto.py +70 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/update_tenant_dto_subscription_level.py +11 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/validate_plan_by_relay_cycle_dto.py +90 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/validate_plan_by_relay_dto.py +75 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/validate_plan_cycle_dto.py +90 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/validate_plan_dto.py +75 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/validate_plan_response_dto.py +101 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/webhook_payload_dto.py +139 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/webhook_payload_dto_event.py +9 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/webhook_payload_dto_metadata.py +47 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/models/zone_adherence_dto.py +142 -0
- canopy_ag_sdk-0.1.0/src/canopy_sdk_client/types.py +54 -0
- canopy_ag_sdk-0.1.0/tests/test_env_contract.py +65 -0
- canopy_ag_sdk-0.1.0/tests/test_quickstart.py +42 -0
- canopy_ag_sdk-0.1.0/tests/test_redaction.py +101 -0
- canopy_ag_sdk-0.1.0/tests/test_version_parity.py +38 -0
- canopy_ag_sdk-0.1.0/tools/generate.sh +37 -0
- canopy_ag_sdk-0.1.0/tools/stg_smoke.py +91 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
# See https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files for more about ignoring files.
|
|
2
|
+
|
|
3
|
+
# compiled output
|
|
4
|
+
dist
|
|
5
|
+
tmp
|
|
6
|
+
out-tsc
|
|
7
|
+
|
|
8
|
+
# Playwright
|
|
9
|
+
test-results/
|
|
10
|
+
playwright-report/
|
|
11
|
+
playwright-smoke-report/
|
|
12
|
+
blob-report/
|
|
13
|
+
playwright/.cache/
|
|
14
|
+
|
|
15
|
+
# dependencies
|
|
16
|
+
node_modules
|
|
17
|
+
|
|
18
|
+
# IDEs and editors
|
|
19
|
+
/.idea
|
|
20
|
+
.project
|
|
21
|
+
.classpath
|
|
22
|
+
.c9/
|
|
23
|
+
*.launch
|
|
24
|
+
.settings/
|
|
25
|
+
*.sublime-workspace
|
|
26
|
+
|
|
27
|
+
# IDE - VSCode
|
|
28
|
+
.vscode/*
|
|
29
|
+
!.vscode/settings.json
|
|
30
|
+
!.vscode/tasks.json
|
|
31
|
+
!.vscode/launch.json
|
|
32
|
+
!.vscode/extensions.json
|
|
33
|
+
|
|
34
|
+
# misc
|
|
35
|
+
/.sass-cache
|
|
36
|
+
/connect.lock
|
|
37
|
+
/coverage
|
|
38
|
+
/libpeerconnection.log
|
|
39
|
+
npm-debug.log
|
|
40
|
+
yarn-error.log
|
|
41
|
+
testem.log
|
|
42
|
+
/typings
|
|
43
|
+
|
|
44
|
+
# System Files
|
|
45
|
+
.DS_Store
|
|
46
|
+
Thumbs.db
|
|
47
|
+
|
|
48
|
+
# Flutter/Dart specific
|
|
49
|
+
.dart_tool/
|
|
50
|
+
.flutter-plugins
|
|
51
|
+
.flutter-plugins-dependencies
|
|
52
|
+
.packages
|
|
53
|
+
.pub-cache/
|
|
54
|
+
.pub/
|
|
55
|
+
**/build/
|
|
56
|
+
# Style Dictionary generated tokens are committed for diff review + so the
|
|
57
|
+
# tools/check-design-tokens.mjs check has a ground-truth snapshot to compare
|
|
58
|
+
# against. Un-ignore the SD output dir specifically.
|
|
59
|
+
!react/ui/src/tokens/build/
|
|
60
|
+
ios/Pods/
|
|
61
|
+
ios/.symlinks/
|
|
62
|
+
ios/Flutter/Flutter.framework
|
|
63
|
+
ios/Flutter/Flutter.podspec
|
|
64
|
+
ios/Runner/GeneratedPluginRegistrant.*
|
|
65
|
+
android/.gradle/
|
|
66
|
+
android/captures/
|
|
67
|
+
android/gradlew
|
|
68
|
+
android/gradlew.bat
|
|
69
|
+
android/local.properties
|
|
70
|
+
android/**/GeneratedPluginRegistrant.java
|
|
71
|
+
android/key.properties
|
|
72
|
+
*.jks
|
|
73
|
+
macos/Pods/
|
|
74
|
+
macos/.symlinks/
|
|
75
|
+
windows/flutter/
|
|
76
|
+
.fvm/
|
|
77
|
+
|
|
78
|
+
.nx/cache
|
|
79
|
+
.nx/workspace-data
|
|
80
|
+
.cursor/rules/nx-rules.mdc
|
|
81
|
+
.github/instructions/nx.instructions.md
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# NestJs build output
|
|
85
|
+
**/dist
|
|
86
|
+
|
|
87
|
+
# Node modules
|
|
88
|
+
**/node_modules
|
|
89
|
+
|
|
90
|
+
# compiled output# Tests
|
|
91
|
+
/coverage
|
|
92
|
+
/.nyc_output
|
|
93
|
+
|
|
94
|
+
# Jest cache
|
|
95
|
+
/.jest
|
|
96
|
+
.jest/
|
|
97
|
+
/.jest-cache
|
|
98
|
+
.jest-cache//node_modules
|
|
99
|
+
/build
|
|
100
|
+
|
|
101
|
+
# Logs
|
|
102
|
+
logs
|
|
103
|
+
*.log
|
|
104
|
+
npm-debug.log*
|
|
105
|
+
pnpm-debug.log*
|
|
106
|
+
yarn-debug.log*
|
|
107
|
+
yarn-error.log*
|
|
108
|
+
lerna-debug.log*
|
|
109
|
+
|
|
110
|
+
# OS
|
|
111
|
+
.DS_Store
|
|
112
|
+
|
|
113
|
+
# Tests
|
|
114
|
+
/coverage
|
|
115
|
+
/.nyc_output
|
|
116
|
+
|
|
117
|
+
# IDEs and editors
|
|
118
|
+
/.idea
|
|
119
|
+
.project
|
|
120
|
+
.classpath
|
|
121
|
+
.c9/
|
|
122
|
+
*.launch
|
|
123
|
+
.settings/
|
|
124
|
+
*.sublime-workspace
|
|
125
|
+
|
|
126
|
+
# IDE - VSCode
|
|
127
|
+
.vscode/*
|
|
128
|
+
!.vscode/settings.json
|
|
129
|
+
!.vscode/tasks.json
|
|
130
|
+
!.vscode/launch.json
|
|
131
|
+
!.vscode/extensions.json
|
|
132
|
+
|
|
133
|
+
# dotenv environment variable files
|
|
134
|
+
**/.env
|
|
135
|
+
.env.development.local
|
|
136
|
+
.env.test.local
|
|
137
|
+
.env.production.local
|
|
138
|
+
.env.local
|
|
139
|
+
.env*
|
|
140
|
+
!**/.env.example
|
|
141
|
+
!**/.env.*.example
|
|
142
|
+
!.env.example
|
|
143
|
+
!**/.env.e2e
|
|
144
|
+
# canopy-mobile dev-profile runtime config: PUBLIC by design (Firebase web
|
|
145
|
+
# apiKey + dev API hosts, same values as the k8s webConfig ConfigMap) and
|
|
146
|
+
# committed so `expo start` gets the dev EXPO_PUBLIC_* vars (mobile auth E3-s3).
|
|
147
|
+
!apps/canopy-mobile/.env.development
|
|
148
|
+
|
|
149
|
+
# temp directory
|
|
150
|
+
.temp
|
|
151
|
+
.tmp
|
|
152
|
+
|
|
153
|
+
# Runtime data
|
|
154
|
+
pids
|
|
155
|
+
*.pid
|
|
156
|
+
*.seed
|
|
157
|
+
*.pid.lock
|
|
158
|
+
|
|
159
|
+
# Diagnostic reports (https://nodejs.org/api/report.html)
|
|
160
|
+
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
|
|
161
|
+
|
|
162
|
+
# helm/kube secrets
|
|
163
|
+
**/*.secret.yaml
|
|
164
|
+
**/*.secret.*
|
|
165
|
+
|
|
166
|
+
# migration-tool local k8s run manifests (operational scratch, not deployed via GitOps)
|
|
167
|
+
tools/canopy-migration-tool/k8s/
|
|
168
|
+
|
|
169
|
+
# database files
|
|
170
|
+
*.sqlite
|
|
171
|
+
*.sqlite3
|
|
172
|
+
|
|
173
|
+
# Data directories
|
|
174
|
+
**/data/
|
|
175
|
+
|
|
176
|
+
# backups
|
|
177
|
+
*.bak
|
|
178
|
+
*.backup
|
|
179
|
+
backups/
|
|
180
|
+
|
|
181
|
+
# release manifests (generated artifacts)
|
|
182
|
+
release-manifests/
|
|
183
|
+
|
|
184
|
+
# secrets folder
|
|
185
|
+
**/secrets*
|
|
186
|
+
vite.config.*.timestamp*
|
|
187
|
+
|
|
188
|
+
# Next.js
|
|
189
|
+
.next
|
|
190
|
+
out
|
|
191
|
+
|
|
192
|
+
vitest.config.*.timestamp*
|
|
193
|
+
|
|
194
|
+
# Python
|
|
195
|
+
*.py[cod]
|
|
196
|
+
__pycache__/
|
|
197
|
+
*.so
|
|
198
|
+
*.egg
|
|
199
|
+
*.egg-info/
|
|
200
|
+
dist-python/
|
|
201
|
+
build-python/
|
|
202
|
+
.eggs/
|
|
203
|
+
.pytest_cache/
|
|
204
|
+
.mypy_cache/
|
|
205
|
+
.ruff_cache/
|
|
206
|
+
.coverage
|
|
207
|
+
.coverage.*
|
|
208
|
+
htmlcov/
|
|
209
|
+
*.cover
|
|
210
|
+
.hypothesis/
|
|
211
|
+
*.log
|
|
212
|
+
.uv/
|
|
213
|
+
.venv/
|
|
214
|
+
venv/
|
|
215
|
+
ENV/
|
|
216
|
+
env/
|
|
217
|
+
pip-log.txt
|
|
218
|
+
pip-delete-this-directory.txt
|
|
219
|
+
.Python
|
|
220
|
+
# Ralph orchestration files
|
|
221
|
+
.ralph/
|
|
222
|
+
.ralph-task-*.md
|
|
223
|
+
.spec-task.md
|
|
224
|
+
|
|
225
|
+
# Canopy agent worktrees (created by /canopy-handoff via `git worktree add`)
|
|
226
|
+
# Registered worktrees are already excluded from `git status` by git itself; this
|
|
227
|
+
# entry is defensive against orphan state from failed `git worktree remove` runs
|
|
228
|
+
# or manual `mkdir .worktrees/...` outside the canopy-* skill flow.
|
|
229
|
+
.worktrees/
|
|
230
|
+
|
|
231
|
+
# tools/<name>/output/ — per-run artifacts from operator CLIs
|
|
232
|
+
# (e.g. tools/tenant-inventory/output/<timestamp>.{json,md}).
|
|
233
|
+
# Per-run manifests should never land in PRs.
|
|
234
|
+
tools/*/output/
|
|
235
|
+
|
|
236
|
+
.nx/polygraph
|
|
237
|
+
.claude/worktrees
|
|
238
|
+
.claude/settings.local.json
|
|
239
|
+
|
|
240
|
+
# Storybook static build outputs
|
|
241
|
+
react/ui/storybook-static/
|
|
242
|
+
|
|
243
|
+
# eflow story plan dirs — local scratch, exchanged via Notion Tech Notes, never committed
|
|
244
|
+
.plan/
|
|
245
|
+
|
|
246
|
+
# eflow session-hook runtime state — per-session bookkeeping, never committed
|
|
247
|
+
.eflow/
|
|
248
|
+
|
|
249
|
+
# Playwright MCP debug output (console logs, page snapshots) — local scratch
|
|
250
|
+
.playwright-mcp/
|
|
251
|
+
|
|
252
|
+
# Expo
|
|
253
|
+
node_modules/
|
|
254
|
+
.expo/
|
|
255
|
+
.yarn/
|
|
256
|
+
dist/
|
|
257
|
+
npm-debug.*
|
|
258
|
+
*.jks
|
|
259
|
+
*.p8
|
|
260
|
+
*.p12
|
|
261
|
+
*.key
|
|
262
|
+
*.mobileprovision
|
|
263
|
+
*.orig.*
|
|
264
|
+
web-build/
|
|
265
|
+
cache/
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
# entitlement-backfill runbook bundle artifact (docs/auth/entitlement-backfill-runbook.md)
|
|
269
|
+
.backfill-cli.cjs
|
|
270
|
+
|
|
271
|
+
# TypeScript incremental-build cache — machine-specific, never committed
|
|
272
|
+
*.tsbuildinfo
|
|
273
|
+
|
|
274
|
+
.nx/self-healing
|
|
275
|
+
.nx/migrate-runs
|
|
276
|
+
|
|
277
|
+
# canopy-mobile Android toolchain env (generated by apps/canopy-mobile/tools/android-setup.sh)
|
|
278
|
+
apps/canopy-mobile/.android-env.sh
|
|
279
|
+
|
|
280
|
+
# Warm npm cache baked into the ARC runner image at build time (see
|
|
281
|
+
# .github/workflows/build-runner-image.yml) — contents are generated, never committed.
|
|
282
|
+
.github/runner-image/npm-cache/*
|
|
283
|
+
!.github/runner-image/npm-cache/.gitkeep
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: canopy-ag-sdk
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Official Python SDK for the Canopy Customer API (api-stg.canopy.ag/v1): openapi-python-client generated transport + a thin wrapper with env contract and API-key redaction.
|
|
5
|
+
License: MIT
|
|
6
|
+
Keywords: canopy,iot,irrigation,openapi,sdk
|
|
7
|
+
Requires-Python: >=3.11
|
|
8
|
+
Requires-Dist: attrs>=22.2.0
|
|
9
|
+
Requires-Dist: httpx<0.29,>=0.23.1
|
|
10
|
+
Requires-Dist: python-dateutil>=2.8.0
|
|
11
|
+
Description-Content-Type: text/markdown
|
|
12
|
+
|
|
13
|
+
# canopy-ag-sdk
|
|
14
|
+
|
|
15
|
+
Official Python SDK for the [Canopy Customer API](https://api-stg.canopy.ag/v1) —
|
|
16
|
+
transport generated from the committed public spec (`spec/public/openapi.json`)
|
|
17
|
+
by [openapi-python-client](https://github.com/openapi-generators/openapi-python-client),
|
|
18
|
+
wrapped by a thin hand-written layer that owns the env contract and API-key
|
|
19
|
+
redaction.
|
|
20
|
+
|
|
21
|
+
## Install
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
pip install canopy-ag-sdk
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
> **Package-name note:** the distribution is `canopy-ag-sdk` but the import
|
|
28
|
+
> names are `canopy_sdk` (wrapper) and `canopy_sdk_client` (generated
|
|
29
|
+
> transport) — a Python distribution name and its import name need not match.
|
|
30
|
+
> The distribution is **not** `canopy-sdk`: that name was already taken on PyPI
|
|
31
|
+
> by an unrelated project (Pinecone's RAG framework / context engine) before
|
|
32
|
+
> Canopy's first publish, so `canopy-ag-sdk` was chosen to mirror the
|
|
33
|
+
> `@canopy-ag/` npm scope used by the TypeScript SDK. That squatted
|
|
34
|
+
> distribution installs top-level `canopy` / `canopy_cli` / `canopy_server`, so
|
|
35
|
+
> it does not collide with our import names even if both are installed. See
|
|
36
|
+
> [`docs/ci/public-sdk-publishing.md`](../../../docs/ci/public-sdk-publishing.md)
|
|
37
|
+
> (`.github/workflows/publish-public-sdk.yml`) for how publishing (PyPI OIDC
|
|
38
|
+
> trusted publishing — no token) and versioning (the version tracks
|
|
39
|
+
> `spec/public/openapi.json` `info.version`) work.
|
|
40
|
+
|
|
41
|
+
Requires Python >= 3.11 (the generated client pins `httpx >= 0.23.1, < 0.29`).
|
|
42
|
+
|
|
43
|
+
## Quickstart — list irrigation zones
|
|
44
|
+
|
|
45
|
+
Only `CANOPY_API_KEY` needs to be set (7 lines of code):
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
from canopy_sdk import CanopyClient
|
|
49
|
+
from canopy_sdk_client.api.irrigation_zones import irrigation_zones_controller_find_all
|
|
50
|
+
|
|
51
|
+
client = CanopyClient() # reads CANOPY_API_KEY
|
|
52
|
+
zones = irrigation_zones_controller_find_all.sync(
|
|
53
|
+
client=client.raw, x_tenant_id="<your-tenant-uuid>"
|
|
54
|
+
)
|
|
55
|
+
print(zones)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Every operation in the public spec has a module under `canopy_sdk_client.api.*`
|
|
59
|
+
with `sync` / `sync_detailed` / `asyncio` / `asyncio_detailed` variants; pass
|
|
60
|
+
`client=client.raw` to any of them.
|
|
61
|
+
|
|
62
|
+
## Environment contract
|
|
63
|
+
|
|
64
|
+
| Variable | Required | Behavior |
|
|
65
|
+
| --------------------- | -------- | --------------------------------------------------------------------------------------- |
|
|
66
|
+
| `CANOPY_API_KEY` | yes | `CanopyClient()` **fails fast** with `MissingApiKeyError` naming this variable if unset. |
|
|
67
|
+
| `CANOPY_API_BASE_URL` | no | Overrides the default base URL `https://api-stg.canopy.ag/v1` (`DEFAULT_BASE_URL`). |
|
|
68
|
+
|
|
69
|
+
Both can also be passed programmatically — `CanopyClient(api_key=..., base_url=...)`
|
|
70
|
+
(arguments win over the environment).
|
|
71
|
+
|
|
72
|
+
## Key redaction guarantee
|
|
73
|
+
|
|
74
|
+
The API key never appears in:
|
|
75
|
+
|
|
76
|
+
- `repr()` / `str()` of `CanopyClient` (rendered as `[REDACTED]`),
|
|
77
|
+
- exceptions raised through the request path (scrubbed by a wrapping transport),
|
|
78
|
+
- httpx logs at default (INFO) level.
|
|
79
|
+
|
|
80
|
+
Pinned by the leak tests in `tests/test_redaction.py` (written first, per the
|
|
81
|
+
story brief). **Do not `repr()` the raw generated client** (`client.raw`) —
|
|
82
|
+
its attrs-generated repr is not redacted; treat it as a transport handle only.
|
|
83
|
+
|
|
84
|
+
## Regenerating the transport
|
|
85
|
+
|
|
86
|
+
`src/canopy_sdk_client/` is generated code — committed, drift-gated in CI
|
|
87
|
+
(`sdk-python-drift` in `.github/workflows/pr-checks.yml`), and never hand-edited.
|
|
88
|
+
After any change to `spec/public/openapi.json`:
|
|
89
|
+
|
|
90
|
+
```sh
|
|
91
|
+
npx nx run sdk-python:generate # or: bash libs/sdk/python/tools/generate.sh
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Generator + ruff post-hook versions are pinned inside `tools/generate.sh` so
|
|
95
|
+
regeneration is byte-identical everywhere.
|
|
96
|
+
|
|
97
|
+
## Development
|
|
98
|
+
|
|
99
|
+
```sh
|
|
100
|
+
npx nx run sdk-python:install # uv sync
|
|
101
|
+
npx nx run sdk-python:test # uv run pytest tests/ -v
|
|
102
|
+
npx nx run sdk-python:lint # ruff check on the hand-written surface
|
|
103
|
+
npx nx run sdk-python:build # uv build (wheel + sdist)
|
|
104
|
+
```
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# canopy-ag-sdk
|
|
2
|
+
|
|
3
|
+
Official Python SDK for the [Canopy Customer API](https://api-stg.canopy.ag/v1) —
|
|
4
|
+
transport generated from the committed public spec (`spec/public/openapi.json`)
|
|
5
|
+
by [openapi-python-client](https://github.com/openapi-generators/openapi-python-client),
|
|
6
|
+
wrapped by a thin hand-written layer that owns the env contract and API-key
|
|
7
|
+
redaction.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```sh
|
|
12
|
+
pip install canopy-ag-sdk
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
> **Package-name note:** the distribution is `canopy-ag-sdk` but the import
|
|
16
|
+
> names are `canopy_sdk` (wrapper) and `canopy_sdk_client` (generated
|
|
17
|
+
> transport) — a Python distribution name and its import name need not match.
|
|
18
|
+
> The distribution is **not** `canopy-sdk`: that name was already taken on PyPI
|
|
19
|
+
> by an unrelated project (Pinecone's RAG framework / context engine) before
|
|
20
|
+
> Canopy's first publish, so `canopy-ag-sdk` was chosen to mirror the
|
|
21
|
+
> `@canopy-ag/` npm scope used by the TypeScript SDK. That squatted
|
|
22
|
+
> distribution installs top-level `canopy` / `canopy_cli` / `canopy_server`, so
|
|
23
|
+
> it does not collide with our import names even if both are installed. See
|
|
24
|
+
> [`docs/ci/public-sdk-publishing.md`](../../../docs/ci/public-sdk-publishing.md)
|
|
25
|
+
> (`.github/workflows/publish-public-sdk.yml`) for how publishing (PyPI OIDC
|
|
26
|
+
> trusted publishing — no token) and versioning (the version tracks
|
|
27
|
+
> `spec/public/openapi.json` `info.version`) work.
|
|
28
|
+
|
|
29
|
+
Requires Python >= 3.11 (the generated client pins `httpx >= 0.23.1, < 0.29`).
|
|
30
|
+
|
|
31
|
+
## Quickstart — list irrigation zones
|
|
32
|
+
|
|
33
|
+
Only `CANOPY_API_KEY` needs to be set (7 lines of code):
|
|
34
|
+
|
|
35
|
+
```python
|
|
36
|
+
from canopy_sdk import CanopyClient
|
|
37
|
+
from canopy_sdk_client.api.irrigation_zones import irrigation_zones_controller_find_all
|
|
38
|
+
|
|
39
|
+
client = CanopyClient() # reads CANOPY_API_KEY
|
|
40
|
+
zones = irrigation_zones_controller_find_all.sync(
|
|
41
|
+
client=client.raw, x_tenant_id="<your-tenant-uuid>"
|
|
42
|
+
)
|
|
43
|
+
print(zones)
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Every operation in the public spec has a module under `canopy_sdk_client.api.*`
|
|
47
|
+
with `sync` / `sync_detailed` / `asyncio` / `asyncio_detailed` variants; pass
|
|
48
|
+
`client=client.raw` to any of them.
|
|
49
|
+
|
|
50
|
+
## Environment contract
|
|
51
|
+
|
|
52
|
+
| Variable | Required | Behavior |
|
|
53
|
+
| --------------------- | -------- | --------------------------------------------------------------------------------------- |
|
|
54
|
+
| `CANOPY_API_KEY` | yes | `CanopyClient()` **fails fast** with `MissingApiKeyError` naming this variable if unset. |
|
|
55
|
+
| `CANOPY_API_BASE_URL` | no | Overrides the default base URL `https://api-stg.canopy.ag/v1` (`DEFAULT_BASE_URL`). |
|
|
56
|
+
|
|
57
|
+
Both can also be passed programmatically — `CanopyClient(api_key=..., base_url=...)`
|
|
58
|
+
(arguments win over the environment).
|
|
59
|
+
|
|
60
|
+
## Key redaction guarantee
|
|
61
|
+
|
|
62
|
+
The API key never appears in:
|
|
63
|
+
|
|
64
|
+
- `repr()` / `str()` of `CanopyClient` (rendered as `[REDACTED]`),
|
|
65
|
+
- exceptions raised through the request path (scrubbed by a wrapping transport),
|
|
66
|
+
- httpx logs at default (INFO) level.
|
|
67
|
+
|
|
68
|
+
Pinned by the leak tests in `tests/test_redaction.py` (written first, per the
|
|
69
|
+
story brief). **Do not `repr()` the raw generated client** (`client.raw`) —
|
|
70
|
+
its attrs-generated repr is not redacted; treat it as a transport handle only.
|
|
71
|
+
|
|
72
|
+
## Regenerating the transport
|
|
73
|
+
|
|
74
|
+
`src/canopy_sdk_client/` is generated code — committed, drift-gated in CI
|
|
75
|
+
(`sdk-python-drift` in `.github/workflows/pr-checks.yml`), and never hand-edited.
|
|
76
|
+
After any change to `spec/public/openapi.json`:
|
|
77
|
+
|
|
78
|
+
```sh
|
|
79
|
+
npx nx run sdk-python:generate # or: bash libs/sdk/python/tools/generate.sh
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Generator + ruff post-hook versions are pinned inside `tools/generate.sh` so
|
|
83
|
+
regeneration is byte-identical everywhere.
|
|
84
|
+
|
|
85
|
+
## Development
|
|
86
|
+
|
|
87
|
+
```sh
|
|
88
|
+
npx nx run sdk-python:install # uv sync
|
|
89
|
+
npx nx run sdk-python:test # uv run pytest tests/ -v
|
|
90
|
+
npx nx run sdk-python:lint # ruff check on the hand-written surface
|
|
91
|
+
npx nx run sdk-python:build # uv build (wheel + sdist)
|
|
92
|
+
```
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# openapi-python-client config for the Canopy Python SDK.
|
|
2
|
+
# Consumed by tools/generate.sh (which pins the generator + ruff versions).
|
|
3
|
+
# package_name_override controls the generated top-level package directory
|
|
4
|
+
# (committed at src/canopy_sdk_client, imported by the canopy_sdk wrapper);
|
|
5
|
+
# project_name_override is the PyPI distribution name the wrapper ships under.
|
|
6
|
+
# Keep project_name_override in sync with [project] name in pyproject.toml —
|
|
7
|
+
# "canopy-sdk" is squatted on PyPI, so the distribution is "canopy-ag-sdk".
|
|
8
|
+
# (generate.sh passes --meta none, so this value emits no files; it is kept
|
|
9
|
+
# accurate so the generated config never contradicts the shipped manifest.)
|
|
10
|
+
project_name_override: canopy-ag-sdk
|
|
11
|
+
package_name_override: canopy_sdk_client
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sdk-python",
|
|
3
|
+
"$schema": "../../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
+
"sourceRoot": "libs/sdk/python/src",
|
|
5
|
+
"projectType": "library",
|
|
6
|
+
"tags": ["type:util", "scope:shared", "platform:python"],
|
|
7
|
+
"targets": {
|
|
8
|
+
"install": {
|
|
9
|
+
"executor": "nx:run-commands",
|
|
10
|
+
"options": {
|
|
11
|
+
"command": "cd libs/sdk/python && uv sync",
|
|
12
|
+
"cwd": "."
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"generate": {
|
|
16
|
+
"executor": "nx:run-commands",
|
|
17
|
+
"options": {
|
|
18
|
+
"command": "bash libs/sdk/python/tools/generate.sh",
|
|
19
|
+
"cwd": "{workspaceRoot}"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"test": {
|
|
23
|
+
"executor": "nx:run-commands",
|
|
24
|
+
"options": {
|
|
25
|
+
"command": "cd libs/sdk/python && uv run pytest tests/ -v",
|
|
26
|
+
"cwd": "."
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"lint": {
|
|
30
|
+
"executor": "nx:run-commands",
|
|
31
|
+
"options": {
|
|
32
|
+
"command": "cd libs/sdk/python && uv run ruff check src/canopy_sdk tests/",
|
|
33
|
+
"cwd": "."
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"build": {
|
|
37
|
+
"executor": "nx:run-commands",
|
|
38
|
+
"outputs": ["{workspaceRoot}/libs/sdk/python/dist"],
|
|
39
|
+
"options": {
|
|
40
|
+
"command": "cd libs/sdk/python && uv build --out-dir dist",
|
|
41
|
+
"cwd": "."
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
# Distribution name. NOT "canopy-sdk": that name is already taken on PyPI by an
|
|
3
|
+
# unrelated project (Pinecone's RAG framework / context engine, 0.9.0), so it is
|
|
4
|
+
# unobtainable. "canopy-ag-sdk" mirrors the @canopy-ag/ npm scope used by the
|
|
5
|
+
# TypeScript SDK. The IMPORT names stay canopy_sdk / canopy_sdk_client (see
|
|
6
|
+
# [tool.hatch.build.targets.wheel] below) — a distribution name and an import
|
|
7
|
+
# name need not match, and the squatted distribution installs top-level
|
|
8
|
+
# `canopy` / `canopy_cli` / `canopy_server`, so there is no import collision
|
|
9
|
+
# even for a consumer who installs both.
|
|
10
|
+
name = "canopy-ag-sdk"
|
|
11
|
+
version = "0.1.0"
|
|
12
|
+
description = "Official Python SDK for the Canopy Customer API (api-stg.canopy.ag/v1): openapi-python-client generated transport + a thin wrapper with env contract and API-key redaction."
|
|
13
|
+
readme = "README.md"
|
|
14
|
+
license = { text = "MIT" }
|
|
15
|
+
requires-python = ">=3.11"
|
|
16
|
+
keywords = ["canopy", "sdk", "openapi", "irrigation", "iot"]
|
|
17
|
+
dependencies = [
|
|
18
|
+
# Inherited from the openapi-python-client (0.29.x) generated client.
|
|
19
|
+
"httpx>=0.23.1,<0.29",
|
|
20
|
+
"attrs>=22.2.0",
|
|
21
|
+
"python-dateutil>=2.8.0",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
[dependency-groups]
|
|
25
|
+
dev = [
|
|
26
|
+
"pytest>=7.4.0",
|
|
27
|
+
"ruff>=0.6.0",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[build-system]
|
|
31
|
+
requires = ["hatchling"]
|
|
32
|
+
build-backend = "hatchling.build"
|
|
33
|
+
|
|
34
|
+
[tool.hatch.build.targets.wheel]
|
|
35
|
+
# Two top-level packages in one distribution: the hand-written wrapper
|
|
36
|
+
# (canopy_sdk) and the committed generated transport (canopy_sdk_client —
|
|
37
|
+
# regenerated only via tools/generate.sh, never hand-edited).
|
|
38
|
+
packages = ["src/canopy_sdk", "src/canopy_sdk_client"]
|
|
39
|
+
|
|
40
|
+
[tool.pytest.ini_options]
|
|
41
|
+
testpaths = ["tests"]
|
|
42
|
+
# JUnit XML lands in the workspace-shared test-results/ tree consumed by
|
|
43
|
+
# scripts/summarize-test-results.ts. Path is relative to this file's directory
|
|
44
|
+
# (libs/sdk/python/), so ../../../ resolves to the repo root.
|
|
45
|
+
addopts = "--junitxml=../../../test-results/sdk-python-pytest.xml"
|
|
46
|
+
|
|
47
|
+
[tool.ruff]
|
|
48
|
+
line-length = 100
|
|
49
|
+
target-version = "py311"
|
|
50
|
+
# Generated code is ruff-formatted by the generator's own pinned post-hooks;
|
|
51
|
+
# lint only the hand-written surface.
|
|
52
|
+
extend-exclude = ["src/canopy_sdk_client"]
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"""canopy-ag-sdk — official Python SDK for the Canopy Customer API.
|
|
2
|
+
|
|
3
|
+
Installed as ``pip install canopy-ag-sdk``; imported as ``canopy_sdk``.
|
|
4
|
+
|
|
5
|
+
Quickstart (only ``CANOPY_API_KEY`` needs to be set)::
|
|
6
|
+
|
|
7
|
+
from canopy_sdk import CanopyClient
|
|
8
|
+
from canopy_sdk_client.api.irrigation_zones import irrigation_zones_controller_find_all
|
|
9
|
+
|
|
10
|
+
client = CanopyClient() # reads CANOPY_API_KEY
|
|
11
|
+
zones = irrigation_zones_controller_find_all.sync(
|
|
12
|
+
client=client.raw, x_tenant_id="<your-tenant-uuid>"
|
|
13
|
+
)
|
|
14
|
+
print(zones)
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from .client import (
|
|
18
|
+
DEFAULT_BASE_URL,
|
|
19
|
+
CanopyClient,
|
|
20
|
+
CanopyError,
|
|
21
|
+
MissingApiKeyError,
|
|
22
|
+
)
|
|
23
|
+
from .redaction import REDACTED, redact_secret
|
|
24
|
+
|
|
25
|
+
__all__ = [
|
|
26
|
+
"DEFAULT_BASE_URL",
|
|
27
|
+
"REDACTED",
|
|
28
|
+
"CanopyClient",
|
|
29
|
+
"CanopyError",
|
|
30
|
+
"MissingApiKeyError",
|
|
31
|
+
"redact_secret",
|
|
32
|
+
]
|