gea-program 0.53.0__tar.gz → 0.55.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.53.0 → gea_program-0.55.0}/PKG-INFO +40 -5
- {gea_program-0.53.0 → gea_program-0.55.0}/README.md +39 -4
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/__init__.py +1 -1
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/__main__.py +113 -3
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/acceptance_tests.py +398 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/alerts.py +15 -2
- gea_program-0.55.0/gea/decline.py +553 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/doctor.py +12 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/dossier.py +14 -2
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/alerts.md +1 -1
- gea_program-0.55.0/gea/help/decline.md +17 -0
- gea_program-0.55.0/gea/help/https.md +19 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/upkeep.md +2 -2
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/helplib.py +3 -1
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/notify.py +3 -1
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/service.py +169 -6
- gea_program-0.55.0/gea/tls.py +530 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/web/app.html +80 -9
- {gea_program-0.53.0 → gea_program-0.55.0}/gea_program.egg-info/PKG-INFO +40 -5
- {gea_program-0.53.0 → gea_program-0.55.0}/gea_program.egg-info/SOURCES.txt +4 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/pyproject.toml +1 -1
- {gea_program-0.53.0 → gea_program-0.55.0}/LICENSE +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/BENCH_TEST_PROTOCOL.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/accuracy_statement.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/alarm_engine.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/backup.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/bench.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/blind_harness.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/acex_lomonosov_age_depth_model.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/acex_lomonosov_age_depth_model.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/agassiz77_canada_temperature.csv +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/agassiz77_canada_temperature.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/barbados_110_consolidation.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/barbados_110_consolidation.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/bengal_u1452_grain_size.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/bengal_u1452_grain_size.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/blake_164_methane_isotopes.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/blake_164_methane_isotopes.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/chicxulub_m0077a_pwave_velocity.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/collingwood_1_28_ks_complete.las +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/collingwood_1_28_ks_complete.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/costa_rica_odp_friction_envelope.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/costa_rica_odp_friction_envelope.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/dead_sea_5017_debrite_xrf_ms.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/dsdp_504b_physical_properties.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/dsdp_504b_physical_properties.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/dsdp_504b_sound_velocity.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/dsdp_504b_sound_velocity.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/elgygytgyn_5011_turbidites.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/elgygytgyn_5011_turbidites.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/epica_domec_co2_800kyr.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/epica_domec_co2_800kyr.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/fram_909_organic_petrography.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/fram_909_organic_petrography.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/gbr_325_coral_uth_ages.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/gbr_325_coral_uth_ages.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/gisp2_greenland_temperature.csv +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/gisp2_greenland_temperature.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/gom_308_t2p_insitu.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/gom_308_t2p_insitu.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/guaymas_385_dom_d13c.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/guaymas_385_dom_d13c.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/hikurangi_u1520_friction_insitu.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/hikurangi_u1520_friction_insitu.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/hydrate_ridge_204_ncr_hydrate.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/iodp_u1324_pore_pressure.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/iodp_u1324_pore_pressure.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/jfast_c0019_slow_slip_events.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/jfast_c0019_slow_slip_events.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/kennetcook_2_p129_excerpt.las +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/kennetcook_2_p129_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_bhgm_density.dat +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_bhgm_density.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_complog_6020_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_complog_6020_excerpt.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_hlog246_temperature.dat +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_hlog246_temperature.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_rockmech_compress.dat +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.dat +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_hb_tvd_0_9080_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_vb_rockmech_compress.dat +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_vb_rockmech_compress.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_vb_vlog251_temperature.dat +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ktb_vb_vlog251_temperature.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/l06_06_nl_survey.csv +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/l06_06_nl_survey.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/l07_01_nl_excerpt.las +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/l07_01_nl_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/mariana_1200_serpentinite_geochem.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/mariana_1200_serpentinite_geochem.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/med_160_sapropels.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/med_160_sapropels.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/nankai_megasplay_shear_strength.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/nankai_megasplay_shear_strength.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_1027b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_1027b_thermal_conductivity.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_1027c_cork_temperature.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_1027c_cork_temperature.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_1165b_thermal_conductivity.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_1165b_thermal_conductivity.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_1274a_mantle_peridotite_mad.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_504b_dike_elastic_moduli.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_504b_dike_elastic_moduli.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_504b_leg137_borehole_fluids.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_504b_leg137_borehole_fluids.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/odp_735b_gabbro_elastic_moduli.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/peru_201_sulfate_reduction.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/peru_201_sulfate_reduction.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/scorpio_e1_sa_excerpt.las +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/scorpio_e1_sa_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/sumatra_362_cohesion.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/sumatra_362_cohesion.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/university_6_17_no1_tx_excerpt.las +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/university_6_17_no1_tx_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ursa_308_xrd_mineralogy.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/ursa_308_xrd_mineralogy.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/volve_15_9_19_sr_excerpt.las +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/volve_15_9_19_sr_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/volve_15_9_19a_core_excerpt.csv +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/volve_15_9_19a_core_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/volve_f12_f14_production_excerpt.csv +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/volve_f12_f14_production_excerpt.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/walvis_208_petm_carbonate.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/walvis_208_petm_carbonate.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/woodlark_1109_rock_eval.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog/woodlark_1109_rock_eval.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog_map.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/catalog_register.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/certificates.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/cli.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/client_reports.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/collision.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/config_versioning.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/conformance.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/control_room.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/correlation.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/dashboard.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/declarations.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/deviation.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/dlis.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/dnp3.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/dossier_verify.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/downhole_engine.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/drift_monitor.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/drill_string.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/earth_model.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/economics.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/ed25519.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/edr.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/elevation.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/etp.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/etp12_schemas.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/example_register_map.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/fat_sat.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/files.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/fixtures/README.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/fixtures/comcat_delaware_basin_2026-09.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/fixtures/comcat_mahoning_1990-2026.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/fixtures/comcat_youngstown_2011-2012.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/fixtures/ne_110m_coastline.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/follower.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/forward_model.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/frac_hits.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/friction_priors.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/gamma.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/gauge_aging.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/gauge_specs.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/geodesy.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/geomag.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/gravity_reference.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/hartip.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/TESTER_GUIDE.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/alarms.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/audit-update.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/backup.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/catalog.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/charts.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/collision.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/conformance.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/control-room.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/data-in.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/declare.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/dlis.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/doctor.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/dossier.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/drift.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/drillstring.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/economics.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/edr.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/etp.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/field-ports.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/files.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/frac-hits.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/historian.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/instruments.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/interval.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/invoice-check.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/map.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/month-end.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/notifications.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/opseis.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/osdu.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/pad-summary.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/patches.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/penetrator.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/plan.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/pore-pressure.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/ppdm.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/quakeml.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/quality.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/report-history.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/rig-time.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/seedlink.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/seismic.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/setup.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/simulation.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/site.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/sites.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/slip.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/soak.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/sra.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/start.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/structure.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/tools.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/torque-drag.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/transients.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/vibration.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/well-report.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/well-tests.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/help/well3d.md +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/housekeeping.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/interval.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/inverse_engine.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/invoice_check.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/jobs.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/live_ports.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/loadtest.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/matplotlib_demo.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/modbus.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/modbus_rtu.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/model_card.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/month_end.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/mqtt_port.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/op_seismicity.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/opcua_port.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/operator_app.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/osdu.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/pad_summary.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/patches.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/pdf_report.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/penetrator.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/permits.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/piwebapi.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/pore_pressure.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/ports.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/ppdm.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/profile_catalog.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/project.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/qt6_downhole_app.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/quakeml.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reconciler.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/IU_ANMO_10_BHZ_response.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/IU_ANMO_10_BHZ_response.xml +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/WMM2025.COF +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/eia_henry_hub_daily.csv.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/eia_prices.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/eia_wti_daily.csv.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/iscwsa_rev4_example.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/iscwsa_rev5_example.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/l0701_sonic_gr.las.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/l0701_sonic_gr.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/libmseed_steim.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/libmseed_steim1_4096.mseed +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/libmseed_steim2_4096.mseed +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/libmseed_steim2_512.mseed +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/mahoning_example.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/mud_motor_specs.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/owsg_tool_models.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/penetrator_ratings.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/seismicity_protocols.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/tool_sources.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/us_outline.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/us_outline.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_3d.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_f4_interpretation.las.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_f4_logs.provenance.json +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_f4_lwd.las.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_surfaces.json.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_traj_F-10.xml.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_traj_F-4.xml.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_traj_F-5_12.25in.xml.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_traj_F-5_17.5in.xml.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_traj_F-5_36in.xml.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_traj_F-5_8.5in.xml.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/reference/volve_well_picks.csv.gz +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/report_history.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/rig_state.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/rock_inventory.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/sample_record.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/sample_well_profile.csv +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/sbom.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seedlink.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/segy.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_array.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_assoc.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_detect.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_film.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_harmonic.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_qc.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_response.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_signature.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_track.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_uncertainty.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_unlisted.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/seismic_watch.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/sensor_swap.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/series_cache.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/service_life.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/setup_checklist.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/shapefile.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/shell.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/shut_in.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/simulation.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/site_map.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/sla_report.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/slip.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/soak.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/sra.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/store_forward.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/strata_join.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/structure.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/supervisor.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/survey_cmd.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/survey_view.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/telemetry.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/tool_catalog.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/tool_library.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/tool_taxonomy.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/torque_drag.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/transient.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/vibration.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/well3d.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/well_assembler.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/well_report.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/well_test_validation.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/wellplan.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/wellpos.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/wits0.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/witsml.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/workspace.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea/xlsx_read.py +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea_program.egg-info/dependency_links.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea_program.egg-info/entry_points.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea_program.egg-info/requires.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/gea_program.egg-info/top_level.txt +0 -0
- {gea_program-0.53.0 → gea_program-0.55.0}/setup.cfg +0 -0
- {gea_program-0.53.0 → gea_program-0.55.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.55.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
|
|
@@ -243,7 +243,7 @@ disappearing. Every action is written to `records/audit.jsonl` with the
|
|
|
243
243
|
actor's name and the SHA-256 of the inputs it used. The service is written on
|
|
244
244
|
the standard library only (no new dependency, the standalone check still
|
|
245
245
|
passes), listens on the loopback interface by default (`--host 0.0.0.0` for a
|
|
246
|
-
site network,
|
|
246
|
+
site network, over HTTPS - its own, below, or the site's TLS proxy), keeps sessions in HttpOnly
|
|
247
247
|
SameSite cookies, and requires the page's own header on every action so a
|
|
248
248
|
foreign form cannot act. Accounts live in `users.json` as salted PBKDF2-SHA256
|
|
249
249
|
hashes; `gea users --workspace C:\site --action add --name ... --role admin`
|
|
@@ -648,6 +648,17 @@ 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
|
+
### Decline curves
|
|
652
|
+
|
|
653
|
+
Each well's monthly production fitted by Arps's curves - the modified
|
|
654
|
+
hyperbolic, turned exponential at a terminal decline - forecast month by
|
|
655
|
+
month to its economic limit and valued: the estimated ultimate recovery,
|
|
656
|
+
and the net cash flow discounted at the declared rate, at the SEC 12-month
|
|
657
|
+
average of the first-of-month WTI and Henry Hub prices (shipped from the
|
|
658
|
+
EIA) or a declared price, with the net revenue interest, severance tax and
|
|
659
|
+
operating cost declared. A forecast is not a reserves report, and the page
|
|
660
|
+
says so. The **Decline curves** tab, `gea decline`, `gea help decline`.
|
|
661
|
+
|
|
651
662
|
### Torque and drag
|
|
652
663
|
|
|
653
664
|
The hook load and torque the drill string should take at each bit depth, by
|
|
@@ -1238,11 +1249,35 @@ is recomputed in the index. On the Reports page: the packets on record,
|
|
|
1238
1249
|
Assemble as a job, and Schedule monthly (day and hour, the previous month).
|
|
1239
1250
|
`gea help month-end`.
|
|
1240
1251
|
|
|
1252
|
+
### HTTPS
|
|
1253
|
+
|
|
1254
|
+
The service speaks TLS itself when the workspace names a certificate: the
|
|
1255
|
+
site's own (from the company's certificate authority, which managed
|
|
1256
|
+
computers already trust; read where the site keeps it, at every start) or a
|
|
1257
|
+
self-signed one it makes with the standard library alone (an RSA key and an
|
|
1258
|
+
X.509 v3 server certificate for every name and address it is reached by).
|
|
1259
|
+
TLS 1.2 is the floor; the cookie is marked Secure; every answer carries
|
|
1260
|
+
Strict-Transport-Security; a plain `http://` request on the same port is
|
|
1261
|
+
sent to HTTPS; a certificate in its last 30 days raises the `tls.expiring`
|
|
1262
|
+
alert; a workspace whose certificate files are broken does not start rather
|
|
1263
|
+
than fall back to plain HTTP.
|
|
1264
|
+
|
|
1265
|
+
```
|
|
1266
|
+
gea tls --workspace C:\site --site-cert C:\certs\gea-pad3.crt --site-key C:\certs\gea-pad3.key
|
|
1267
|
+
gea tls --workspace C:\site --self-signed --name gea-pad3 --name 10.20.0.15 --export-cert C:\certs\gea-site.crt
|
|
1268
|
+
gea serve --workspace C:\site --host 0.0.0.0 # https://gea-pad3:8765/
|
|
1269
|
+
```
|
|
1270
|
+
|
|
1271
|
+
Or Administration -> **HTTPS** in the page (download the certificate, not
|
|
1272
|
+
the key, for the site's computers to trust; compare the SHA-256 shown).
|
|
1273
|
+
`gea help https`.
|
|
1274
|
+
|
|
1241
1275
|
### Before a site goes live
|
|
1242
1276
|
|
|
1243
|
-
`deploy/README.md` is the checklist:
|
|
1244
|
-
address and put
|
|
1245
|
-
`deploy/nginx-gea.conf`), start with
|
|
1277
|
+
`deploy/README.md` is the checklist: HTTPS from the service itself (above),
|
|
1278
|
+
or keep the service on the loopback address and put the site's TLS proxy in
|
|
1279
|
+
front (`deploy/Caddyfile`, `deploy/nginx-gea.conf`), start with
|
|
1280
|
+
`--behind-proxy`. The service itself
|
|
1246
1281
|
rate-limits sign-ins (five failures lock the name and the address for 15
|
|
1247
1282
|
minutes, audited), lists and revokes live sessions, sends the security
|
|
1248
1283
|
headers on every response, and `gea housekeeping --workspace C:\site --apply`
|
|
@@ -204,7 +204,7 @@ disappearing. Every action is written to `records/audit.jsonl` with the
|
|
|
204
204
|
actor's name and the SHA-256 of the inputs it used. The service is written on
|
|
205
205
|
the standard library only (no new dependency, the standalone check still
|
|
206
206
|
passes), listens on the loopback interface by default (`--host 0.0.0.0` for a
|
|
207
|
-
site network,
|
|
207
|
+
site network, over HTTPS - its own, below, or the site's TLS proxy), keeps sessions in HttpOnly
|
|
208
208
|
SameSite cookies, and requires the page's own header on every action so a
|
|
209
209
|
foreign form cannot act. Accounts live in `users.json` as salted PBKDF2-SHA256
|
|
210
210
|
hashes; `gea users --workspace C:\site --action add --name ... --role admin`
|
|
@@ -609,6 +609,17 @@ 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
|
+
### Decline curves
|
|
613
|
+
|
|
614
|
+
Each well's monthly production fitted by Arps's curves - the modified
|
|
615
|
+
hyperbolic, turned exponential at a terminal decline - forecast month by
|
|
616
|
+
month to its economic limit and valued: the estimated ultimate recovery,
|
|
617
|
+
and the net cash flow discounted at the declared rate, at the SEC 12-month
|
|
618
|
+
average of the first-of-month WTI and Henry Hub prices (shipped from the
|
|
619
|
+
EIA) or a declared price, with the net revenue interest, severance tax and
|
|
620
|
+
operating cost declared. A forecast is not a reserves report, and the page
|
|
621
|
+
says so. The **Decline curves** tab, `gea decline`, `gea help decline`.
|
|
622
|
+
|
|
612
623
|
### Torque and drag
|
|
613
624
|
|
|
614
625
|
The hook load and torque the drill string should take at each bit depth, by
|
|
@@ -1199,11 +1210,35 @@ is recomputed in the index. On the Reports page: the packets on record,
|
|
|
1199
1210
|
Assemble as a job, and Schedule monthly (day and hour, the previous month).
|
|
1200
1211
|
`gea help month-end`.
|
|
1201
1212
|
|
|
1213
|
+
### HTTPS
|
|
1214
|
+
|
|
1215
|
+
The service speaks TLS itself when the workspace names a certificate: the
|
|
1216
|
+
site's own (from the company's certificate authority, which managed
|
|
1217
|
+
computers already trust; read where the site keeps it, at every start) or a
|
|
1218
|
+
self-signed one it makes with the standard library alone (an RSA key and an
|
|
1219
|
+
X.509 v3 server certificate for every name and address it is reached by).
|
|
1220
|
+
TLS 1.2 is the floor; the cookie is marked Secure; every answer carries
|
|
1221
|
+
Strict-Transport-Security; a plain `http://` request on the same port is
|
|
1222
|
+
sent to HTTPS; a certificate in its last 30 days raises the `tls.expiring`
|
|
1223
|
+
alert; a workspace whose certificate files are broken does not start rather
|
|
1224
|
+
than fall back to plain HTTP.
|
|
1225
|
+
|
|
1226
|
+
```
|
|
1227
|
+
gea tls --workspace C:\site --site-cert C:\certs\gea-pad3.crt --site-key C:\certs\gea-pad3.key
|
|
1228
|
+
gea tls --workspace C:\site --self-signed --name gea-pad3 --name 10.20.0.15 --export-cert C:\certs\gea-site.crt
|
|
1229
|
+
gea serve --workspace C:\site --host 0.0.0.0 # https://gea-pad3:8765/
|
|
1230
|
+
```
|
|
1231
|
+
|
|
1232
|
+
Or Administration -> **HTTPS** in the page (download the certificate, not
|
|
1233
|
+
the key, for the site's computers to trust; compare the SHA-256 shown).
|
|
1234
|
+
`gea help https`.
|
|
1235
|
+
|
|
1202
1236
|
### Before a site goes live
|
|
1203
1237
|
|
|
1204
|
-
`deploy/README.md` is the checklist:
|
|
1205
|
-
address and put
|
|
1206
|
-
`deploy/nginx-gea.conf`), start with
|
|
1238
|
+
`deploy/README.md` is the checklist: HTTPS from the service itself (above),
|
|
1239
|
+
or keep the service on the loopback address and put the site's TLS proxy in
|
|
1240
|
+
front (`deploy/Caddyfile`, `deploy/nginx-gea.conf`), start with
|
|
1241
|
+
`--behind-proxy`. The service itself
|
|
1207
1242
|
rate-limits sign-ins (five failures lock the name and the address for 15
|
|
1208
1243
|
minutes, audited), lists and revokes live sessions, sends the security
|
|
1209
1244
|
headers on every response, and `gea housekeeping --workspace C:\site --apply`
|
|
@@ -622,6 +622,21 @@ def main(argv=None) -> int:
|
|
|
622
622
|
p_pl.add_argument("--actor", type=str, default="cli")
|
|
623
623
|
p_pl.add_argument("--json", action="store_true")
|
|
624
624
|
|
|
625
|
+
p_dc = sub.add_parser("decline", help="each well's monthly production fitted by Arps's curves, forecast to its economic limit and valued at the SEC 12-month price or a declared one")
|
|
626
|
+
p_dc.add_argument("--workspace", type=str, required=True)
|
|
627
|
+
p_dc.add_argument("--well", type=str, default=None)
|
|
628
|
+
p_dc.add_argument("--attach", type=str, default=None, help="attach FILE as the well's monthly production (CSV or Excel)")
|
|
629
|
+
p_dc.add_argument("--remove", action="store_true")
|
|
630
|
+
for k_, h_ in (("terminal-decline", "the terminal decline, effective annual (0.08 = 8 %%)"), ("b-max", "the largest b fitted"), ("oil-price", "USD/bbl"),
|
|
631
|
+
("gas-price", "USD/MMBtu"), ("price-basis", "sec or flat"), ("nri", "the net revenue interest"), ("severance", "the severance tax (0.046 = 4.6 %%)"),
|
|
632
|
+
("opex", "the operating cost, USD a month"), ("discount", "the discount rate (0.10)"), ("start", "fit from this month (YYYY-MM)"),
|
|
633
|
+
("as-of", "value as of this date (YYYY-MM-DD)")):
|
|
634
|
+
p_dc.add_argument("--" + k_, type=str, default=None, help=h_)
|
|
635
|
+
p_dc.add_argument("--source", type=str, default="", help="where the production or the terms came from")
|
|
636
|
+
p_dc.add_argument("--write", action="store_true")
|
|
637
|
+
p_dc.add_argument("--actor", type=str, default="cli")
|
|
638
|
+
p_dc.add_argument("--json", action="store_true")
|
|
639
|
+
|
|
625
640
|
p_td = sub.add_parser("torque-drag", help="the hook load and torque the string should take at each bit depth (soft-string model), the broomstick, and the friction factors that fit the rig's own trips")
|
|
626
641
|
p_td.add_argument("--workspace", type=str, default=None)
|
|
627
642
|
p_td.add_argument("--well", type=str, default=None)
|
|
@@ -741,13 +756,26 @@ def main(argv=None) -> int:
|
|
|
741
756
|
|
|
742
757
|
p_sv = sub.add_parser("serve", help="serve the dashboard over a workspace: the page, the reports and the JSON API (standard library HTTP)")
|
|
743
758
|
p_sv.add_argument("--workspace", type=str, required=True, help="the workspace folder (gea workspace --action init)")
|
|
744
|
-
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 (
|
|
759
|
+
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 (turn HTTPS on first: gea tls)")
|
|
745
760
|
p_sv.add_argument("--port", type=int, default=8765)
|
|
746
761
|
p_sv.add_argument("--workers", type=int, default=1, help="jobs run at once")
|
|
747
762
|
p_sv.add_argument("--no-scheduler", action="store_true", help="do not run scheduled jobs from this process")
|
|
748
763
|
p_sv.add_argument("--behind-proxy", action="store_true", help="a reverse proxy terminates TLS in front: trust X-Forwarded-For/-Proto, mark the cookie Secure (deploy/ has nginx and Caddy examples)")
|
|
749
764
|
p_sv.add_argument("--no-browser", action="store_true", help="do not open the control panel in a browser once the service is listening (a scheduled start, a restart, a server with no desktop)")
|
|
750
765
|
|
|
766
|
+
p_tl = sub.add_parser("tls", help="HTTPS for the dashboard: the site's own certificate, a self-signed one made here, or off; with no option, how it stands")
|
|
767
|
+
p_tl.add_argument("--workspace", type=str, required=True)
|
|
768
|
+
p_tl.add_argument("--site-cert", type=str, default=None, help="the site's certificate (PEM, the server's first, then any chain) - read from where it is at every start")
|
|
769
|
+
p_tl.add_argument("--site-key", type=str, default=None, help="its private key (PEM, without a passphrase)")
|
|
770
|
+
p_tl.add_argument("--self-signed", action="store_true", help="make a self-signed certificate and key in the workspace's keys\\tls folder")
|
|
771
|
+
p_tl.add_argument("--name", action="append", default=[], help="--self-signed: a host name or address the dashboard is reached by (repeat; default: this machine's names, localhost, 127.0.0.1)")
|
|
772
|
+
p_tl.add_argument("--days", type=int, default=825, help="--self-signed: days valid (at most 825)")
|
|
773
|
+
p_tl.add_argument("--bits", type=int, default=2048, choices=[2048, 3072])
|
|
774
|
+
p_tl.add_argument("--off", action="store_true", help="plain HTTP from the next start (the files are left where they are)")
|
|
775
|
+
p_tl.add_argument("--export-cert", type=str, default=None, help="write the certificate (public, never the key) to this file, for the site's computers to trust")
|
|
776
|
+
p_tl.add_argument("--actor", type=str, default="cli")
|
|
777
|
+
p_tl.add_argument("--json", action="store_true")
|
|
778
|
+
|
|
751
779
|
p_hk = sub.add_parser("housekeeping", help="rotate the append-only logs, prune finished job folders and old live recordings (dry run unless --apply)")
|
|
752
780
|
p_hk.add_argument("--workspace", type=str, required=True)
|
|
753
781
|
p_hk.add_argument("--apply", action="store_true")
|
|
@@ -2486,6 +2514,42 @@ def main(argv=None) -> int:
|
|
|
2486
2514
|
raise SystemExit(f"collision: {e.args[0] if e.args else e}")
|
|
2487
2515
|
print(_json.dumps({k: v for k, v in r.items()}, default=str) if a.json else _CO.text(r))
|
|
2488
2516
|
return 0
|
|
2517
|
+
elif a.cmd == "decline":
|
|
2518
|
+
import json as _json
|
|
2519
|
+
from . import decline as _DCA
|
|
2520
|
+
from .cli import _safe_stdout
|
|
2521
|
+
from .workspace import Workspace, WorkspaceError
|
|
2522
|
+
_safe_stdout()
|
|
2523
|
+
try:
|
|
2524
|
+
ws = Workspace(a.workspace)
|
|
2525
|
+
terms = {"terminal_decline": a.terminal_decline, "b_max": a.b_max, "oil_price": a.oil_price, "gas_price": a.gas_price, "price_basis": a.price_basis,
|
|
2526
|
+
"nri": a.nri, "severance": a.severance, "opex_month": a.opex, "discount": a.discount, "start": a.start}
|
|
2527
|
+
if (a.attach or a.remove or any(v is not None for v in terms.values()) or a.write) and not a.well:
|
|
2528
|
+
raise ValueError("--well is needed")
|
|
2529
|
+
if a.attach:
|
|
2530
|
+
with open(a.attach, "rb") as f_:
|
|
2531
|
+
r_ = _DCA.attach(ws, a.well, os.path.basename(a.attach), f_.read(), a.actor, a.source)
|
|
2532
|
+
print(f"production attached to {a.well}: {r_['months']} months, {r_['first']} to {r_['last']}")
|
|
2533
|
+
return 0
|
|
2534
|
+
if a.remove:
|
|
2535
|
+
_DCA.remove(ws, a.well, a.actor)
|
|
2536
|
+
print(f"production removed from {a.well}")
|
|
2537
|
+
return 0
|
|
2538
|
+
if any(v is not None for v in terms.values()):
|
|
2539
|
+
c_ = _DCA.set_config(ws, a.actor, a.well, a.source, **{k: v for k, v in terms.items() if v is not None})
|
|
2540
|
+
print(f"{a.well}: terminal {c_['terminal_decline']:g}, price {c_['price_basis']}, NRI {c_['nri']:g}, severance {c_['severance']:g}, opex {c_['opex_month']:,.0f}/month, discount {c_['discount']:g}")
|
|
2541
|
+
return 0
|
|
2542
|
+
if a.write:
|
|
2543
|
+
r_ = _DCA.write_report(ws, __version__, a.well, a.actor)
|
|
2544
|
+
print(f"wrote {r_['report_id']}: {r_['paths']['html']}")
|
|
2545
|
+
if r_['paths'].get('pdf'):
|
|
2546
|
+
print(f" printable: {r_['paths']['pdf']}")
|
|
2547
|
+
return 0
|
|
2548
|
+
r = _DCA.page(ws, a.well, a.as_of)
|
|
2549
|
+
except (KeyError, ValueError, OSError, WorkspaceError) as e:
|
|
2550
|
+
raise SystemExit(f"decline: {e.args[0] if e.args else e}")
|
|
2551
|
+
print(_json.dumps(r, default=str) if a.json else _DCA.text(r))
|
|
2552
|
+
return 0
|
|
2489
2553
|
elif a.cmd == "torque-drag":
|
|
2490
2554
|
import json as _json
|
|
2491
2555
|
from . import torque_drag as _TND
|
|
@@ -2552,6 +2616,41 @@ def main(argv=None) -> int:
|
|
|
2552
2616
|
raise SystemExit(f"pore-pressure: {e.args[0] if e.args else e}")
|
|
2553
2617
|
print(_json.dumps(r, default=str) if a.json else _PPF.text(r))
|
|
2554
2618
|
return 0
|
|
2619
|
+
elif a.cmd == "tls":
|
|
2620
|
+
import json as _json
|
|
2621
|
+
from . import tls as _TLS
|
|
2622
|
+
from .workspace import Workspace, WorkspaceError
|
|
2623
|
+
try:
|
|
2624
|
+
ws = Workspace(a.workspace)
|
|
2625
|
+
if sum(bool(x) for x in (a.self_signed, a.site_cert or a.site_key, a.off)) > 1:
|
|
2626
|
+
raise ValueError("one of --self-signed, --site-cert/--site-key or --off")
|
|
2627
|
+
if a.site_cert or a.site_key:
|
|
2628
|
+
if not (a.site_cert and a.site_key):
|
|
2629
|
+
raise ValueError("--site-cert and --site-key go together")
|
|
2630
|
+
r = _TLS.use_site_certificate(ws, a.actor, a.site_cert, a.site_key)
|
|
2631
|
+
elif a.self_signed:
|
|
2632
|
+
r = _TLS.make_self_signed(ws, a.actor, a.name or None, a.days, a.bits)
|
|
2633
|
+
elif a.off:
|
|
2634
|
+
r = _TLS.turn_off(ws, a.actor)
|
|
2635
|
+
else:
|
|
2636
|
+
r = _TLS.status(ws)
|
|
2637
|
+
if a.export_cert:
|
|
2638
|
+
pem = _TLS.certificate_pem(ws)
|
|
2639
|
+
if not pem:
|
|
2640
|
+
raise ValueError("HTTPS is off: there is no certificate to export")
|
|
2641
|
+
with open(a.export_cert, "wb") as f_:
|
|
2642
|
+
f_.write(pem)
|
|
2643
|
+
except (KeyError, ValueError, OSError, WorkspaceError) as e:
|
|
2644
|
+
raise SystemExit(f"tls: {e.args[0] if e.args else e}")
|
|
2645
|
+
if a.json:
|
|
2646
|
+
print(_json.dumps(r, default=str))
|
|
2647
|
+
else:
|
|
2648
|
+
print(_TLS.text(r))
|
|
2649
|
+
if a.self_signed or a.site_cert or a.off:
|
|
2650
|
+
print(" takes effect at the next start of the control panel (gea serve, or Restart on the Administration page)")
|
|
2651
|
+
if a.export_cert:
|
|
2652
|
+
print(f" certificate written to {a.export_cert} - hand this out, never the key")
|
|
2653
|
+
return 0
|
|
2555
2654
|
elif a.cmd == "frac-hits":
|
|
2556
2655
|
import json as _json
|
|
2557
2656
|
from . import frac_hits as _FH
|
|
@@ -2895,18 +2994,29 @@ def main(argv=None) -> int:
|
|
|
2895
2994
|
print(f"serve: BLOCK {mism}")
|
|
2896
2995
|
if pre or mism:
|
|
2897
2996
|
raise SystemExit("serve: not starting - fix the above (gea doctor --workspace ... shows the full picture)")
|
|
2997
|
+
from .tls import TlsError
|
|
2898
2998
|
try:
|
|
2899
2999
|
svc = Service(a.workspace, host=a.host, port=a.port, workers=a.workers, scheduler=not a.no_scheduler, behind_proxy=a.behind_proxy)
|
|
2900
3000
|
except WorkspaceError as e:
|
|
2901
3001
|
raise SystemExit(f"serve: {e}")
|
|
3002
|
+
except TlsError as e:
|
|
3003
|
+
raise SystemExit(f"serve: HTTPS is on for this workspace but {e}. Put the files right, or: gea tls --workspace \"{a.workspace}\" --off")
|
|
2902
3004
|
n_users = svc.app.users.count()
|
|
2903
3005
|
print(f"gea {__version__}: serving workspace '{svc.ws.manifest['name']}' at {svc.url}")
|
|
2904
3006
|
print(f" code: {os.path.dirname(os.path.abspath(__file__))} (an installed copy serves the files it was installed from; pip install -e <clone> follows the clone)")
|
|
2905
3007
|
print(f" patches: {len(svc.app.patches.store.list())} defined, {len([s for s in svc.app.patches.states() if s['status'] != 'STOPPED'])} running")
|
|
2906
3008
|
if n_users == 0:
|
|
2907
3009
|
print(" no accounts yet: the page will ask for the first administrator's name and password (one time), or run: gea users --workspace ... --action add --role admin --name ...")
|
|
2908
|
-
if
|
|
2909
|
-
|
|
3010
|
+
if svc.tls_status:
|
|
3011
|
+
ts_ = svc.tls_status
|
|
3012
|
+
f_ = ts_.get("facts") or {}
|
|
3013
|
+
print(f" HTTPS ({ts_['state']}): {ts_['detail']}")
|
|
3014
|
+
print(f" names {', '.join(f_.get('names') or [])}; SHA-256 {f_.get('sha256_fingerprint')}")
|
|
3015
|
+
if f_.get("self_signed"):
|
|
3016
|
+
print(f" the certificate to hand out (never the key): {ts_['cert']} - or download it from the Administration page")
|
|
3017
|
+
elif a.host not in ("127.0.0.1", "localhost", "::1") and not a.behind_proxy:
|
|
3018
|
+
print(" NOTE: bound to a network address in plain HTTP. Turn HTTPS on (gea tls --workspace ... --site-cert/--site-key, or --self-signed),")
|
|
3019
|
+
print(" or put the site's TLS proxy in front (--behind-proxy; deploy/README.md), for anything beyond a trusted LAN.")
|
|
2910
3020
|
print(" Ctrl+C stops it; every action is in records/audit.jsonl, every start and stop in records/runlog.jsonl")
|
|
2911
3021
|
print(" the control panel's Stop and Restart end this run with a stated code: 0 stop, 86 start me again -")
|
|
2912
3022
|
print(" the launcher reads it, and on anything but 86 it hands the window to a PowerShell prompt, never a Python one")
|