コード例 #1
0
 def test_write_file_displays_errors(self, mock_open_file, mock_print_error):
     mock_open_file.side_effect = IOError()
     fileutils.write_file(self.fake_path,
                          'foo data',
                          continue_on_error=True,
                          display_errors=True)
     self.assertTrue(mock_print_error.called)
コード例 #2
0
 def test_write_file_exits_code_6_when_continue_on_error_is_false(
         self, mock_open_file):
     mock_open_file.side_effect = IOError()
     with self.assertRaises(SystemExit) as context:
         fileutils.write_file(self.fake_path,
                              'foo data',
                              continue_on_error=False)
     self.assertEqual(context.exception.code, 6)
コード例 #3
0
    def test_write_file_writes_data_to_file(self, mock_open_file):
        fake_data = 'some fake data'
        fileutils.write_file(self.fake_path, fake_data)
        self.assertEqual(mock_open_file.call_args[0][0], self.fake_path)
        self.assertEqual(mock_open_file.call_args[0][1], 'w')

        opened_file = mock_open_file.return_value.__enter__()
        self.assertTrue(opened_file.write.called)
        self.assertEqual(opened_file.write.call_args[0][0], fake_data)
コード例 #4
0
ファイル: oauth.py プロジェクト: ejochman/GAM
 def _locked_write(self):
     """Writes credentials to disk while the file lock is held."""
     assert self._lock.is_locked
     if not self.filename:
         # If no filename was provided to the constructor, these credentials cannot
         # be saved to disk.
         raise CredentialsError(
             'The credentials have no associated filename and cannot be saved '
             'to disk.')
     fileutils.write_file(self._filename, self.to_json())
コード例 #5
0
 def test_write_file_continues_on_errors_without_displaying(
         self, mock_open_file, mock_print_error):
     mock_open_file.side_effect = IOError()
     status = fileutils.write_file(self.fake_path,
                                   'foo data',
                                   continue_on_error=True,
                                   display_errors=False)
     self.assertFalse(status)
     self.assertFalse(mock_print_error.called)
