Example #1
0
    def test_get_all_pages_uses_default_max_page_size(self):
        sample_api_id = list(gapi.MAX_RESULTS_API_EXCEPTIONS.keys())[0]
        sample_api_max_results = gapi.MAX_RESULTS_API_EXCEPTIONS[sample_api_id]
        self.mock_method.return_value.methodId = sample_api_id
        self.mock_service._rootDesc = {
            'resources': {
                'someResource': {
                    'methods': {
                        'someMethod': {
                            'id': sample_api_id,
                            'parameters': {
                                'maxResults': {
                                    'maximum': sample_api_max_results
                                }
                            }
                        }
                    }
                }
            }
        }
        self.mock_method.return_value.execute.return_value = self.empty_items_response

        gapi.get_all_pages(self.mock_service, self.mock_method_name)
        request_method_kwargs = self.mock_method.call_args[1]
        self.assertIn('maxResults', request_method_kwargs)
        self.assertEqual(request_method_kwargs['maxResults'],
                         gapi.MAX_RESULTS_API_EXCEPTIONS.get(sample_api_id))
Example #2
0
    def test_get_all_pages_prints_attribute_last_item_in_paging_message(self):
        self.mock_method.return_value.execute.side_effect = self.simple_3_page_response

        paging_message = 'Last item in page: %%last_item%%'
        with patch.object(gapi.sys.stderr, 'write') as mock_write:
            gapi.get_all_pages(self.mock_service,
                               self.mock_method_name,
                               page_message=paging_message,
                               message_attribute='position')

        messages_written = [
            call_args[0][0] for call_args in mock_write.call_args_list
        ]
        page_1_message = paging_message.replace(
            '%%last_item%%',
            self.simple_3_page_response[0]['items'][-1]['position'])
        self.assertIn(page_1_message, messages_written)

        page_2_message = paging_message.replace(
            '%%last_item%%',
            self.simple_3_page_response[1]['items'][-1]['position'])
        self.assertIn(page_2_message, messages_written)

        # Assert that the template text is always replaced.
        for message in messages_written:
            self.assertNotIn('%%last_item', message)
Example #3
0
    def test_get_all_pages_prints_attribute_total_items_in_paging_message(
            self):
        self.mock_method.return_value.execute.side_effect = self.simple_3_page_response

        paging_message = 'Total number of items discovered: %%total_items%%'
        with patch.object(gapi.sys.stderr, 'write') as mock_write:
            gapi.get_all_pages(self.mock_service,
                               self.mock_method_name,
                               page_message=paging_message)

        messages_written = [
            call_args[0][0] for call_args in mock_write.call_args_list
        ]
        page_1_item_count = len(self.simple_3_page_response[0]['items'])
        page_1_message = paging_message.replace('%%total_items%%',
                                                str(page_1_item_count))
        self.assertIn(page_1_message, messages_written)

        page_2_item_count = len(self.simple_3_page_response[1]['items'])
        page_2_message = paging_message.replace(
            '%%total_items%%', str(page_1_item_count + page_2_item_count))
        self.assertIn(page_2_message, messages_written)

        page_3_item_count = len(self.simple_3_page_response[2]['items'])
        page_3_message = paging_message.replace(
            '%%total_items%%',
            str(page_1_item_count + page_2_item_count + page_3_item_count))
        self.assertIn(page_3_message, messages_written)

        # Assert that the template text is always replaced.
        for message in messages_written:
            self.assertNotIn('%%total_items', message)
Example #4
0
    def test_get_all_pages_max_page_size_overrided(self):
        self.mock_method.return_value.execute.return_value = self.empty_items_response

        gapi.get_all_pages(self.mock_service,
                           self.mock_method_name,
                           pageSize=123456)
        request_method_kwargs = self.mock_method.call_args[1]
        self.assertIn('pageSize', request_method_kwargs)
        self.assertEqual(123456, request_method_kwargs['pageSize'])
