示例#1
0
    def test_post_single_key_update(self):
        self.mock_current_user(is_admin=True)

        response = self.test_app.get('/post',
                                     params={
                                         'key': 'single_key_update',
                                         'fields': '{"project": "prj"}',
                                     })
        self.assertEquals('', response.body)
        record = Record.get_by_id('single_key_update')
        self.assertTrue(record != None)
        self.assertEquals(['project=prj'], record.tags)
        self.assertEquals({'project': 'prj'}, record.fields)

        old_count = Record.query().count()
        response = self.test_app.get(
            '/post',
            params={
                'key': 'single_key_update',
                'tags': '1,2,3',
                'fields':
                '{"update": "the", "same": "record", "project": "prj"}',
            })
        self.assertEquals('', response.body)
        self.assertEquals(old_count, Record.query().count())
        record = Record.get_by_id('single_key_update')
        self.assertTrue(record != None)
        self.assertEquals(set(['1', '2', '3', 'project=prj']),
                          set(record.tags))
        self.assertEquals({
            'update': 'the',
            'same': 'record',
            'project': 'prj'
        }, record.fields)
示例#2
0
  def test_post_single_key_update(self):
    self.mock_current_user(is_admin=True)

    response = self.test_app.get('/post', params={
      'key': 'single_key_update',
      'fields': '{"project": "prj"}',
    })
    self.assertEquals('', response.body)
    record = Record.get_by_id('single_key_update')
    self.assertTrue(record != None)
    self.assertEquals(['project=prj'], record.tags)
    self.assertEquals({'project': 'prj'}, record.fields)

    old_count = Record.query().count()
    response = self.test_app.get('/post', params={
      'key': 'single_key_update',
      'tags': '1,2,3',
      'fields': '{"update": "the", "same": "record", "project": "prj"}',
    })
    self.assertEquals('', response.body)
    self.assertEquals(old_count, Record.query().count())
    record = Record.get_by_id('single_key_update')
    self.assertTrue(record != None)
    self.assertEquals(set(['1', '2', '3', 'project=prj']), set(record.tags))
    self.assertEquals({'update': 'the', 'same': 'record', 'project': 'prj'},
                      record.fields)
示例#3
0
  def test_post_multiple(self):
    self.mock_current_user(is_admin=True)
    old_count = Record.query().count()
    response = self.test_app.post('/post', params=[
      ('p', json.dumps({
        'key': 'multiple_0',
        'tags': ['hello', 'world'],
        'fields': {'hello': 'world', 'project': 'prj'},
      })),
      ('p', json.dumps({
        'key': 'multiple_1',
        'fields': {'issue': 'autotagged', 'project': 'prj'},
      })),
      ('p', json.dumps({
        'key': 'multiple_2',
        'tags': ['empty', 'fields'],
        'fields': {'project': 'prj'},
      })),
    ])
    self.assertEquals('', response.body)
    self.assertEquals(old_count + 3, Record.query().count())

    record = Record.get_by_id('multiple_0')
    self.assertEquals(set(['hello', 'world', 'project=prj']), set(record.tags))
    self.assertEquals({'hello': 'world', 'project': 'prj'}, record.fields)

    record = Record.get_by_id('multiple_1')
    self.assertEquals(['issue=autotagged', 'project=prj'], record.tags)
    self.assertEquals({'issue': 'autotagged', 'project': 'prj'}, record.fields)

    record = Record.get_by_id('multiple_2')
    self.assertEquals(set(['empty', 'fields', 'project=prj']),
                      set(record.tags))
    self.assertEquals({'project': 'prj'}, record.fields)
示例#4
0
    def test_post_multiple(self):
        self.mock_current_user(is_admin=True)
        old_count = Record.query().count()
        response = self.test_app.post('/post',
                                      params=[
                                          ('p',
                                           json.dumps({
                                               'key':
                                               'multiple_0',
                                               'tags': ['hello', 'world'],
                                               'fields': {
                                                   'hello': 'world',
                                                   'project': 'prj'
                                               },
                                           })),
                                          ('p',
                                           json.dumps({
                                               'key': 'multiple_1',
                                               'fields': {
                                                   'issue': 'autotagged',
                                                   'project': 'prj'
                                               },
                                           })),
                                          ('p',
                                           json.dumps({
                                               'key':
                                               'multiple_2',
                                               'tags': ['empty', 'fields'],
                                               'fields': {
                                                   'project': 'prj'
                                               },
                                           })),
                                      ])
        self.assertEquals('', response.body)
        self.assertEquals(old_count + 3, Record.query().count())

        record = Record.get_by_id('multiple_0')
        self.assertEquals(set(['hello', 'world', 'project=prj']),
                          set(record.tags))
        self.assertEquals({'hello': 'world', 'project': 'prj'}, record.fields)

        record = Record.get_by_id('multiple_1')
        self.assertEquals(['issue=autotagged', 'project=prj'], record.tags)
        self.assertEquals({
            'issue': 'autotagged',
            'project': 'prj'
        }, record.fields)

        record = Record.get_by_id('multiple_2')
        self.assertEquals(set(['empty', 'fields', 'project=prj']),
                          set(record.tags))
        self.assertEquals({'project': 'prj'}, record.fields)
