3
3
4
4
import copy
5
5
import json
6
- from distutils .version import LooseVersion
6
+ import sys
7
+ if sys .version_info <= (3 , 6 ):
8
+ from distutils .version import LooseVersion as parse
9
+ else :
10
+ from packaging .version import parse
7
11
from collections import namedtuple , defaultdict
8
12
import base64
9
13
from datetime import datetime , timedelta
@@ -656,7 +660,7 @@ def __init__(self, *args, **kwargs):
656
660
def _query_implementation (cls , cb ):
657
661
# ** Disable the paginated query implementation for now **
658
662
659
- # if cb.cb_server_version >= LooseVersion ("5.2.0"):
663
+ # if cb.cb_server_version >= parse ("5.2.0"):
660
664
# return SensorPaginatedQuery(cls, cb)
661
665
# else:
662
666
# return SensorQuery(cls, cb)
@@ -869,7 +873,7 @@ def _update_object(self):
869
873
870
874
if "event_log_flush_time" in self ._dirty_attributes and self ._info .get ("event_log_flush_time" ,
871
875
None ) is not None :
872
- if self ._cb .cb_server_version > LooseVersion ("6.0.0" ):
876
+ if self ._cb .cb_server_version > parse ("6.0.0" ):
873
877
# since the date/time stamp just needs to be far in the future, we just fake a GMT timezone.
874
878
try :
875
879
self ._info ["event_log_flush_time" ] = self .event_log_flush_time .strftime ("%a, %d %b %Y %H:%M:%S GMT" )
@@ -1070,7 +1074,7 @@ def _retrieve_cb_info(self):
1070
1074
return info
1071
1075
1072
1076
def _update_object (self ):
1073
- if self ._cb .cb_server_version < LooseVersion ("6.1.0" ) or self ._info .get ("id" , None ) is None :
1077
+ if self ._cb .cb_server_version < parse ("6.1.0" ) or self ._info .get ("id" , None ) is None :
1074
1078
# only include IDs of the teams and not the entire dictionary
1075
1079
# - applies to Cb Response server < 6.0 as well as Cb Response servers >= 6.0 where the user hasn't
1076
1080
# been created yet.
@@ -1394,7 +1398,7 @@ class ThreatReport(MutableBaseModel):
1394
1398
1395
1399
@classmethod
1396
1400
def _query_implementation (cls , cb ):
1397
- if cb .cb_server_version >= LooseVersion ('5.1.0' ):
1401
+ if cb .cb_server_version >= parse ('5.1.0' ):
1398
1402
return ThreatReportQuery (cls , cb )
1399
1403
else :
1400
1404
return Query (cls , cb )
@@ -1524,7 +1528,7 @@ def group_by(self, field_name):
1524
1528
:return: Query object
1525
1529
:rtype: :py:class:`ProcessQuery`
1526
1530
"""
1527
- if self ._cb .cb_server_version >= LooseVersion ('6.0.0' ):
1531
+ if self ._cb .cb_server_version >= parse ('6.0.0' ):
1528
1532
nq = self ._clone ()
1529
1533
nq ._default_args ["cb.group" ] = field_name
1530
1534
return nq
@@ -1573,7 +1577,7 @@ def min_last_update(self, v):
1573
1577
:return: Query object
1574
1578
:rtype: :py:class:`ProcessQuery`
1575
1579
"""
1576
- if self ._cb .cb_server_version >= LooseVersion ('6.0.0' ):
1580
+ if self ._cb .cb_server_version >= parse ('6.0.0' ):
1577
1581
nq = self ._clone ()
1578
1582
try :
1579
1583
v = v .strftime ("%Y-%m-%dT%H:%M:%SZ" )
@@ -1599,7 +1603,7 @@ def min_last_server_update(self, v):
1599
1603
:return: Query object
1600
1604
:rtype: :py:class:`ProcessQuery`
1601
1605
"""
1602
- if self ._cb .cb_server_version >= LooseVersion ('6.0.0' ):
1606
+ if self ._cb .cb_server_version >= parse ('6.0.0' ):
1603
1607
nq = self ._clone ()
1604
1608
try :
1605
1609
v = v .strftime ("%Y-%m-%dT%H:%M:%SZ" )
@@ -1625,7 +1629,7 @@ def max_last_update(self, v):
1625
1629
:return: Query object
1626
1630
:rtype: :py:class:`ProcessQuery`
1627
1631
"""
1628
- if self ._cb .cb_server_version >= LooseVersion ('6.0.0' ):
1632
+ if self ._cb .cb_server_version >= parse ('6.0.0' ):
1629
1633
nq = self ._clone ()
1630
1634
try :
1631
1635
v = v .strftime ("%Y-%m-%dT%H:%M:%SZ" )
@@ -1651,7 +1655,7 @@ def max_last_server_update(self, v):
1651
1655
:return: Query object
1652
1656
:rtype: :py:class:`ProcessQuery`
1653
1657
"""
1654
- if self ._cb .cb_server_version >= LooseVersion ('6.0.0' ):
1658
+ if self ._cb .cb_server_version >= parse ('6.0.0' ):
1655
1659
nq = self ._clone ()
1656
1660
try :
1657
1661
v = v .strftime ("%Y-%m-%dT%H:%M:%SZ" )
@@ -2285,7 +2289,7 @@ def parse_guid(self, procguid):
2285
2289
# new 5.x process IDs are hex strings with optional segment IDs.
2286
2290
if len (procguid ) == 45 :
2287
2291
return procguid [:36 ], int (procguid [38 :], 16 )
2288
- elif len (procguid ) == 49 and self ._cb .cb_server_version >= LooseVersion ('6.0.0' ):
2292
+ elif len (procguid ) == 49 and self ._cb .cb_server_version >= parse ('6.0.0' ):
2289
2293
return procguid [:36 ], int (procguid [38 :], 16 )
2290
2294
else :
2291
2295
return None , None
@@ -2309,7 +2313,7 @@ def __init__(self, cb, procguid, segment=None, max_children=15, initial_data=Non
2309
2313
self .__children_info = None
2310
2314
self .__sibling_info = None
2311
2315
2312
- if cb .cb_server_version < LooseVersion ('6.0.0' ):
2316
+ if cb .cb_server_version < parse ('6.0.0' ):
2313
2317
self ._default_segment = 1
2314
2318
else :
2315
2319
self ._default_segment = 0
@@ -2322,7 +2326,7 @@ def __init__(self, cb, procguid, segment=None, max_children=15, initial_data=Non
2322
2326
if len (procguid ) == 45 :
2323
2327
self .id = procguid [:36 ]
2324
2328
self .current_segment = int (procguid [38 :], 16 )
2325
- elif len (procguid ) == 49 and cb .cb_server_version >= LooseVersion ('6.0.0' ):
2329
+ elif len (procguid ) == 49 and cb .cb_server_version >= parse ('6.0.0' ):
2326
2330
self .id = procguid [:36 ]
2327
2331
self .current_segment = int (procguid [38 :], 16 )
2328
2332
else :
@@ -2339,14 +2343,14 @@ def __init__(self, cb, procguid, segment=None, max_children=15, initial_data=Non
2339
2343
2340
2344
self ._process_summary_api = 'v1'
2341
2345
2342
- if cb .cb_server_version >= LooseVersion ('6.0.0' ):
2346
+ if cb .cb_server_version >= parse ('6.0.0' ):
2343
2347
self ._process_summary_api = 'v2'
2344
2348
self ._process_event_api = 'v4'
2345
2349
self ._event_parser = ProcessV4Parser (self )
2346
- elif cb .cb_server_version >= LooseVersion ('5.2.0' ):
2350
+ elif cb .cb_server_version >= parse ('5.2.0' ):
2347
2351
self ._process_event_api = 'v3'
2348
2352
self ._event_parser = ProcessV3Parser (self )
2349
- elif cb .cb_server_version >= LooseVersion ('5.1.0' ):
2353
+ elif cb .cb_server_version >= parse ('5.1.0' ):
2350
2354
# CbER 5.1.0 introduced an extended event API
2351
2355
self ._process_event_api = 'v2'
2352
2356
self ._event_parser = ProcessV2Parser (self )
@@ -2755,7 +2759,7 @@ def all_events_segment(self):
2755
2759
2756
2760
def get_segments (self ):
2757
2761
if not self ._segments :
2758
- if self ._cb .cb_server_version < LooseVersion ('6.0.0' ):
2762
+ if self ._cb .cb_server_version < parse ('6.0.0' ):
2759
2763
log .debug ("using process_id search for cb response server < 6.0" )
2760
2764
segment_query = Query (Process , self ._cb , query = "process_id:{0}" .format (self .id )).sort ("" )
2761
2765
proclist = sorted ([res ["segment_id" ] for res in segment_query ._search ()])
@@ -3066,7 +3070,7 @@ def require_all_events(self):
3066
3070
self .all_events_loaded = True
3067
3071
3068
3072
def all_childprocs (self ):
3069
- if self ._cb .cb_server_version < LooseVersion ('6.0.0' ):
3073
+ if self ._cb .cb_server_version < parse ('6.0.0' ):
3070
3074
self .get_segments ()
3071
3075
segments = self ._segments
3072
3076
@@ -3088,7 +3092,7 @@ def all_childprocs(self):
3088
3092
i += 1
3089
3093
3090
3094
def all_modloads (self ):
3091
- if self ._cb .cb_server_version < LooseVersion ('6.0.0' ):
3095
+ if self ._cb .cb_server_version < parse ('6.0.0' ):
3092
3096
self .get_segments ()
3093
3097
segments = self ._segments
3094
3098
@@ -3110,7 +3114,7 @@ def all_modloads(self):
3110
3114
i += 1
3111
3115
3112
3116
def all_filemods (self ):
3113
- if self ._cb .cb_server_version < LooseVersion ('6.0.0' ):
3117
+ if self ._cb .cb_server_version < parse ('6.0.0' ):
3114
3118
self .get_segments ()
3115
3119
segments = self ._segments
3116
3120
@@ -3132,7 +3136,7 @@ def all_filemods(self):
3132
3136
i += 1
3133
3137
3134
3138
def all_processblocks (self ):
3135
- if self ._cb .cb_server_version < LooseVersion ('6.0.0' ):
3139
+ if self ._cb .cb_server_version < parse ('6.0.0' ):
3136
3140
self .get_segments ()
3137
3141
segments = self ._segments
3138
3142
@@ -3154,7 +3158,7 @@ def all_processblocks(self):
3154
3158
i += 1
3155
3159
3156
3160
def all_regmods (self ):
3157
- if self ._cb .cb_server_version < LooseVersion ('6.0.0' ):
3161
+ if self ._cb .cb_server_version < parse ('6.0.0' ):
3158
3162
self .get_segments ()
3159
3163
segments = self ._segments
3160
3164
@@ -3176,7 +3180,7 @@ def all_regmods(self):
3176
3180
i += 1
3177
3181
3178
3182
def all_crossprocs (self ):
3179
- if self ._cb .cb_server_version < LooseVersion ('6.0.0' ):
3183
+ if self ._cb .cb_server_version < parse ('6.0.0' ):
3180
3184
self .get_segments ()
3181
3185
segments = self ._segments
3182
3186
@@ -3198,7 +3202,7 @@ def all_crossprocs(self):
3198
3202
i += 1
3199
3203
3200
3204
def all_netconns (self ):
3201
- if self ._cb .cb_server_version < LooseVersion ('6.0.0' ):
3205
+ if self ._cb .cb_server_version < parse ('6.0.0' ):
3202
3206
self .get_segments ()
3203
3207
segments = self ._segments
3204
3208
0 commit comments