Example #5
0
 def test_get_all_pages_passes_additional_kwargs_to_service_method(self):
     self.mock_method.return_value.execute.return_value = self.empty_items_response
     gapi.get_all_pages(self.mock_service,
                        self.mock_method_name,
                        my_param_1=1,
                        my_param_2=2)
     method_kwargs = self.mock_method.call_args[1]
     self.assertEqual(method_kwargs.get('my_param_1'), 1)
     self.assertEqual(method_kwargs.get('my_param_2'), 2)
Example #6
0
 def test_get_all_pages_passes_throw_and_retry_reasons(self, mock_call):
     throw_for = MagicMock()
     retry_for = MagicMock()
     mock_call.return_value = self.empty_items_response
     gapi.get_all_pages(self.mock_service,
                        self.mock_method_name,
                        throw_reasons=throw_for,
                        retry_reasons=retry_for)
     method_kwargs = mock_call.call_args[1]
     self.assertEqual(method_kwargs.get('throw_reasons'), throw_for)
     self.assertEqual(method_kwargs.get('retry_reasons'), retry_for)
Example #7
0
    def test_get_all_pages_includes_next_pagetoken_in_request(self):
        page_1 = {'items': ['1-1', '1-2', '1-3'], 'nextPageToken': 'someToken'}
        page_2 = {'items': ['2-1', '2-2', '2-3']}
        self.mock_method.return_value.execute.side_effect = [page_1, page_2]

        gapi.get_all_pages(self.mock_service,
                           self.mock_method_name,
                           pageSize=100)
        self.assertEqual(self.mock_method.call_count, 2)
        call_2_kwargs = self.mock_method.call_args_list[1][1]
        self.assertIn('pageToken', call_2_kwargs)
        self.assertEqual(call_2_kwargs['pageToken'], page_1['nextPageToken'])
Example #8
0
    def test_get_all_pages_prints_paging_message(self):
        self.mock_method.return_value.execute.side_effect = self.simple_3_page_response

        paging_message = 'A simple string displayed during paging'
        with patch.object(gapi.sys.stderr, 'write') as mock_write:
            gapi.get_all_pages(self.mock_service,
                               self.mock_method_name,
                               page_message=paging_message)
        messages_written = [
            call_args[0][0] for call_args in mock_write.call_args_list
        ]
        self.assertIn(paging_message, messages_written)
Example #9
0
def info():
    ci = gapi_cloudidentity.build_dwd()
    customer = _get_device_customerid()
    name = _get_device_name()
    device = gapi.call(ci.devices(), 'get', name=name, customer=customer)
    device_users = gapi.get_all_pages(ci.devices().deviceUsers(), 'list',
        'deviceUsers', parent=name, customer=customer)
    for device_user in device_users:
        parent = device_user['name']
        device_user['client_states'] = gapi.get_all_pages(
                  ci.devices().deviceUsers().clientStates(),
                  'list', 'clientStates', parent=parent, customer=customer)
    display.print_json(device)
    print('Device Users:')
    display.print_json(device_users)
Example #10
0
def print_():
    '''gam print userinvitations'''
    svc = gapi_cloudidentity.build('cloudidentity_beta')
    customer = _get_customerid()
    todrive = False
    titles = []
    rows = []
    filter_ = None
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower().replace('_', '')
        if myarg == 'filter':
            filter_ = sys.argv[i + 1]
            i += 2
        elif myarg == 'todrive':
            todrive = True
            i += 1
        else:
            controlflow.invalid_argument_exit(sys.argv[i],
                                              'gam print userinvitations')
    invitations = gapi.get_all_pages(svc.customers().userinvitations(),
                                     'list',
                                     'userInvitations',
                                     parent=customer,
                                     filter=filter_)
    for invitation in invitations:
        invitation['name'] = _reduce_name(invitation['name'])
        row = {}
        for key, val in invitation.items():
            if key not in titles:
                titles.append(key)
            row[key] = val
        rows.append(row)
    display.write_csv_file(rows, titles, 'User Invitations', todrive)
