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)
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)
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)
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)
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, }
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)
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)
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)
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)
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)
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)
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, }