示例#5
0
文件: query.py 项目: xinghun61/infra
def execute_query(key, begin, end, tags, fields, count, cursor):
    records = []
    next_cursor = ''
    if key and count > 0:
        record = Record.get_by_id(key)
        if record and ((not begin or record.timestamp >= begin) and
                       (not end or record.timestamp <= end)
                       and set(tags).issubset(record.tags)
                       and matches_fields(fields, record)):
            records.append(record)
        more = False
    else:
        more = True
        while more and len(records) < count:
            filters = []
            if begin:
                filters.append(Record.timestamp >= begin)
            if end:
                filters.append(Record.timestamp <= end)
            for tag in tags:
                filters.append(Record.tags == tag)
            query = Record.query().filter(*filters).order(-Record.timestamp)
            page_records, next_cursor, more = query.fetch_page(
                count - len(records),
                start_cursor=Cursor(urlsafe=next_cursor or cursor))
            next_cursor = next_cursor.urlsafe() if next_cursor else ''
            for record in page_records:
                if matches_fields(fields, record):
                    records.append(record)

    return {
        'results': [record.to_dict() for record in records],
        'cursor': next_cursor,
        'more': more,
    }
示例#6
0
 def test_post_single_auto_tagged(self):
     self.mock_current_user(is_admin=True)
     response = self.test_app.get(
         '/post',
         params={
             'key':
             'single_auto_tagged',
             'tags':
             'existingTag,issue=hello',
             'fields':
             '{"issue": "hello", "patchset": "world", "project": "prj"}',
         })
     self.assertEquals('', response.body)
     record = Record.get_by_id('single_auto_tagged')
     self.assertTrue(record != None)
     self.assertEquals(
         set([
             'existingTag', 'issue=hello', 'patchset=world', 'project=prj'
         ]), set(record.tags))
     self.assertEquals(
         {
             'issue': 'hello',
             'patchset': 'world',
             'project': 'prj'
         }, record.fields)
示例#7
0
 def test_post_project_missing(self):
   self.mock_current_user(is_admin=True)
   response = self.test_app.get('/post', params={
     'key': 'single_packet',
     'fields': '{"some": "random"}',
   })
   self.assertEquals('"Project" field missing', response.body)
   record = Record.get_by_id('single_packet')
   self.assertIsNone(record)
示例#8
0
 def test_post_project_missing(self):
     self.mock_current_user(is_admin=True)
     response = self.test_app.get('/post',
                                  params={
                                      'key': 'single_packet',
                                      'fields': '{"some": "random"}',
                                  })
     self.assertEquals('"Project" field missing', response.body)
     record = Record.get_by_id('single_packet')
     self.assertIsNone(record)
示例#9
0
 def test_post_single_packet(self):
   self.mock_current_user(is_admin=True)
   response = self.test_app.get('/post', params={
     'key': 'single_packet',
     'tags': 'tagA,tagB,tagC',
     'fields': '{"some": "random", "json": ["data"], "project": "prj"}',
   })
   self.assertEquals('', response.body)
   record = Record.get_by_id('single_packet')
   self.assertTrue(record != None)
   self.assertEquals(set(['tagA', 'tagB', 'tagC', 'project=prj']),
                     set(record.tags))
   self.assertEquals({'some': 'random', 'json': ['data'], 'project': 'prj'},
                     record.fields)
示例#10
0
 def test_post_single_auto_tagged(self):
   self.mock_current_user(is_admin=True)
   response = self.test_app.get('/post', params={
     'key': 'single_auto_tagged',
     'tags': 'existingTag,issue=hello',
     'fields': '{"issue": "hello", "patchset": "world", "project": "prj"}',
   })
   self.assertEquals('', response.body)
   record = Record.get_by_id('single_auto_tagged')
   self.assertTrue(record != None)
   self.assertEquals(
       set(['existingTag', 'issue=hello', 'patchset=world', 'project=prj']),
       set(record.tags))
   self.assertEquals(
       {'issue': 'hello', 'patchset': 'world', 'project': 'prj'},
       record.fields)
示例#11
0
 def test_post_single_packet(self):
     self.mock_current_user(is_admin=True)
     response = self.test_app.get(
         '/post',
         params={
             'key': 'single_packet',
             'tags': 'tagA,tagB,tagC',
             'fields':
             '{"some": "random", "json": ["data"], "project": "prj"}',
         })
     self.assertEquals('', response.body)
     record = Record.get_by_id('single_packet')
     self.assertTrue(record != None)
     self.assertEquals(set(['tagA', 'tagB', 'tagC', 'project=prj']),
                       set(record.tags))
     self.assertEquals(
         {
             'some': 'random',
             'json': ['data'],
             'project': 'prj'
         }, record.fields)
示例#12
0
def execute_query(
    key, begin, end, tags, fields, count, cursor): # pragma: no cover
  records = []
  next_cursor = ''
  if key and count > 0:
    record = Record.get_by_id(key)
    if record and (
        (not begin or record.timestamp >= begin) and
        (not end or record.timestamp <= end) and
        set(tags).issubset(record.tags) and
        matches_fields(fields, record)):
      records.append(record)
    more = False
  else:
    more = True
    while more and len(records) < count:
      filters = []
      if begin:
        filters.append(Record.timestamp >= begin)
      if end:
        filters.append(Record.timestamp <= end)
      for tag in tags:
        filters.append(Record.tags == tag)
      query = Record.query().filter(*filters).order(-Record.timestamp)
      page_records, next_cursor, more = query.fetch_page(count - len(records),
          start_cursor=Cursor(urlsafe=next_cursor or cursor))
      next_cursor = next_cursor.urlsafe() if next_cursor else ''
      for record in page_records:
        if matches_fields(fields, record):
          records.append(record)

  return {
    'results': [record.to_dict() for record in records],
    'cursor': next_cursor,
    'more': more,
  }