Example #11
0
def print_members():
    chat = build()
    space = None
    todrive = False
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower()
        if myarg == 'space':
            space = sys.argv[i + 1]
            if space[:7] != 'spaces/':
                space = f'spaces/{space}'
            i += 2
        elif myarg == 'todrive':
            todrive = True
            i += 1
        else:
            controlflow.invalid_argument_exit(myarg, 'gam print chatmembers')
    if not space:
        controlflow.system_error_exit(2, 'space <ChatSpace> is required.')
    try:
        results = gapi.get_all_pages(chat.spaces().members(),
                                     'list',
                                     'memberships',
                                     parent=space)
    except googleapiclient.errors.HttpError as err:
        _chat_error_handler(chat, err)
    members = []
    titles = []
    for result in results:
        member = utils.flatten_json(result)
        for key in member:
            if key not in titles:
                titles.append(key)
        members.append(utils.flatten_json(result))
    display.write_csv_file(members, titles, 'Chat Members', todrive)
Example #12
0
    def test_get_all_pages_ends_paging_message_with_newline(self):
        self.mock_method.return_value.execute.side_effect = self.simple_3_page_response

        paging_message = 'A simple string displayed during paging'
        with patch.object(gapi.sys.stderr, 'write') as mock_write:
            gapi.get_all_pages(self.mock_service,
                               self.mock_method_name,
                               page_message=paging_message)
        messages_written = [
            call_args[0][0] for call_args in mock_write.call_args_list
        ]
        last_page_message_index = len(
            messages_written) - messages_written[::-1].index(paging_message)
        last_carriage_return_index = len(
            messages_written) - messages_written[::-1].index('\r\n')
        self.assertGreater(last_carriage_return_index, last_page_message_index)
Example #13
0
def print_():
    cd = gapi_directory.build()
    todrive = False
    titles = [
        'roleId', 'roleName', 'roleDescription', 'isSuperAdminRole',
        'isSystemRole'
    ]
    fields = f'nextPageToken,items({",".join(titles)})'
    csvRows = []
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower()
        if myarg == 'todrive':
            todrive = True
            i += 1
        else:
            controlflow.invalid_argument_exit(sys.argv[i],
                                              'gam print adminroles')
    roles = gapi.get_all_pages(cd.roles(),
                               'list',
                               'items',
                               customer=GC_Values[GC_CUSTOMER_ID],
                               fields=fields)
    for role in roles:
        role_attrib = {}
        for key, value in list(role.items()):
            role_attrib[key] = value
        csvRows.append(role_attrib)
    display.write_csv_file(csvRows, titles, 'Admin Roles', todrive)
Example #14
0
def print_models():
    '''gam print printermodels'''
    cdapi = gapi_directory.build()
    parent = _get_customerid()
    filter_ = None
    todrive = False
    titles = []
    rows = []
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower()
        if myarg == 'filter':
            filter_ = sys.argv[i+1]
            i += 2
        elif myarg == 'todrive':
            todrive = True
            i += 1
        else:
            controlflow.invalid_argument_exit(sys.argv[i], 'gam print printermodels')
    models = gapi.get_all_pages(cdapi.customers().chrome().printers(),
                                  'listPrinterModels',
                                  items='printerModels',
                                  parent=parent,
                                  pageSize=10000,
                                  filter=filter_)
    for model in models:
        row = {}
        for key, val in model.items():
            if key not in titles:
                titles.append(key)
            row[key] = val
        rows.append(row)
    display.write_csv_file(rows, titles, 'Printer Models', todrive)
Example #15
0
def get_relative_milestone(channel='stable', minus=0):
    '''
    takes a channel and minus like stable and -1.
    returns current given milestone number
    '''
    cv = build()
    parent = f'chrome/platforms/all/channels/{channel}/versions/all'
    releases = gapi.get_all_pages(cv.platforms().channels().versions().releases(),
                                  'list',
                                  'releases',
                                  parent=parent,
                                  fields='releases/version,nextPageToken')
    milestones = []
    # Note that milestones are usually sequential but some numbers
    # may be skipped. For example, there was no Chrome 82 stable.
    # Thus we need to do more than find the latest version and subtract.
    for release in releases:
        milestone = release.get('version').split('.')[0]
        if milestone not in milestones:
            milestones.append(milestone)
    milestones.sort(reverse=True)
    try:
        return milestones[minus]
    except IndexError:
        return ''
