def test_datefmt(self, mock_get_localzone): hill_valley = pytz.timezone('America/Los_Angeles') mock_get_localzone.return_value = hill_valley expected = '21 Oct 2015 16:29:00' formats = ['2015-10-21T23:29:00Z', '2015-10-21T23:29:00.00', '2015-10-21T23:29:00'] for i in formats: self.assertEqual(expected, util.datefmt({'time_created': i})) self.assertEqual(expected, util.datefmt({'properties': {'time_created': i}}))
def list(self, args): if args.by_id: return self.idlist(args) objtype = self.objtype folders = {} def get_folder(ident): if not folders: folders.update({f['id']: f for f in self.client.list_objects('folder')}) return folders[ident] items = self.client.list_objects(objtype) for item in items: folder = (item['folder'] and get_folder(item['folder'])['title'] or '') item['folder_name'] = folder table = prettytable.PrettyTable(['Name', 'Updated', 'Folder']) def sortkey(i): return i['folder_name'] + ' ' + i['title'] for item in sorted(items, key=sortkey): table.add_row([item['title'], util.datefmt(item), item['folder_name']]) print(table)
def list(self, args): if args.format and args.format.lower() == 'help': msg = [ '--format takes a python-like format string, such as: ', '', ' %(title)s: %(latitude).4f,%(longitude).5f', '', 'which might display something like this:', '', ' My Campsite: 45.1234,-122.98765', '', 'Where the field name can be anything in "properties" ', 'for an object (as displayed by the "show" command). ', 'Also, the following special format keys are available: ', '' ] fmt = util.ThingFormatter({}) for key in fmt.keys: doc = getattr(fmt, 'format_%s' % key).__doc__ msg.append(' - %s: %s' % (key, doc)) msg.extend([ '', 'Note that using --format causes an API call for each item ', 'in a list in order to fetch the full set of properties. ', 'Please limit the list in some way to avoid undue stress ', 'on gaiagps.com.' ]) print(os.linesep.join(msg)) return 0 folder_filter = self.folder_filter(args.in_folder) if args.by_id: return self.idlist(args) objtype = self.objtype folders = {} def get_folder(ident): if not folders: folders.update( {f['id']: f for f in self.client.list_objects('folder')}) return folders[ident] if args.archived is not None: show_archived = args.archived only_archived = show_archived else: show_archived = True only_archived = False items = self.client.list_objects(objtype, archived=show_archived) for item in items: folder = (item['folder'] and get_folder(item['folder'])['title'] or '') item['folder_name'] = folder table = prettytable.PrettyTable(['Name', 'Updated', 'Folder']) def sortkey(i): return i['folder_name'] + ' ' + i['title'] for item in sorted(folder_filter(items), key=sortkey): if args.match and not re.search(args.match, item['title']): continue if args.match_date and not self._match_date(item, args.match_date): continue if only_archived and not item['deleted']: continue if args.format: # This is unfortunately very heavy, but since we do not seem to # be able to get whole objects in list format, this is really # the only option at the moment. item = self.get_object(item['id']) print(args.format % util.ThingFormatter(item)) else: table.add_row( [item['title'], util.datefmt(item), item['folder_name']]) if not args.format: print(table)
def idlist(self, args): objtype = self.objtype items = self.client.list_objects(objtype) for item in items: print('%-36s %20s %r' % (item['id'], util.datefmt(item), item['title']))