11from __future__ import print_function
22import json
3- from datetime import datetime , timedelta
43from py42 .sdk import SDK
54from py42 import debug_level
65from py42 import settings
7- from c42eventextractor .common import FileEventHandlers
8- from c42eventextractor .extractors import AEDEventExtractor
9- from c42eventextractor .common import convert_datetime_to_timestamp
6+ from c42eventextractor import FileEventHandlers
7+ from c42eventextractor .extractors import FileEventExtractor
108
9+ from code42cli .compat import str
1110from code42cli .securitydata .options import ExposureType
1211from code42cli .util import print_error
12+ from code42cli import date_helper as date_helper
1313from code42cli .securitydata .cursor_store import AEDCursorStore
1414from code42cli .securitydata .logger_factory import get_error_logger
1515from code42cli .profile .profile import get_profile
@@ -21,7 +21,7 @@ def extract(output_logger, args):
2121 handlers = _create_event_handlers (output_logger , args .is_incremental )
2222 profile = get_profile ()
2323 sdk = _get_sdk (profile , args .is_debug_mode )
24- extractor = AEDEventExtractor (sdk , handlers )
24+ extractor = FileEventExtractor (sdk , handlers )
2525 _call_extract (extractor , args )
2626
2727
@@ -53,44 +53,13 @@ def _get_sdk(profile, is_debug_mode):
5353 return code42
5454
5555
56- def _parse_min_timestamp (begin_date ):
57- min_timestamp = _parse_timestamp (begin_date )
58- boundary_date = datetime .utcnow () - timedelta (days = 90 )
59- boundary = convert_datetime_to_timestamp (boundary_date )
60- if min_timestamp and min_timestamp < boundary :
61- print ("Argument '--begin' must be within 90 days." )
62- exit (1 )
63- return min_timestamp
64-
65-
66- def _parse_timestamp (input_string ):
67- try :
68- # Input represents date str like '2020-02-13'
69- time = datetime .strptime (input_string , "%Y-%m-%d" )
70- except ValueError :
71- # Input represents amount of seconds ago like '86400'
72- if input_string and input_string .isdigit ():
73- now = datetime .utcnow ()
74- time = now - timedelta (minutes = int (input_string ))
75- else :
76- raise ValueError ("input must be a positive integer or a date in YYYY-MM-DD format." )
77-
78- return convert_datetime_to_timestamp (time )
79-
80-
8156def _call_extract (extractor , args ):
8257 if not _determine_if_advanced_query (args ):
83- min_timestamp = _parse_min_timestamp (args .begin_date ) if args .begin_date else None
84- max_timestamp = _parse_timestamp (args .end_date ) if args .end_date else None
58+ event_timestamp_filter_group = _get_event_timestamp_filter (args )
8559 _verify_exposure_types (args .exposure_types )
86- _verify_timestamp_order (min_timestamp , max_timestamp )
87- extractor .extract (
88- initial_min_timestamp = min_timestamp ,
89- max_timestamp = max_timestamp ,
90- exposure_types = args .exposure_types ,
91- )
60+ extractor .extract (args .exposure_types , event_timestamp_filter_group )
9261 else :
93- extractor .extract_raw (args .advanced_query )
62+ extractor .extract_advanced (args .advanced_query )
9463
9564
9665def _determine_if_advanced_query (args ):
@@ -99,7 +68,7 @@ def _determine_if_advanced_query(args):
9968 for key in given_args :
10069 val = given_args [key ]
10170 if not _verify_compatibility_with_advanced_query (key , val ):
102- print_error ("You cannot use --advanced-query with additional search args." )
71+ print_error (u "You cannot use --advanced-query with additional search args." )
10372 exit (1 )
10473 return True
10574 return False
@@ -113,20 +82,19 @@ def _verify_compatibility_with_advanced_query(key, val):
11382 return True
11483
11584
85+ def _get_event_timestamp_filter (args ):
86+ try :
87+ return date_helper .create_event_timestamp_range (args .begin_date , args .end_date )
88+ except ValueError as ex :
89+ print_error (str (ex ))
90+ exit (1 )
91+
92+
11693def _verify_exposure_types (exposure_types ):
11794 if exposure_types is None :
11895 return
11996 options = list (ExposureType ())
12097 for exposure_type in exposure_types :
12198 if exposure_type not in options :
122- print_error ("'{0}' is not a valid exposure type." .format (exposure_type ))
99+ print_error (u "'{0}' is not a valid exposure type." .format (exposure_type ))
123100 exit (1 )
124-
125-
126- def _verify_timestamp_order (begin_timestamp , end_timestamp ):
127- if begin_timestamp is None or end_timestamp is None :
128- return
129-
130- if begin_timestamp >= end_timestamp :
131- print_error ("Begin date cannot be after end date" )
132- exit (1 )
0 commit comments