Example #16
0
def print_():
    '''gam print printers'''
    cdapi = gapi_directory.build()
    parent = _get_customerid()
    filter_ = None
    todrive = False
    titles = []
    rows = []
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower()
        if myarg == 'filter':
            filter_ = sys.argv[i+1]
            i += 2
        elif myarg == 'todrive':
            todrive = True
            i += 1
        else:
            controlflow.invalid_argument_exit(sys.argv[i], 'gam print printermodels')
    printers = gapi.get_all_pages(cdapi.customers().chrome().printers(),
                                  'list',
                                  items='printers',
                                  parent=parent,
                                  filter=filter_)
    for printer in printers:
        if 'orgUnitId' in printer:
            printer['orgUnitPath'] = gapi_directory_orgunits.orgunit_from_orgunitid(
                printer['orgUnitId'], cdapi)
        row = {}
        for key, val in printer.items():
            if key not in titles:
                titles.append(key)
            row[key] = val
        rows.append(row)
    display.write_csv_file(rows, titles, 'Printers', todrive)
Example #17
0
def info():
    ci = gapi_cloudidentity.build('cloudidentity_beta')
    group = gam.normalizeEmailAddressOrUID(sys.argv[3])
    getUsers = True
    showJoinDate = True
    showUpdateDate = False
    showMemberTree = False
    i = 4
    while i < len(sys.argv):
        myarg = sys.argv[i].lower().replace('_', '')
        if myarg == 'nousers':
            getUsers = False
            i += 1
        elif myarg == 'nojoindate':
            showJoinDate = False
            i += 1
        elif myarg == 'showupdatedate':
            showUpdateDate = True
            i += 1
        elif myarg == 'membertree':
            showMemberTree = True
            i += 1
        else:
            controlflow.invalid_argument_exit(myarg, 'gam info cigroup')
    name = group_email_to_id(ci, group)
    basic_info = gapi.call(ci.groups(), 'get', name=name)
    display.print_json(basic_info)
    if getUsers and not showMemberTree:
        if not showJoinDate and not showUpdateDate:
            view = 'BASIC'
            pageSize = 1000
        else:
            view = 'FULL'
            pageSize = 500
        members = gapi.get_all_pages(ci.groups().memberships(),
                                     'list',
                                     'memberships',
                                     parent=name,
                                     fields='*',
                                     pageSize=pageSize,
                                     view=view)
        print(' Members:')
        for member in members:
            role = get_single_role(member.get('roles', [])).lower()
            email = member.get('memberKey', {}).get('id')
            member_type = member.get('type', 'USER').lower()
            jc_string = ''
            if showJoinDate:
                joined = member.get('createTime', 'Unknown')
                jc_string += f'  joined {joined}'
            if showUpdateDate:
                updated = member.get('updateTime', 'Unknown')
                jc_string += f'  updated {updated}'
            print(f'  {role}: {email} ({member_type}){jc_string}')
        print(f'Total {len(members)} users in group')
    elif showMemberTree:
        print(' Membership Tree:')
        cached_group_members = {}
        print_member_tree(ci, name, cached_group_members, 2, True)
