def transform_results(results): """Pull out unused fields, add title field from layers if possible""" regulations = set((r['regulation'], r['version']) for r in results) layers = {} for regulation, version in regulations: terms = ESLayers().get('terms', regulation, version) # We need the references, not the locations of defined terms if terms: defined = {} for term_struct in terms['referenced'].values(): defined[term_struct['reference']] = term_struct['term'] terms = defined layers[(regulation, version)] = { 'keyterms': ESLayers().get('keyterms', regulation, version), 'terms': terms } for result in results: title = result.get('title', '') ident = (result['regulation'], result['version']) keyterms = layers[ident]['keyterms'] terms = layers[ident]['terms'] if not title and keyterms and result['label_string'] in keyterms: title = keyterms[result['label_string']][0]['key_term'] if not title and terms and result['label_string'] in terms: title = terms[result['label_string']] if title: result['title'] = title return results
class SplitterLayers(object): """Implementation of Django+Elastic Search as layers backend""" def __init__(self): self.dm = DMLayers() self.es = ESLayers() self.get = self.dm.get def bulk_put(self, layers, version, layer_name, root_label): """Write to both""" self.dm.bulk_put(layers, version, layer_name, root_label) self.es.bulk_put(layers, version, layer_name, root_label)
def test_get_success(self): with self.expect_get('layer', 'namnam:cfr:verver:lablab', {'layer': { 'some': 'body' }}): self.assertEqual(ESLayers().get('namnam', 'cfr', 'verver:lablab'), {"some": "body"})
def test_bulk_insert(self): layers = [{ '111-22': [], '111-22-a': [], 'doc_id': 'verver:111-22' }, { '111-23': [], 'doc_id': 'verver:111-23' }] with self.expect_bulk_insert('layer', 2) as bulk_insert: ESLayers().bulk_insert(layers, 'name', 'cfr') del layers[0]['doc_id'] del layers[1]['doc_id'] transformed = [{ 'id': 'name:cfr:verver:111-22', 'layer': layers[0] }, { 'id': 'name:cfr:verver:111-23', 'layer': layers[1] }] self.assertEqual(transformed, bulk_insert.call_args[0][2])
def test_get_404(self): with self.expect_get('layer', 'namnam:cfr:verver:lablab'): self.assertIsNone(ESLayers().get('namnam', 'cfr', 'verver:lablab'))
def __init__(self): self.dm = DMLayers() self.es = ESLayers() self.get = self.dm.get