Esempio n. 1
0
    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}}))
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
 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']))