Example #18
0
def print_():
    cbcm = build()
    customer_id = _get_customerid()
    projection = 'BASIC'
    orgUnitPath = query = None
    fields = None
    titles = []
    csv_rows = []
    todrive = False
    sort_headers = False
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower().replace('_', '')
        if myarg == 'query':
            query = sys.argv[i + 1]
            i += 2
        elif myarg in ['ou', 'org', 'orgunit']:
            orgUnitPath = gapi_directory_orgunits.getOrgUnitItem(
                sys.argv[i + 1], pathOnly=True, absolutePath=True)
            i += 2
        elif myarg == 'projection':
            projection = sys.argv[i + 1].upper()
            i += 2
        elif myarg == 'todrive':
            todrive = True
            i += 1
        elif myarg == 'sortheaders':
            sort_headers = True
            i += 1
        elif myarg == 'fields':
            fields = sys.argv[i + 1].replace(',', ' ').split()
            i += 2
        else:
            controlflow.invalid_argument_exit(sys.argv[i],
                                              'gam print browsers')
    if fields:
        fields.append('deviceId')
        fields = f'browsers({",".join(set(fields))}),nextPageToken'
    page_message = gapi.got_total_items_msg('Browsers', '...\n')
    browsers = gapi.get_all_pages(cbcm.chromebrowsers(),
                                  'list',
                                  'browsers',
                                  page_message=page_message,
                                  customer=customer_id,
                                  orgUnitPath=orgUnitPath,
                                  query=query,
                                  projection=projection,
                                  fields=fields)
    for browser in browsers:
        browser = utils.flatten_json(browser)
        for a_key in browser:
            if a_key not in titles:
                titles.append(a_key)
        csv_rows.append(browser)
    if sort_headers:
        display.sort_csv_titles([
            'deviceId',
        ], titles)
    display.write_csv_file(csv_rows, titles, 'Browsers', todrive)
Example #19
0
 def test_get_all_pages_non_default_items_field_name(self):
     field_name = 'things'
     fake_response = {field_name: [{}, {}, {}]}
     self.mock_method.return_value.execute.return_value = fake_response
     page = gapi.get_all_pages(self.mock_service,
                               self.mock_method_name,
                               items=field_name)
     self.assertEqual(page, fake_response[field_name])
Example #20
0
def printEvents():
    calendarId, cal = buildCalendarDataGAPIObject(sys.argv[2])
    if not cal:
        return
    q = showDeleted = showHiddenInvitations = timeMin = \
        timeMax = timeZone = updatedMin = None
    toDrive = False
    titles = []
    csvRows = []
    i = 4
    while i < len(sys.argv):
        myarg = sys.argv[i].lower().replace('_', '')
        if myarg == 'query':
            q = sys.argv[i + 1]
            i += 2
        elif myarg == 'includedeleted':
            showDeleted = True
            i += 1
        elif myarg == 'includehidden':
            showHiddenInvitations = True
            i += 1
        elif myarg == 'after':
            timeMin = utils.get_time_or_delta_from_now(sys.argv[i + 1])
            i += 2
        elif myarg == 'before':
            timeMax = utils.get_time_or_delta_from_now(sys.argv[i + 1])
            i += 2
        elif myarg == 'timezone':
            timeZone = sys.argv[i + 1]
            i += 2
        elif myarg == 'updated':
            updatedMin = utils.get_time_or_delta_from_now(sys.argv[i + 1])
            i += 2
        elif myarg == 'todrive':
            toDrive = True
            i += 1
        else:
            controlflow.invalid_argument_exit(
                sys.argv[i], 'gam calendar <email> printevents')
    page_message = gapi.got_total_items_msg(f'Events for {calendarId}', '')
    results = gapi.get_all_pages(cal.events(),
                                 'list',
                                 'items',
                                 page_message=page_message,
                                 calendarId=calendarId,
                                 q=q,
                                 showDeleted=showDeleted,
                                 showHiddenInvitations=showHiddenInvitations,
                                 timeMin=timeMin,
                                 timeMax=timeMax,
                                 timeZone=timeZone,
                                 updatedMin=updatedMin)
    for result in results:
        row = {'calendarId': calendarId}
        display.add_row_titles_to_csv_file(
            utils.flatten_json(result, flattened=row), csvRows, titles)
    display.sort_csv_titles(['calendarId', 'id', 'summary', 'status'], titles)
    display.write_csv_file(csvRows, titles, 'Calendar Events', toDrive)