コード例 #6
0
def doGetCrosInfo():
    cd = gapi_directory.build()
    i, devices = getCrOSDeviceEntity(3, cd)
    downloadfile = None
    targetFolder = GC_Values[GC_DRIVE_DIR]
    projection = None
    fieldsList = []
    noLists = False
    startDate = endDate = None
    listLimit = 0
    while i < len(sys.argv):
        myarg = sys.argv[i].lower().replace('_', '')
        if myarg == 'nolists':
            noLists = True
            i += 1
        elif myarg == 'listlimit':
            listLimit = gam.getInteger(sys.argv[i + 1], myarg, minVal=-1)
            i += 2
        elif myarg in CROS_START_ARGUMENTS:
            startDate = _getFilterDate(sys.argv[i + 1])
            i += 2
        elif myarg in CROS_END_ARGUMENTS:
            endDate = _getFilterDate(sys.argv[i + 1])
            i += 2
        elif myarg == 'allfields':
            projection = 'FULL'
            fieldsList = []
            i += 1
        elif myarg in PROJECTION_CHOICES_MAP:
            projection = PROJECTION_CHOICES_MAP[myarg]
            if projection == 'FULL':
                fieldsList = []
            else:
                fieldsList = CROS_BASIC_FIELDS_LIST[:]
            i += 1
        elif myarg in CROS_ARGUMENT_TO_PROPERTY_MAP:
            fieldsList.extend(CROS_ARGUMENT_TO_PROPERTY_MAP[myarg])
            i += 1
        elif myarg == 'fields':
            fieldNameList = sys.argv[i + 1]
            for field in fieldNameList.lower().replace(',', ' ').split():
                if field in CROS_ARGUMENT_TO_PROPERTY_MAP:
                    fieldsList.extend(CROS_ARGUMENT_TO_PROPERTY_MAP[field])
                    if field in CROS_ACTIVE_TIME_RANGES_ARGUMENTS + \
                                CROS_DEVICE_FILES_ARGUMENTS + \
                                CROS_RECENT_USERS_ARGUMENTS:
                        projection = 'FULL'
                        noLists = False
                else:
                    controlflow.invalid_argument_exit(field,
                                                      'gam info cros fields')
            i += 2
        elif myarg == 'downloadfile':
            downloadfile = sys.argv[i + 1]
            if downloadfile.lower() == 'latest':
                downloadfile = downloadfile.lower()
            i += 2
        elif myarg == 'targetfolder':
            targetFolder = os.path.expanduser(sys.argv[i + 1])
            if not os.path.isdir(targetFolder):
                os.makedirs(targetFolder)
            i += 2
        else:
            controlflow.invalid_argument_exit(sys.argv[i], 'gam info cros')
    if fieldsList:
        fieldsList.append('deviceId')
        fields = ','.join(set(fieldsList)).replace('.', '/')
    else:
        fields = None
    i = 0
    device_count = len(devices)
    for deviceId in devices:
        i += 1
        cros = gapi.call(cd.chromeosdevices(),
                         'get',
                         customerId=GC_Values[GC_CUSTOMER_ID],
                         deviceId=deviceId,
                         projection=projection,
                         fields=fields)
        print(f'CrOS Device: {deviceId} ({i} of {device_count})')
        if 'notes' in cros:
            cros['notes'] = cros['notes'].replace('\n', '\\n')
        if 'autoUpdateExpiration' in cros:
            cros['autoUpdateExpiration'] = utils.formatTimestampYMD(
                cros['autoUpdateExpiration'])
        _checkTPMVulnerability(cros)
        for up in CROS_SCALAR_PROPERTY_PRINT_ORDER:
            if up in cros:
                if isinstance(cros[up], str):
                    print(f'  {up}: {cros[up]}')
                else:
                    sys.stdout.write(f'  {up}:')
                    display.print_json(cros[up], '  ')
        if not noLists:
            activeTimeRanges = _filterTimeRanges(
                cros.get('activeTimeRanges', []), startDate, endDate)
            lenATR = len(activeTimeRanges)
            if lenATR:
                print('  activeTimeRanges')
                num_ranges = min(lenATR, listLimit or lenATR)
                for activeTimeRange in activeTimeRanges[:num_ranges]:
                    active_date = activeTimeRange['date']
                    active_time = activeTimeRange['activeTime']
                    duration = utils.formatMilliSeconds(active_time)
                    minutes = active_time // 60000
                    print(f'    date: {active_date}')
                    print(f'      activeTime: {active_time}')
                    print(f'      duration: {duration}')
                    print(f'      minutes: {minutes}')
            recentUsers = cros.get('recentUsers', [])
            lenRU = len(recentUsers)
            if lenRU:
                print('  recentUsers')
                num_ranges = min(lenRU, listLimit or lenRU)
                for recentUser in recentUsers[:num_ranges]:
                    useremail = recentUser.get('email')
                    if not useremail:
                        if recentUser['type'] == 'USER_TYPE_UNMANAGED':
                            useremail = 'UnmanagedUser'
                        else:
                            useremail = 'Unknown'
                    print(f'    type: {recentUser["type"]}')
                    print(f'      email: {useremail}')
            deviceFiles = _filterCreateReportTime(cros.get('deviceFiles',
                                                           []), 'createTime',
                                                  startDate, endDate)
            lenDF = len(deviceFiles)
            if lenDF:
                num_ranges = min(lenDF, listLimit or lenDF)
                print('  deviceFiles')
                for deviceFile in deviceFiles[:num_ranges]:
                    device_type = deviceFile['type']
                    create_time = deviceFile['createTime']
                    print(f'    {device_type}: {create_time}')
            if downloadfile:
                deviceFiles = cros.get('deviceFiles', [])
                lenDF = len(deviceFiles)
                if lenDF:
                    if downloadfile == 'latest':
                        deviceFile = deviceFiles[-1]
                    else:
                        for deviceFile in deviceFiles:
                            if deviceFile['createTime'] == downloadfile:
                                break
                        else:
                            print(f'ERROR: file {downloadfile} not ' \
                                  f'available to download.')
                            deviceFile = None
                    if deviceFile:
                        created = deviceFile['createTime']
                        downloadfile = f'cros-logs-{deviceId}-{created}.zip'
                        downloadfilename = os.path.join(
                            targetFolder, downloadfile)
                        dl_url = deviceFile['downloadUrl']
                        _, content = cd._http.request(dl_url)
                        fileutils.write_file(downloadfilename,
                                             content,
                                             mode='wb',
                                             continue_on_error=True)
                        print(f'Downloaded: {downloadfilename}')
                elif downloadfile:
                    print('ERROR: no files to download.')
            cpuStatusReports = _filterCreateReportTime(
                cros.get('cpuStatusReports', []), 'reportTime', startDate,
                endDate)
            lenCSR = len(cpuStatusReports)
            if lenCSR:
                print('  cpuStatusReports')
                num_ranges = min(lenCSR, listLimit or lenCSR)
                for cpuStatusReport in cpuStatusReports[:num_ranges]:
                    print(f'    reportTime: {cpuStatusReport["reportTime"]}')
                    print('      cpuTemperatureInfo')
                    tempInfos = cpuStatusReport.get('cpuTemperatureInfo', [])
                    for tempInfo in tempInfos:
                        temp_label = tempInfo['label'].strip()
                        temperature = tempInfo['temperature']
                        print(f'        {temp_label}: {temperature}')
                    if 'cpuUtilizationPercentageInfo' in cpuStatusReport:
                        pct_info = cpuStatusReport[
                            'cpuUtilizationPercentageInfo']
                        util = ','.join([str(x) for x in pct_info])
                        print(f'      cpuUtilizationPercentageInfo: {util}')
            diskVolumeReports = cros.get('diskVolumeReports', [])
            lenDVR = len(diskVolumeReports)
            if lenDVR:
                print('  diskVolumeReports')
                print('    volumeInfo')
                num_ranges = min(lenDVR, listLimit or lenDVR)
                for diskVolumeReport in diskVolumeReports[:num_ranges]:
                    volumeInfo = diskVolumeReport['volumeInfo']
                    for volume in volumeInfo:
                        vid = volume['volumeId']
                        vstorage_free = volume['storageFree']
                        vstorage_total = volume['storageTotal']
                        print(f'      volumeId: {vid}')
                        print(f'        storageFree: {vstorage_free}')
                        print(f'        storageTotal: {vstorage_total}')
            systemRamFreeReports = _filterCreateReportTime(
                cros.get('systemRamFreeReports', []), 'reportTime', startDate,
                endDate)
            lenSRFR = len(systemRamFreeReports)
            if lenSRFR:
                print('  systemRamFreeReports')
                num_ranges = min(lenSRFR, listLimit or lenSRFR)
                for systemRamFreeReport in systemRamFreeReports[:num_ranges]:
                    report_time = systemRamFreeReport['reportTime']
                    free_info = systemRamFreeReport['systemRamFreeInfo']
                    free_ram = ','.join(free_info)
                    print(f'    reportTime: {report_time}')
                    print(f'      systemRamFreeInfo: {free_ram}')
