#!/usr/bin/env python3
"""
See Old Script:
~/code/watch/scripts/run_pseudolive_consolidate.py
"""
import os
import subprocess
import ubelt as ub
import scriptconfig as scfg
from geowatch.utils.util_framework import download_region
[docs]
class PseudoliveConsolidateConfig(scfg.DataConfig):
"""
Run pseudolive consolidation script for TA-2 region / site model outputs
"""
region_id = scfg.Value(None, type=str, position=1, required=True, help='Region ID')
input_region_path = scfg.Value(None, type=str, position=2, required=True, help=ub.paragraph(
'''
Path to input T&E Baseline Framework Region definition JSON
'''))
previous_consolidated_output = scfg.Value(None, type=str, position=3, required=True, help=ub.paragraph(
'''
S3 path to consolidated regions / sites from previous
iteration
'''))
current_output = scfg.Value(None, type=str, position=4, required=True, help=ub.paragraph(
'''
S3 path to regions / sites from current iteration
'''))
aws_profile = scfg.Value(None, type=str, help=ub.paragraph(
'''
AWS Profile to use for AWS S3 CLI commands
'''))
outbucket = scfg.Value(None, type=str, required=True, short_alias=['o'], help=ub.paragraph(
'''
S3 Output directory for STAC item / asset egress
'''))
performer_suffix = scfg.Value(None, type=str, short_alias=['s'], help='Performer suffix if present, e.g. KIT')
iou_threshold = scfg.Value(0.5, type=float, short_alias=['i'], help=ub.paragraph(
'''
IOU Threshold for determining duplicates(default: 0.5)
'''))
just_deconflict = scfg.Value(False, isflag=True, help=ub.paragraph(
'''
Don't copy previous sites, just deconflict current site IDs
with respect to previous
'''))
[docs]
def main():
config = PseudoliveConsolidateConfig.cli(strict=True)
print('config = {}'.format(ub.urepr(dict(config), nl=1, align=':')))
run_pseudolive_consolidate(config)
[docs]
def run_pseudolive_consolidate(config):
from geowatch.cli.pseudolive_consolidate import pseudolive_consolidate
if config.aws_profile is not None:
aws_base_command =\
['aws', 's3', '--profile', config.aws_profile, 'cp']
else:
aws_base_command = ['aws', 's3', 'cp']
local_region_path = ub.Path('/tmp/region.json')
local_region_path = download_region(config.input_region_path,
local_region_path,
aws_profile=config.aws_profile,
strip_nonregions=True)
local_previous_dir = os.path.join('/tmp', 'previous_data')
local_current_dir = os.path.join('/tmp', 'current_data')
subprocess.run([*aws_base_command, '--recursive',
config.previous_consolidated_output, local_previous_dir],
check=True)
# Quickly check and short-circuit if no "previous" data was copied
# over (e.g. if there was no previous data)
if len(os.listdir(local_previous_dir)) == 0:
subprocess.run([*aws_base_command, '--recursive',
config.current_output, config.outbucket],
check=True)
return
subprocess.run([*aws_base_command, '--recursive',
config.current_output, local_current_dir],
check=True)
local_consolidated_dir = os.path.join('/tmp', 'consolidated_out')
pseudolive_consolidate(config.region_id,
local_region_path,
local_previous_dir,
local_current_dir,
local_consolidated_dir,
config.iou_threshold,
performer_suffix=config.performer_suffix,
just_deconflict=config.just_deconflict)
subprocess.run([*aws_base_command, '--recursive',
local_consolidated_dir, config.outbucket],
check=True)
if __name__ == "__main__":
main()