Example #21
0
def transferSecCals(users):
    target_user = sys.argv[5]
    remove_source_user = sendNotifications = True
    i = 6
    while i < len(sys.argv):
        myarg = sys.argv[i].lower().replace('_', '')
        if myarg == 'keepuser':
            remove_source_user = False
            i += 1
        elif myarg == 'sendnotifications':
            sendNotifications = gam.getBoolean(sys.argv[i + 1], myarg)
            i += 2
        else:
            controlflow.invalid_argument_exit(sys.argv[i],
                                              'gam <users> transfer seccals')
    if remove_source_user:
        target_user, target_cal = buildCalendarGAPIObject(target_user)
        if not target_cal:
            return
    for user in users:
        user, source_cal = buildCalendarGAPIObject(user)
        if not source_cal:
            continue
        calendars = gapi.get_all_pages(source_cal.calendarList(),
                                       'list',
                                       'items',
                                       soft_errors=True,
                                       minAccessRole='owner',
                                       showHidden=True,
                                       fields='items(id),nextPageToken')
        for calendar in calendars:
            calendarId = calendar['id']
            if calendarId.find('@group.calendar.google.com') != -1:
                body = {
                    'role': 'owner',
                    'scope': {
                        'type': 'user',
                        'value': target_user
                    }
                }
                gapi.call(source_cal.acl(),
                          'insert',
                          calendarId=calendarId,
                          body=body,
                          sendNotifications=sendNotifications)
                if remove_source_user:
                    body = {
                        'role': 'none',
                        'scope': {
                            'type': 'user',
                            'value': user
                        }
                    }
                    gapi.call(target_cal.acl(),
                              'insert',
                              calendarId=calendarId,
                              body=body,
                              sendNotifications=sendNotifications)
Example #22
0
def printApps():
    cm = build()
    customer = _get_customerid()
    todrive = False
    titles = CHROME_APPS_TITLES
    csvRows = []
    orgunit = None
    pfilter = None
    orderBy = None
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower().replace('_', '')
        if myarg == 'todrive':
            todrive = True
            i += 1
        elif myarg in ['ou', 'org', 'orgunit']:
            orgunit = _get_orgunit(sys.argv[i + 1])
            i += 2
        elif myarg == 'filter':
            pfilter = sys.argv[i + 1]
            i += 2
        elif myarg == 'orderby':
            orderBy = sys.argv[i + 1].lower().replace('_', '')
            if orderBy not in CHROME_APPS_ORDERBY_CHOICE_MAP:
                controlflow.expected_argument_exit(
                    'orderby', ', '.join(CHROME_APPS_ORDERBY_CHOICE_MAP),
                    orderBy)
            orderBy = CHROME_APPS_ORDERBY_CHOICE_MAP[orderBy]
            i += 2
        else:
            msg = f'{myarg} is not a valid argument to "gam print chromeapps"'
            controlflow.system_error_exit(3, msg)
    if orgunit:
        orgUnitPath = gapi_directory_orgunits.orgunit_from_orgunitid(
            orgunit, None)
        titles.append('orgUnitPath')
    else:
        orgUnitPath = '/'
    gam.printGettingAllItems('Chrome Installed Applications', pfilter)
    page_message = gapi.got_total_items_msg('Chrome Installed Applications',
                                            '...\n')
    apps = gapi.get_all_pages(cm.customers().reports(),
                              'countInstalledApps',
                              'installedApps',
                              page_message=page_message,
                              customer=customer,
                              orgUnitId=orgunit,
                              filter=pfilter,
                              orderBy=orderBy)
    for app in apps:
        if orgunit:
            app['orgUnitPath'] = orgUnitPath
        if 'permissions' in app:
            app['permissions'] = ' '.join(app['permissions'])
        csvRows.append(app)
    display.write_csv_file(csvRows, titles, 'Chrome Installed Applications',
                           todrive)
