11#!/usr/bin/env python
22# Set supersede info on a pointer
33import json
4+ import os
45
56import aws_session_assume
67import fire
1617
1718logger .setLevel ("ERROR" )
1819
20+ SKIP_PROD_WARNING = os .getenv ("SKIP_PROD_WARNING" , "false" )
21+
1922
2023def _set_pointer_supersede_info (
2124 pointer_id : str ,
2225 supersede_pointer_id : str ,
23- delete_superceded : bool = False ,
26+ delete_superseded : bool = False ,
2427 env : str = "dev" ,
2528 table_name : str | None = None ,
2629):
30+ if env == "prod" and SKIP_PROD_WARNING != "true" :
31+ confirmation = input (
32+ "\n WARNING - This command will modify the PROD environment. Continue? [y/n] "
33+ )
34+ if confirmation != "y" :
35+ return "Exiting at user request"
36+
2737 session = aws_session_assume .get_boto_session (env )
2838 dynamodb = session .resource ("dynamodb" )
2939
@@ -53,21 +63,22 @@ def _set_pointer_supersede_info(
5363
5464 try :
5565 pointer = DocumentPointer .model_validate ({"_from_dynamo" : True , ** item })
66+ doc_ref = DocumentReference .model_validate_json (pointer .document )
5667 except Exception as e :
5768 print (f"Could not validate pointer from table. Error: { e } " )
5869 return
5970
60- doc_ref = DocumentReference .model_validate_json (pointer .document )
61-
6271 if not doc_ref .relatesTo :
6372 doc_ref .relatesTo = []
64- else :
65- for relatesTo in doc_ref .relatesTo :
66- if relatesTo .code == "replaces" :
67- print (
68- f"Unable to add supersede info as pointer is already superseding a pointer: { relatesTo } "
69- )
70- return
73+
74+ existing_supersedes = [
75+ relates_to for relates_to in doc_ref .relatesTo if relates_to .code == "replaces"
76+ ]
77+ if existing_supersedes :
78+ print (
79+ f"Unable to add supersede info as pointer is already superseding a pointer: { existing_supersedes } "
80+ )
81+ return
7182
7283 doc_ref .relatesTo .append (
7384 DocumentReferenceRelatesTo (
@@ -79,13 +90,13 @@ def _set_pointer_supersede_info(
7990 )
8091 )
8192
82- print (f"Adding superseded info to { pointer_id } ..." )
93+ print (f"Adding supersede info to { pointer_id } ..." )
8394 updated_pointer = DocumentPointer .from_document_reference (doc_ref )
8495 table .put_item (
8596 Item = updated_pointer .dict (exclude_none = True , exclude = {"_from_dynamo" })
8697 )
8798
88- if delete_superceded :
99+ if delete_superseded :
89100 print (f"Deleting superseded { supersede_pointer_id } ..." )
90101 table .delete_item (
91102 Key = {"pk" : f"D#{ supersede_pointer_id } " , "sk" : f"D#{ supersede_pointer_id } " }
0 commit comments