-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgenerate_parent_id.py
84 lines (66 loc) · 2.66 KB
/
generate_parent_id.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
import uuid
import argparse
def name_parent(metadata):
if metadata['platform'].startswith('S1'):
parent_name = f"{metadata['platform']}_{metadata['mode']}_{metadata['producttype']}"
elif metadata['platform'].startswith('S2'):
parent_name = f"{metadata['platform']}_{metadata['producttype']}"
elif metadata['platform'].startswith('S3'):
parent_name = f"{metadata['platform']}_{metadata['instrument']}"
elif metadata['platform'].startswith('S5'):
parent_name = f"{metadata['platform']}_{metadata['producttype']}"
return parent_name
def get_product_metadata(product_name):
# TODO: Get metadata from file name so we don't have to query.
platform = product_name.split('_')[0]
metadata = {
'platform': platform
}
if platform.startswith('S1'):
metadata['mode'] = product_name.split('_')[1]
metadata['producttype'] = product_name.split('_')[2]
elif platform.startswith('S2'):
metadata['producttype'] = product_name.split('_')[1]
elif platform.startswith('S3'):
short_name = product_name.split('_')[1]
if short_name == 'OL':
metadata['instrument'] = 'OLCI'
elif short_name == 'SL':
metadata['instrument'] = 'SLSTR'
elif short_name == 'SY':
metadata['instrument'] = 'Synergy'
elif short_name == 'SR':
metadata['instrument'] = 'SRAL'
elif platform.startswith('S5'):
metadata['producttype'] = product_name[9:19]
else:
raise ValueError(f'Product {product_name} not found')
return metadata
def generate_v5_uuid(text):
# Create a version 5 uuid
namespace = uuid.UUID('d84d177b-5755-4e16-9b8e-6a9f335c8376')
uuid5 = str(uuid.uuid5(namespace, text))
return uuid5
def parent_id_from_metadata(metadata):
text = ' '.join(str(value) for key, value in metadata.items() if key != 'uuid')
parentid = generate_v5_uuid(text)
return parentid
def generate_parent_id(child_product_name):
child_product_name = child_product_name.split('.')[0]
metadata = get_product_metadata(child_product_name)
parentid = parent_id_from_metadata(metadata)
parent_name = name_parent(metadata)
return parentid, metadata, parent_name
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Script to create an ID for the parent of a sentinel product"
)
parser.add_argument(
"--product_name",
type=str,
required=True,
help="Filepath to the parent MMD file"
)
args = parser.parse_args()
product_name = args.product_name
parent_id, metadata, parent_name = generate_parent_id(product_name)