Example #23
0
def printExports():
    v = buildGAPIObject()
    todrive = False
    csvRows = []
    initialTitles = ['matterId', 'id', 'name', 'createTime', 'status']
    titles = initialTitles[:]
    matters = []
    matterIds = []
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower().replace('_', '')
        if myarg == 'todrive':
            todrive = True
            i += 1
        elif myarg in ['matter', 'matters']:
            matters = sys.argv[i + 1].split(',')
            i += 2
        else:
            controlflow.invalid_argument_exit(myarg, 'gam print exports')
    if not matters:
        fields = 'matters(matterId),nextPageToken'
        matters_results = gapi.get_all_pages(v.matters(),
                                             'list',
                                             'matters',
                                             view='BASIC',
                                             state='OPEN',
                                             fields=fields)
        for matter in matters_results:
            matterIds.append(matter['matterId'])
    else:
        for matter in matters:
            matterIds.append(getMatterItem(v, matter))
    for matterId in matterIds:
        sys.stderr.write(f'Retrieving exports for matter {matterId}\n')
        exports = gapi.get_all_pages(v.matters().exports(),
                                     'list',
                                     'exports',
                                     matterId=matterId)
        for export in exports:
            display.add_row_titles_to_csv_file(
                utils.flatten_json(export, flattened={'matterId': matterId}),
                csvRows, titles)
    display.sort_csv_titles(initialTitles, titles)
    display.write_csv_file(csvRows, titles, 'Vault Exports', todrive)
Example #24
0
def printBuildings():
    to_drive = False
    cd = gapi_directory.build()
    titles = []
    csvRows = []
    fieldsList = ['buildingId']
    # buildings.list() currently doesn't support paging
    # but should soon, attempt to use it now so we
    # won't break when it's turned on.
    fields = 'nextPageToken,buildings(%s)'
    possible_fields = {}
    for pfield in cd._rootDesc['schemas']['Building']['properties']:
        possible_fields[pfield.lower()] = pfield
    i = 3
    while i < len(sys.argv):
        myarg = sys.argv[i].lower()
        if myarg == 'todrive':
            to_drive = True
            i += 1
        elif myarg == 'allfields':
            fields = None
            i += 1
        elif myarg in possible_fields:
            fieldsList.append(possible_fields[myarg])
            i += 1
        # Allows shorter arguments like "name" instead of "buildingname"
        elif 'building' + myarg in possible_fields:
            fieldsList.append(possible_fields['building' + myarg])
            i += 1
        else:
            controlflow.invalid_argument_exit(sys.argv[i],
                                              'gam print buildings')
    if fields:
        fields = fields % ','.join(fieldsList)
    buildings = gapi.get_all_pages(cd.resources().buildings(),
                                   'list',
                                   'buildings',
                                   customer=GC_Values[GC_CUSTOMER_ID],
                                   fields=fields)
    for building in buildings:
        building.pop('etags', None)
        building.pop('etag', None)
        building.pop('kind', None)
        if 'buildingId' in building:
            building['buildingId'] = f'id:{building["buildingId"]}'
        if 'floorNames' in building:
            building['floorNames'] = ','.join(building['floorNames'])
        building = utils.flatten_json(building)
        for item in building:
            if item not in titles:
                titles.append(item)
        csvRows.append(building)
    display.sort_csv_titles('buildingId', titles)
    display.write_csv_file(csvRows, titles, 'Buildings', to_drive)
Example #25
0
 def test_get_all_pages_returns_all_items(self):
     page_1 = {'items': ['1-1', '1-2', '1-3'], 'nextPageToken': '2'}
     page_2 = {'items': ['2-1', '2-2', '2-3'], 'nextPageToken': '3'}
     page_3 = {'items': ['3-1', '3-2', '3-3']}
     self.mock_method.return_value.execute.side_effect = [
         page_1, page_2, page_3
     ]
     response_items = gapi.get_all_pages(self.mock_service,
                                         self.mock_method_name)
     self.assertListEqual(
         response_items, page_1['items'] + page_2['items'] + page_3['items'])
