mirror of
https://github.com/GAM-team/GAM.git
synced 2025-07-06 12:43:35 +00:00
revert 1hr workaround. Fixes #1534
This commit is contained in:
@ -253,13 +253,6 @@ def update_state():
|
||||
|
||||
|
||||
def print_():
|
||||
# This function is rather messy thanks to
|
||||
# https://github.com/GAM-team/GAM/issues/1534
|
||||
# I'd prefer to keep it all in this function for now but if:
|
||||
# - we find other list() operations that also hit this bug OR
|
||||
# - it looks like this issue is going to exist on Google's side
|
||||
# for a long time.
|
||||
# I'll enterain some cleanup here to "functionalize" (yuck) all of this.
|
||||
ci = gapi_cloudidentity.build_dwd()
|
||||
customer = _get_device_customerid()
|
||||
parent = 'devices/-'
|
||||
@ -267,8 +260,6 @@ def print_():
|
||||
get_device_users = True
|
||||
view = None
|
||||
orderByList = []
|
||||
# default sort order needed by our 1 hour bug workaround
|
||||
orderBy = 'create_time'
|
||||
titles = []
|
||||
csvRows = []
|
||||
todrive = False
|
||||
@ -328,97 +319,26 @@ def print_():
|
||||
}
|
||||
if orderByList:
|
||||
orderBy = ','.join(orderByList)
|
||||
custom_device_filter = bool(device_filter)
|
||||
# we store the devices in a dict keyed by name which is a unique ID.
|
||||
# that way when we get duplicate devices we just overwrite the name
|
||||
# with the latest copy we saw.
|
||||
devices = {}
|
||||
else:
|
||||
orderBy = None
|
||||
devices = []
|
||||
page_message = gapi.got_total_items_msg(view_name_map[view], '...\n')
|
||||
pageToken = None
|
||||
newest_device_date = ''
|
||||
total_items = 0
|
||||
while True:
|
||||
try:
|
||||
a_page = gapi.call(ci.devices(),
|
||||
'list',
|
||||
customer=customer,
|
||||
pageSize=100,
|
||||
pageToken=pageToken,
|
||||
filter=device_filter,
|
||||
view=view,
|
||||
orderBy=orderBy,
|
||||
throw_reasons=[gapi_errors.ErrorReason.FOUR_O_O])
|
||||
except googleapiclient.errors.HttpError:
|
||||
sys.stderr.write('WARNING: GAM hit Google internal bug 237397223. Please file a Google Support ticket stating that you are encountering this bug.\n')
|
||||
if orderBy != 'create_time' or custom_device_filter:
|
||||
controlflow.system_error_exit(5, 'GAM workaround for this issue only works if filter and orderby arguments are not used.\n')
|
||||
sys.stderr.write(f' attempting to work around the bug by filtering for devices created on or after the newest we\'ve seen ({newest_device_date})...')
|
||||
device_filter = f'register:{newest_device_date}..'
|
||||
pageToken = None
|
||||
continue
|
||||
for dev in a_page.get('devices', []):
|
||||
total_items += 1
|
||||
devices[dev['name']] = dev
|
||||
dev_date = dev.get('createTime', '')
|
||||
# remove the Z
|
||||
dev_date = dev_date[:-1]
|
||||
# remove microseconds
|
||||
dev_date = dev_date.split('.')[0]
|
||||
if dev_date > newest_device_date:
|
||||
newest_device_date = dev_date
|
||||
pageToken = a_page.get('nextPageToken')
|
||||
if not pageToken:
|
||||
break
|
||||
sys.stderr.write(page_message.replace('%%total_items%%', str(total_items)))
|
||||
devices += gapi.get_all_pages(ci.devices(), 'list', 'devices',
|
||||
customer=customer, page_message=page_message,
|
||||
pageSize=100, filter=device_filter, view=view, orderBy=orderBy)
|
||||
if get_device_users:
|
||||
page_message = gapi.got_total_items_msg('Device Users', '...\n')
|
||||
pageToken = None
|
||||
newest_deviceuser_date = ''
|
||||
total_items = 0
|
||||
device_users = {}
|
||||
if not custom_device_filter:
|
||||
device_filter = None
|
||||
while True:
|
||||
try:
|
||||
a_page = gapi.call(ci.devices().deviceUsers(),
|
||||
'list',
|
||||
customer=customer,
|
||||
parent=parent,
|
||||
pageSize=20,
|
||||
orderBy=orderBy,
|
||||
filter=device_filter,
|
||||
pageToken=pageToken,
|
||||
throw_reasons=[gapi_errors.ErrorReason.FOUR_O_O])
|
||||
except googleapiclient.errors.HttpError:
|
||||
sys.stderr.write('WARNING: GAM hit Google internal bug 237397223. Please file a Google Support ticket stating that you are encountering this bug.\n')
|
||||
if orderBy != 'create_time' or custom_device_filter:
|
||||
controlflow.system_error_exit(5, 'GAM workaround for this issue only works if filter and orderby arguments are not used.\n')
|
||||
sys.stderr.write(f' attempting to work around the bug by filtering for device users created on or after the newest we\'ve seen ({newest_deviceuser_date})...')
|
||||
device_filter = f'register:{newest_deviceuser_date}..'
|
||||
pageToken = None
|
||||
continue
|
||||
for device_user in a_page.get('deviceUsers', []):
|
||||
total_items += 1
|
||||
dev_date = device_user.get('createTime', '')
|
||||
# remove the Z
|
||||
dev_date = dev_date[:-1]
|
||||
# remove microseconds
|
||||
dev_date = dev_date.split('.')[0]
|
||||
if dev_date > newest_deviceuser_date:
|
||||
newest_deviceuser_date = dev_date
|
||||
deviceuser_name = device_user['name']
|
||||
device_users[deviceuser_name] = device_user
|
||||
pageToken = a_page.get('nextPageToken')
|
||||
if not pageToken:
|
||||
break
|
||||
sys.stderr.write(page_message.replace('%%total_items%%', str(total_items)))
|
||||
for deviceuser_name, device_user in device_users.items():
|
||||
device_id = deviceuser_name.split('/')[1]
|
||||
device_name = f'devices/{device_id}'
|
||||
if 'users' not in devices[device_name]:
|
||||
devices[device_name]['users'] = []
|
||||
devices[device_name]['users'].append(device_user)
|
||||
for device in devices.values():
|
||||
device_users = gapi.get_all_pages(ci.devices().deviceUsers(), 'list',
|
||||
'deviceUsers', customer=customer, parent=parent,
|
||||
page_message=page_message, pageSize=1, filter=device_filter)
|
||||
for device_user in device_users:
|
||||
for device in devices:
|
||||
if device_user.get('name').startswith(device.get('name')):
|
||||
if 'users' not in device:
|
||||
device['users'] = []
|
||||
device['users'].append(device_user)
|
||||
break
|
||||
for device in devices:
|
||||
device = utils.flatten_json(device)
|
||||
for a_key in device:
|
||||
if a_key not in titles:
|
||||
|
Reference in New Issue
Block a user