gea-program 0.30.1__tar.gz → 0.32.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.
- {gea_program-0.30.1/gea_program.egg-info → gea_program-0.32.0}/PKG-INFO +39 -4
- {gea_program-0.30.1 → gea_program-0.32.0}/README.md +38 -3
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/__init__.py +1 -1
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/__main__.py +115 -4
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/acceptance_tests.py +316 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/gamma.py +2 -2
- gea_program-0.32.0/gea/help/setup.md +11 -0
- gea_program-0.32.0/gea/help/tools.md +11 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/helplib.py +3 -2
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/osdu.py +5 -5
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/ppdm.py +7 -1
- gea_program-0.32.0/gea/reference/tool_sources.json +3046 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/service.py +62 -2
- gea_program-0.32.0/gea/setup_checklist.py +256 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/sra.py +1 -1
- gea_program-0.32.0/gea/tool_taxonomy.py +905 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/web/app.html +176 -4
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/workspace.py +16 -2
- {gea_program-0.30.1 → gea_program-0.32.0/gea_program.egg-info}/PKG-INFO +39 -4
- {gea_program-0.30.1 → gea_program-0.32.0}/gea_program.egg-info/SOURCES.txt +4 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/pyproject.toml +1 -1
- gea_program-0.30.1/gea/help/tools.md +0 -11
- {gea_program-0.30.1 → gea_program-0.32.0}/LICENSE +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/accuracy_statement.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/alarm_engine.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/backup.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/bench.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/blind_harness.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog_map.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/catalog_register.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/certificates.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/cli.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/client_reports.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/config_versioning.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/conformance.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/correlation.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/dashboard.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/deviation.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/dlis.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/dnp3.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/doctor.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/downhole_engine.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/drift_monitor.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/earth_model.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/edr.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/elevation.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/etp.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/etp12_schemas.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/example_register_map.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/fat_sat.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/files.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/fixtures/README.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/fixtures/ne_110m_coastline.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/follower.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/forward_model.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/friction_priors.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/gauge_aging.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/gauge_specs.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/geodesy.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/gravity_reference.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/hartip.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/TESTER_GUIDE.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/alarms.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/audit-update.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/backup.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/catalog.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/conformance.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/data-in.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/dlis.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/doctor.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/drift.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/edr.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/etp.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/field-ports.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/files.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/historian.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/instruments.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/interval.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/month-end.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/notifications.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/osdu.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/patches.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/ppdm.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/quakeml.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/quality.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/seedlink.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/seismic.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/site.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/sites.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/slip.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/soak.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/sra.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/start.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/structure.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/transients.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/upkeep.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/vibration.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/help/well-tests.md +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/housekeeping.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/interval.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/inverse_engine.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/jobs.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/live_ports.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/loadtest.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/matplotlib_demo.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/modbus.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/modbus_rtu.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/model_card.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/month_end.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/mqtt_port.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/notify.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/opcua_port.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/operator_app.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/patches.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/permits.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/piwebapi.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/ports.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/profile_catalog.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/project.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/qt6_downhole_app.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/quakeml.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/reconciler.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/reference/libmseed_steim.provenance.json +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/rock_inventory.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/sample_record.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/sbom.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seedlink.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/segy.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_array.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_assoc.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_detect.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_film.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_harmonic.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_qc.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_response.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_signature.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_track.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_uncertainty.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/seismic_unlisted.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/sensor_swap.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/service_life.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/shapefile.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/shell.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/shut_in.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/sla_report.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/slip.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/soak.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/store_forward.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/strata_join.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/structure.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/supervisor.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/survey_cmd.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/survey_view.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/telemetry.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/tool_catalog.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/tool_library.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/transient.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/vibration.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/well_assembler.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/well_test_validation.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/wits0.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea/witsml.py +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/setup.cfg +0 -0
- {gea_program-0.30.1 → gea_program-0.32.0}/tests/test_acceptance.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: gea-program
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.32.0
|
|
4
4
|
Summary: GEA-Program: downhole gauge monitoring - canonical measurement records, quality rules, drift evaluation with a re-fit change log, well-test validation, alarm management, model cards, store-and-forward, monthly SLA measurement, FAT/SAT protocols and a dashboard, generated from live objects in the client's reporting outline.
|
|
5
5
|
Author: Daniel T. Murphy
|
|
6
6
|
License: MPL-2.0
|
|
@@ -125,7 +125,7 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
125
125
|
gea client-report --report accuracy --out client_report
|
|
126
126
|
gea model-cards --out model_cards
|
|
127
127
|
gea sbom --out sbom
|
|
128
|
-
gea accept # the product gate (
|
|
128
|
+
gea accept # the product gate (383 checks)
|
|
129
129
|
gea help drift # the help library, by the job (16 pages; the same text is on every dashboard page)
|
|
130
130
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
131
131
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
@@ -648,10 +648,45 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
|
|
|
648
648
|
itself; `gea help seedlink`. A TexNet station is served by EarthScope at
|
|
649
649
|
`rtserve.iris.washington.edu:18000`, network `TX`.
|
|
650
650
|
|
|
651
|
+
### The setup checklist
|
|
652
|
+
|
|
653
|
+
The Setup tab (`#/setup`, `gea checklist --workspace C:\site`) says what a
|
|
654
|
+
workspace still needs before its reports can be handed over, read from the
|
|
655
|
+
workspace as it stands: an administrator, the wells, a site record naming
|
|
656
|
+
the client, a backup folder off the machine, a current backup, the daily
|
|
657
|
+
schedule, current reports, and for each well its surface location and
|
|
658
|
+
datum, its reference elevation with its source, and its US Well Number.
|
|
659
|
+
Each item carries its own form or button - declare the position, take the
|
|
660
|
+
ground level from USGS 3DEP to check, create the site, back up now - and,
|
|
661
|
+
where every value is already known, the command to paste. The tab's badge
|
|
662
|
+
counts the required items still to do and the Home page names the next
|
|
663
|
+
one. A drilling record's depth events are confirmed by a person against
|
|
664
|
+
the daily drilling reports, with a note; the confirmation stops counting
|
|
665
|
+
if the record changes. `gea checklist` exits 0 when everything required is
|
|
666
|
+
done. `gea help setup`.
|
|
667
|
+
|
|
651
668
|
### Tools and ports
|
|
652
669
|
|
|
653
|
-
The Tools & ports tab (`#/tools`, `gea tools`)
|
|
654
|
-
|
|
670
|
+
The Tools & ports tab (`#/tools`, `gea tools`) opens on the **downhole tool
|
|
671
|
+
library**: every class of downhole tool in use across the industry - bits
|
|
672
|
+
and hole openers, motors and rotary steerable systems, MWD and LWD, the drill
|
|
673
|
+
string and its subs, casing and cementing equipment, completion and
|
|
674
|
+
artificial lift, wireline and cased-hole tools, fishing and milling, test
|
|
675
|
+
tools - ninety-six classes in nine categories. Point at a tool, or Tab to
|
|
676
|
+
it, for a one-line description; click, tap or press Enter for its tutorial:
|
|
677
|
+
what it is, where it runs, how it works, what it shows in the data, what to
|
|
678
|
+
watch, and what this program does with it, with the published figures
|
|
679
|
+
quoted from the pages they cite and the pages themselves. The tutorials
|
|
680
|
+
carry no numbers of their own; a figure on a tool's card is the cited page's
|
|
681
|
+
words, most often one maker's product, never a limit for the class. Your
|
|
682
|
+
**fleet** - the tools you actually run - goes in beside the classes, each
|
|
683
|
+
with its maker, model, serial and the datasheet that rates it
|
|
684
|
+
(`gea tools --action fleet-add --workspace C:\site --class pdm_motor
|
|
685
|
+
--maker ... --model ... --datasheet ...`, or from the tutorial), kept in the
|
|
686
|
+
workspace and audited. `gea tools --action classes`, `--action tutorial
|
|
687
|
+
--class drilling_jar`.
|
|
688
|
+
|
|
689
|
+
Below it are the program's two registers: the gauge library - every gauge
|
|
655
690
|
with its source citation, ratings, what it measures, the telemetry interface
|
|
656
691
|
it declares and its datasheet aging rate where the vendor published one -
|
|
657
692
|
and the ports, the file formats read and the eleven live protocols spoken,
|
|
@@ -86,7 +86,7 @@ gea dashboard --catalog-well volve_f12_f14_production_excerpt:15/9-F-12:10000 --
|
|
|
86
86
|
gea client-report --report accuracy --out client_report
|
|
87
87
|
gea model-cards --out model_cards
|
|
88
88
|
gea sbom --out sbom
|
|
89
|
-
gea accept # the product gate (
|
|
89
|
+
gea accept # the product gate (383 checks)
|
|
90
90
|
gea help drift # the help library, by the job (16 pages; the same text is on every dashboard page)
|
|
91
91
|
gea guide # the click-by-click tester guide (docs/TESTER_GUIDE.md)
|
|
92
92
|
gea gui # the desktop window (pip install "gea-program[desktop]")
|
|
@@ -609,10 +609,45 @@ against it; `gea seedlink --config ... --hello` prints what a server says of
|
|
|
609
609
|
itself; `gea help seedlink`. A TexNet station is served by EarthScope at
|
|
610
610
|
`rtserve.iris.washington.edu:18000`, network `TX`.
|
|
611
611
|
|
|
612
|
+
### The setup checklist
|
|
613
|
+
|
|
614
|
+
The Setup tab (`#/setup`, `gea checklist --workspace C:\site`) says what a
|
|
615
|
+
workspace still needs before its reports can be handed over, read from the
|
|
616
|
+
workspace as it stands: an administrator, the wells, a site record naming
|
|
617
|
+
the client, a backup folder off the machine, a current backup, the daily
|
|
618
|
+
schedule, current reports, and for each well its surface location and
|
|
619
|
+
datum, its reference elevation with its source, and its US Well Number.
|
|
620
|
+
Each item carries its own form or button - declare the position, take the
|
|
621
|
+
ground level from USGS 3DEP to check, create the site, back up now - and,
|
|
622
|
+
where every value is already known, the command to paste. The tab's badge
|
|
623
|
+
counts the required items still to do and the Home page names the next
|
|
624
|
+
one. A drilling record's depth events are confirmed by a person against
|
|
625
|
+
the daily drilling reports, with a note; the confirmation stops counting
|
|
626
|
+
if the record changes. `gea checklist` exits 0 when everything required is
|
|
627
|
+
done. `gea help setup`.
|
|
628
|
+
|
|
612
629
|
### Tools and ports
|
|
613
630
|
|
|
614
|
-
The Tools & ports tab (`#/tools`, `gea tools`)
|
|
615
|
-
|
|
631
|
+
The Tools & ports tab (`#/tools`, `gea tools`) opens on the **downhole tool
|
|
632
|
+
library**: every class of downhole tool in use across the industry - bits
|
|
633
|
+
and hole openers, motors and rotary steerable systems, MWD and LWD, the drill
|
|
634
|
+
string and its subs, casing and cementing equipment, completion and
|
|
635
|
+
artificial lift, wireline and cased-hole tools, fishing and milling, test
|
|
636
|
+
tools - ninety-six classes in nine categories. Point at a tool, or Tab to
|
|
637
|
+
it, for a one-line description; click, tap or press Enter for its tutorial:
|
|
638
|
+
what it is, where it runs, how it works, what it shows in the data, what to
|
|
639
|
+
watch, and what this program does with it, with the published figures
|
|
640
|
+
quoted from the pages they cite and the pages themselves. The tutorials
|
|
641
|
+
carry no numbers of their own; a figure on a tool's card is the cited page's
|
|
642
|
+
words, most often one maker's product, never a limit for the class. Your
|
|
643
|
+
**fleet** - the tools you actually run - goes in beside the classes, each
|
|
644
|
+
with its maker, model, serial and the datasheet that rates it
|
|
645
|
+
(`gea tools --action fleet-add --workspace C:\site --class pdm_motor
|
|
646
|
+
--maker ... --model ... --datasheet ...`, or from the tutorial), kept in the
|
|
647
|
+
workspace and audited. `gea tools --action classes`, `--action tutorial
|
|
648
|
+
--class drilling_jar`.
|
|
649
|
+
|
|
650
|
+
Below it are the program's two registers: the gauge library - every gauge
|
|
616
651
|
with its source citation, ratings, what it measures, the telemetry interface
|
|
617
652
|
it declares and its datasheet aging rate where the vendor published one -
|
|
618
653
|
and the ports, the file formats read and the eleven live protocols spoken,
|
|
@@ -285,6 +285,17 @@ def main(argv=None) -> int:
|
|
|
285
285
|
p_tl.add_argument("--station", type=str, action="append", default=None, help="a station as DEPTH_FT:TOOL, e.g. 9850:quartz_pt_geoq177_16k")
|
|
286
286
|
p_tl.add_argument("--surface-temp-f", type=float, default=75.0); p_tl.add_argument("--temp-gradient-f-ft", type=float, default=0.018)
|
|
287
287
|
p_tl.add_argument("--surface-pressure-psi", type=float, default=14.7); p_tl.add_argument("--pressure-gradient-psi-ft", type=float, default=0.465)
|
|
288
|
+
p_tl.add_argument("--action", choices=["classes", "tutorial", "fleet", "fleet-add", "fleet-remove"], default=None,
|
|
289
|
+
help="the downhole tool classes in use across the industry: classes (--category, --find), tutorial --class ID, and the workspace's own fleet (fleet, fleet-add, fleet-remove)")
|
|
290
|
+
p_tl.add_argument("--category", type=str, default=None, help="classes: one category (bits, drive, measure, bha, casing, completion, logging, fishing, testing)")
|
|
291
|
+
p_tl.add_argument("--find", type=str, default="", help="classes: words to look for in the name and description")
|
|
292
|
+
p_tl.add_argument("--class", dest="class_id", type=str, default=None, help="tutorial / fleet-add: the tool class id, e.g. pdm_motor")
|
|
293
|
+
p_tl.add_argument("--workspace", type=str, default=None, help="fleet actions: the workspace folder")
|
|
294
|
+
p_tl.add_argument("--maker", type=str, default=""); p_tl.add_argument("--model", type=str, default="")
|
|
295
|
+
p_tl.add_argument("--datasheet", type=str, default="", help="fleet-add: the datasheet that rates the tool - title and revision, or its URL (required)")
|
|
296
|
+
p_tl.add_argument("--serial", type=str, default=""); p_tl.add_argument("--od-in", type=float, default=None); p_tl.add_argument("--note", type=str, default="")
|
|
297
|
+
p_tl.add_argument("--id", type=str, default=None, help="fleet-remove: the fleet tool id (gea tools --action fleet lists them)")
|
|
298
|
+
p_tl.add_argument("--actor", type=str, default="cli")
|
|
288
299
|
p_cc = sub.add_parser("comcat", help="USGS ComCat / any FDSN event service: --lat --lon --radius-km --start --end prints the text-format query to open; --file reads the export it returns")
|
|
289
300
|
p_cc.add_argument("--lat", type=float, default=None); p_cc.add_argument("--lon", type=float, default=None); p_cc.add_argument("--radius-km", type=float, default=25.0)
|
|
290
301
|
p_cc.add_argument("--start", type=str, default=None); p_cc.add_argument("--end", type=str, default=None); p_cc.add_argument("--min-mag", type=float, default=1.0)
|
|
@@ -457,6 +468,13 @@ def main(argv=None) -> int:
|
|
|
457
468
|
p_ws.add_argument("--sat", action="store_true", help="refresh: also run the SAT protocol")
|
|
458
469
|
p_ws.add_argument("--outage", action="append", default=None, help="refresh: outage window start/end (ISO), repeatable")
|
|
459
470
|
|
|
471
|
+
p_ck = sub.add_parser("checklist", help="the setup checklist: what this workspace still needs before its reports can be handed over - read from the workspace as it stands")
|
|
472
|
+
p_ck.add_argument("--workspace", type=str, default=None, help="the workspace folder, e.g. C:\\site")
|
|
473
|
+
p_ck.add_argument("--json", action="store_true")
|
|
474
|
+
p_ck.add_argument("--confirm", type=str, default=None, help="record a person's check of a confirmation item, e.g. events:Well-30636033")
|
|
475
|
+
p_ck.add_argument("--note", type=str, default="", help="--confirm: what it was checked against (required)")
|
|
476
|
+
p_ck.add_argument("--actor", type=str, default="cli")
|
|
477
|
+
|
|
460
478
|
p_sv = sub.add_parser("serve", help="serve the dashboard over a workspace: the page, the reports and the JSON API (standard library HTTP)")
|
|
461
479
|
p_sv.add_argument("--workspace", type=str, required=True, help="the workspace folder (gea workspace --action init)")
|
|
462
480
|
p_sv.add_argument("--host", type=str, default="127.0.0.1", help="bind address; 0.0.0.0 exposes it on the site network (put TLS in front)")
|
|
@@ -1879,6 +1897,31 @@ def main(argv=None) -> int:
|
|
|
1879
1897
|
elif a.cmd == "update":
|
|
1880
1898
|
from .doctor import update as _update
|
|
1881
1899
|
return _update(check_only=a.check, extras=a.extras, as_json=a.json)
|
|
1900
|
+
elif a.cmd == "checklist":
|
|
1901
|
+
import json as _json
|
|
1902
|
+
from . import setup_checklist as _SC
|
|
1903
|
+
from .cli import _safe_stdout
|
|
1904
|
+
from .workspace import Workspace, WorkspaceError
|
|
1905
|
+
_safe_stdout()
|
|
1906
|
+
if not a.workspace:
|
|
1907
|
+
raise SystemExit("checklist needs --workspace, e.g. --workspace C:\\site")
|
|
1908
|
+
try:
|
|
1909
|
+
ws = Workspace(a.workspace)
|
|
1910
|
+
except WorkspaceError as e:
|
|
1911
|
+
raise SystemExit(f"checklist: {e}")
|
|
1912
|
+
if a.confirm:
|
|
1913
|
+
try:
|
|
1914
|
+
rec = _SC.confirm(ws, a.confirm, a.actor, a.note)
|
|
1915
|
+
except ValueError as e:
|
|
1916
|
+
raise SystemExit(f"checklist: {e}")
|
|
1917
|
+
print(f"confirmed {a.confirm} by {rec['by']} at {rec['utc']}: {rec['note']}")
|
|
1918
|
+
return 0
|
|
1919
|
+
r = _SC.checklist(ws)
|
|
1920
|
+
if a.json:
|
|
1921
|
+
print(_json.dumps(r, indent=1))
|
|
1922
|
+
else:
|
|
1923
|
+
print(_SC.text(r))
|
|
1924
|
+
return 0 if r["ready"] else 2
|
|
1882
1925
|
elif a.cmd == "serve":
|
|
1883
1926
|
from .service import Service
|
|
1884
1927
|
from .workspace import WorkspaceError
|
|
@@ -2067,16 +2110,19 @@ def main(argv=None) -> int:
|
|
|
2067
2110
|
print(f"3DEP ground elevation {r['elev_ft']:,.2f} ft ({r['source']})")
|
|
2068
2111
|
elif a.ref_elev_ft is not None or a.ref_elev_datum or a.ref_elev_source:
|
|
2069
2112
|
surface["elevation"] = {"ft": a.ref_elev_ft, "datum": a.ref_elev_datum, "source": a.ref_elev_source}
|
|
2070
|
-
|
|
2113
|
+
identity = {"api_number": a.api} if a.api else {}
|
|
2114
|
+
disposal = {k: v for k, v in {"uic_number": a.uic, "depth_tier": a.depth_tier, "formation_basis": a.formation,
|
|
2071
2115
|
"channel_pressure": a.channel_pressure, "channel_rate": a.channel_rate, "rate_unit": a.rate_unit,
|
|
2072
2116
|
"bhp_method": a.bhp_method, "channel_bhp": a.channel_bhp, "top_interval_ft": a.top_interval_ft,
|
|
2073
2117
|
"base_interval_ft": a.base_interval_ft, "depth_reference": a.depth_ref,
|
|
2074
2118
|
"gradient_psi_ft": a.gradient_psi_ft}.items() if v is not None}
|
|
2075
|
-
if
|
|
2119
|
+
if a.api and (disposal or (ws.well(a.well).get("disposal") or {})):
|
|
2120
|
+
disposal["api_number"] = a.api # a disposal well keeps its number in the block the SRA packet reads too
|
|
2121
|
+
if not surface and not disposal and not identity:
|
|
2076
2122
|
raise SystemExit("set-well: nothing to declare (give --lat/--lon, --ref-elev-ft, or any of --api --uic --depth-tier --top-interval-ft ...)")
|
|
2077
2123
|
surface = surface or None
|
|
2078
|
-
w = ws.set_well(a.well, surface=surface, disposal=disposal or None, actor=a.actor)
|
|
2079
|
-
print(f"well {a.well}: surface {w.get('surface')}; disposal {w.get('disposal')}"); return 0
|
|
2124
|
+
w = ws.set_well(a.well, surface=surface, disposal=disposal or None, identity=identity or None, actor=a.actor)
|
|
2125
|
+
print(f"well {a.well}: surface {w.get('surface')}; identity {w.get('identity')}; disposal {w.get('disposal')}"); return 0
|
|
2080
2126
|
elif a.action == "sra-define":
|
|
2081
2127
|
if not a.site or not a.name or a.lat is None or a.lon is None or a.radius_km is None or not a.plan_date:
|
|
2082
2128
|
raise SystemExit("sra-define needs --site, --name, --lat, --lon, --radius-km and --plan-date")
|
|
@@ -2374,6 +2420,71 @@ def main(argv=None) -> int:
|
|
|
2374
2420
|
elif a.cmd == "tools":
|
|
2375
2421
|
import json as _json
|
|
2376
2422
|
from . import tool_catalog as _TC
|
|
2423
|
+
if a.action:
|
|
2424
|
+
from . import tool_taxonomy as _TX
|
|
2425
|
+
from .cli import _safe_stdout
|
|
2426
|
+
_safe_stdout() # the cited figures carry fractions and degree signs
|
|
2427
|
+
if a.action == "classes":
|
|
2428
|
+
cs = _TX.classes(a.category, a.find)
|
|
2429
|
+
if a.category and a.category not in _TX.CATEGORY_NAMES:
|
|
2430
|
+
raise SystemExit(f"tools: no category {a.category!r}; one of {', '.join(_TX.CATEGORY_NAMES)}")
|
|
2431
|
+
if a.json:
|
|
2432
|
+
print(_json.dumps(cs, indent=1)); return 0
|
|
2433
|
+
sm = _TX.summary()
|
|
2434
|
+
print(f"{len(cs)} of {sm['classes']} tool classes; {sm['sources']} pages checked (fetched {sm['sources_fetched']}); {sm['figures']} published figures, each quoted from its page")
|
|
2435
|
+
last = None
|
|
2436
|
+
for t in cs:
|
|
2437
|
+
if t["category"] != last:
|
|
2438
|
+
print(f"\n{t['category_name']}"); last = t["category"]
|
|
2439
|
+
print(f" {t['id']:<24s} {t['name']}")
|
|
2440
|
+
print(f" {t['one_line']}")
|
|
2441
|
+
print("\n`gea tools --action tutorial --class ID` opens one.")
|
|
2442
|
+
return 0
|
|
2443
|
+
if a.action == "tutorial":
|
|
2444
|
+
if not a.class_id:
|
|
2445
|
+
raise SystemExit("tools: tutorial needs --class, e.g. --class pdm_motor (gea tools --action classes lists them)")
|
|
2446
|
+
try:
|
|
2447
|
+
if a.json:
|
|
2448
|
+
print(_json.dumps(_TX.tool_class(a.class_id), indent=1)); return 0
|
|
2449
|
+
print(_TX.tutorial_text(a.class_id))
|
|
2450
|
+
except KeyError as e:
|
|
2451
|
+
raise SystemExit(f"tools: {e.args[0]}")
|
|
2452
|
+
return 0
|
|
2453
|
+
if not a.workspace:
|
|
2454
|
+
raise SystemExit(f"tools: --action {a.action} needs --workspace, e.g. --workspace C:\\site")
|
|
2455
|
+
from .workspace import Workspace, WorkspaceError
|
|
2456
|
+
try:
|
|
2457
|
+
ws = Workspace(a.workspace)
|
|
2458
|
+
except WorkspaceError as e:
|
|
2459
|
+
raise SystemExit(f"tools: {e}")
|
|
2460
|
+
if a.action == "fleet":
|
|
2461
|
+
fl = _TX.fleet_list(ws.path)
|
|
2462
|
+
if a.json:
|
|
2463
|
+
print(_json.dumps(fl, indent=1)); return 0
|
|
2464
|
+
if not fl:
|
|
2465
|
+
print("the fleet is empty: gea tools --action fleet-add --workspace ... --class pdm_motor --maker ... --model ... --datasheet ...")
|
|
2466
|
+
for t in fl:
|
|
2467
|
+
print(f"{t['id']:<32s} {t['class_name']} - {t['maker']} {t['model']}" + (f" s/n {t['serial']}" if t['serial'] else '') + (f", {t['od_in']:g} in OD" if t['od_in'] else ''))
|
|
2468
|
+
print(f" datasheet: {t['datasheet']}")
|
|
2469
|
+
return 0
|
|
2470
|
+
if a.action == "fleet-add":
|
|
2471
|
+
try:
|
|
2472
|
+
rec = _TX.fleet_add(ws.path, a.class_id or "", a.maker, a.model, a.datasheet, serial=a.serial, od_in=a.od_in, note=a.note, actor=a.actor)
|
|
2473
|
+
except ValueError as e:
|
|
2474
|
+
raise SystemExit(f"tools: {e}")
|
|
2475
|
+
ws.audit(a.actor, 'fleet.add', {'id': rec['id'], 'class': rec['class_id'], 'datasheet': rec['datasheet']})
|
|
2476
|
+
print(f"added {rec['id']}: {rec['maker']} {rec['model']} ({rec['class_name']}); datasheet {rec['datasheet']}")
|
|
2477
|
+
return 0
|
|
2478
|
+
if a.action == "fleet-remove":
|
|
2479
|
+
if not a.id:
|
|
2480
|
+
raise SystemExit("tools: fleet-remove needs --id (gea tools --action fleet lists them)")
|
|
2481
|
+
try:
|
|
2482
|
+
rec = _TX.fleet_remove(ws.path, a.id)
|
|
2483
|
+
except ValueError as e:
|
|
2484
|
+
raise SystemExit(f"tools: {e}")
|
|
2485
|
+
ws.audit(a.actor, 'fleet.remove', {'id': rec['id'], 'class': rec['class_id']})
|
|
2486
|
+
print(f"removed {rec['id']}")
|
|
2487
|
+
return 0
|
|
2377
2488
|
if a.rating or a.station:
|
|
2378
2489
|
stations = []
|
|
2379
2490
|
for spec in (a.station or []):
|