Example #26
0
def _getAllMatterIds(v=None, state='OPEN'):
    if not v:
        v = buildGAPIObject()
    fields = 'matters(matterId),nextPageToken'
    results = gapi.get_all_pages(v.matters(),
                                 'list',
                                 'matters',
                                 view='BASIC',
                                 state=state,
                                 fields=fields)
    return [matter['matterId'] for matter in results]
Example #27
0
def _get_groups_list(ci=None, member=None, parent=None):
    if not ci:
        ci = gapi_cloudidentity.build()
    if not parent:
        gapi_directory_customer.setTrueCustomerId()
        parent = f'customers/{GC_Values[GC_CUSTOMER_ID]}'
    gam.printGettingAllItems('Groups', member)
    page_message = gapi.got_total_items_first_last_msg('Groups')
    if member:
        fields = 'nextPageToken,memberships(groupKey(id),relationType)'
        try:
            groups_to_get = gapi.get_all_pages(
                ci.groups().memberships(),
                'searchTransitiveGroups',
                'memberships',
                throw_reasons=[gapi_errors.ErrorReason.FOUR_O_O],
                message_attribute=['groupKey', 'id'],
                page_message=page_message,
                parent='groups/-',
                query=member,
                pageSize=1000,
                fields=fields)
        except googleapiclient.errors.HttpError:
            controlflow.system_error_exit(
                2, 'enterprisemember requires Enterprise license')
        return [
            group['groupKey']['id'] for group in groups_to_get
            if group['relationType'] == 'DIRECT'
        ]
    else:
        groups_to_get = gapi.get_all_pages(
            ci.groups(),
            'list',
            'groups',
            message_attribute=['groupKey', 'id'],
            page_message=page_message,
            parent=parent,
            view='BASIC',
            pageSize=1000,
            fields='nextPageToken,groups(groupKey(id))')
        return [group['groupKey']['id'] for group in groups_to_get]
Example #28
0
def info():
    ci = gapi_cloudidentity.build_dwd()
    customer = f'customers/{GC_Values[GC_CUSTOMER_ID]}'
    name = sys.argv[3]
    if not name.startswith('devices/'):
        name = f'devices/{name}'
    device = gapi.call(ci.devices(), 'get', name=name, customer=customer)
    device_users = gapi.get_all_pages(ci.devices().deviceUsers(), 'list',
        'deviceUsers', parent=name, customer=customer)
    display.print_json(device)
    print('Device Users:')
    display.print_json(device_users)
Example #29
0
    def test_get_all_pages_prints_paging_message_inline(self):
        self.mock_method.return_value.execute.side_effect = self.simple_3_page_response

        paging_message = 'A simple string displayed during paging'
        with patch.object(gapi.sys.stderr, 'write') as mock_write:
            gapi.get_all_pages(self.mock_service,
                               self.mock_method_name,
                               page_message=paging_message)
        messages_written = [
            call_args[0][0] for call_args in mock_write.call_args_list
        ]

        # Make sure a return carriage was written between two pages
        paging_message_call_positions = [
            i for i, message in enumerate(messages_written)
            if message == paging_message
        ]
        self.assertGreater(len(paging_message_call_positions), 1)
        printed_between_page_messages = messages_written[
            paging_message_call_positions[0]:paging_message_call_positions[1]]
        self.assertIn('\r', printed_between_page_messages)
Example #30
0
def buildRoleIdToNameToIdMap(cd=None):
    if not cd:
        cd = gapi_directory.build()
    result = gapi.get_all_pages(cd.roles(),
                                'list',
                                'items',
                                customer=GC_Values[GC_CUSTOMER_ID],
                                fields='nextPageToken,items(roleId,roleName)')
    GM_Globals[GM_MAP_ROLE_ID_TO_NAME] = {}
    GM_Globals[GM_MAP_ROLE_NAME_TO_ID] = {}
    for role in result:
        GM_Globals[GM_MAP_ROLE_ID_TO_NAME][role['roleId']] = role['roleName']
        GM_Globals[GM_MAP_ROLE_NAME_TO_ID][role['roleName']] = role['roleId']