コード例 #7
0
def create():
    verif = build()
    a_domain = sys.argv[3]
    txt_record = gapi.call(verif.webResource(),
                           'getToken',
                           body={
                               'site': {
                                   'type': 'INET_DOMAIN',
                                   'identifier': a_domain
                               },
                               'verificationMethod': 'DNS_TXT'
                           })
    print(f'TXT Record Name:   {a_domain}')
    print(f'TXT Record Value:  {txt_record["token"]}')
    print()
    cname_record = gapi.call(verif.webResource(),
                             'getToken',
                             body={
                                 'site': {
                                     'type': 'INET_DOMAIN',
                                     'identifier': a_domain
                                 },
                                 'verificationMethod': 'DNS_CNAME'
                             })
    cname_token = cname_record['token']
    cname_list = cname_token.split(' ')
    cname_subdomain = cname_list[0]
    cname_value = cname_list[1]
    print(f'CNAME Record Name:   {cname_subdomain}.{a_domain}')
    print(f'CNAME Record Value:  {cname_value}')
    print('')
    webserver_file_record = gapi.call(
        verif.webResource(),
        'getToken',
        body={
            'site': {
                'type': 'SITE',
                'identifier': f'http://{a_domain}/'
            },
            'verificationMethod': 'FILE'
        })
    webserver_file_token = webserver_file_record['token']
    print(f'Saving web server verification file to: {webserver_file_token}')
    fileutils.write_file(webserver_file_token,
                         f'google-site-verification: {webserver_file_token}',
                         continue_on_error=True)
    print(f'Verification File URL: http://{a_domain}/{webserver_file_token}')
    print()
    webserver_meta_record = gapi.call(
        verif.webResource(),
        'getToken',
        body={
            'site': {
                'type': 'SITE',
                'identifier': f'http://{a_domain}/'
            },
            'verificationMethod': 'META'
        })
    print(f'Meta URL:               http://{a_domain}/')
    print(f'Meta HTML Header Data:  {webserver_meta_record["token"]}')
    print()