44import os
55import _io
66
7+ from datetime import datetime
78from typing import Optional , Dict , Tuple
89from rich .progress import Progress , SpinnerColumn , TextColumn
910
@@ -28,11 +29,21 @@ def print_api_version(value: bool):
2829 def validate_format_input (value : str ):
2930 VALID_FORMATS = ("list" , "json" , "xml" , "html" )
3031 if value not in VALID_FORMATS :
31- raise typer .BadParameter (
32- f"{ value } is not in available formats: { VALID_FORMATS } "
33- )
32+ raise typer .BadParameter (f"{ value } is not in available formats: { VALID_FORMATS } " )
3433 return value
3534
35+ @staticmethod
36+ def validate_after_or_before_input (value : str ):
37+ if value is None or value .replace ("-" , "" ).isdigit ():
38+ return value
39+
40+ # Checks if value is a valid ISO 8601 datetime string in UTC form
41+ try :
42+ datetime .strptime (value , "%Y-%m-%dT%H:%M:%SZ" )
43+ return value
44+ except :
45+ raise typer .BadParameter (f"{ value } is neither an integer or a valid ISO 8601 datetime string in UTC form" )
46+
3647 @staticmethod
3748 def validate_source_file_extension (value : str ):
3849 """Validates source file extension.
@@ -51,9 +62,7 @@ def validate_source_file_extension(value: str):
5162 ext = get_file_extension (value )
5263
5364 if ext .lower () not in VALID_EXTENSIONS :
54- raise typer .BadParameter (
55- f"{ value } is not in valid extensions. Valid file extensions: { VALID_EXTENSIONS } "
56- )
65+ raise typer .BadParameter (f"{ value } is not in valid extensions. Valid file extensions: { VALID_EXTENSIONS } " )
5766
5867 return value
5968
@@ -85,11 +94,7 @@ def args_to_dict(*args) -> Dict:
8594 def _get_formatted_output (cls , cmd_name : str , response , out_format : str = "json" ):
8695 if cmd_name in ("available_api_calls" ,):
8796 return "\n " .join (response )
88- return str (
89- getattr (response , out_format )
90- if out_format != "list"
91- else response .as_list ()
92- )
97+ return str (getattr (response , out_format ) if out_format != "list" else response .as_list ())
9398
9499 @classmethod
95100 def _get_credentials (cls , params : Optional [Dict ] = {}) -> Tuple [str ]:
@@ -106,9 +111,7 @@ def _get_credentials(cls, params: Optional[Dict] = {}) -> Tuple[str]:
106111 with open (creds_file , "r" ) as cf :
107112 user , key = cf .readline ().strip (), cf .readline ().strip ()
108113 except FileNotFoundError as e :
109- raise typer .BadParameter (
110- f"{ str (e )} . Please create one first and try again."
111- )
114+ raise typer .BadParameter (f"{ str (e )} . Please create one first and try again." )
112115
113116 return user , key
114117
@@ -198,9 +201,7 @@ def run(cls, name: str, params: Optional[Dict] = {}, **kwargs):
198201 total = None ,
199202 )
200203
201- output = cls ._get_formatted_output (
202- cmd_name = name , response = response , out_format = response_format
203- )
204+ output = cls ._get_formatted_output (cmd_name = name , response = response , out_format = response_format )
204205
205206 if isinstance (out_file , _io .TextIOWrapper ):
206207 # use rich `print` command to prettify the ouput in sys.stdout
@@ -215,10 +216,7 @@ def run(cls, name: str, params: Optional[Dict] = {}, **kwargs):
215216 _reason = getattr (e , "reason" , {})
216217 # check data type first as some of the reasons is just plain text
217218 if isinstance (_reason , dict ):
218- _reason = (
219- _reason .get ("error" , {}).get ("message" )
220- or "Unknown Error occured."
221- )
219+ _reason = _reason .get ("error" , {}).get ("message" ) or "Unknown Error occured."
222220
223221 reason = typer .style (_reason , bg = typer .colors .RED )
224222
0 commit comments