def __init__(self, server, project_id=None):
     if not isinstance(server, RefineServer):
         if '/project?project=' in server:
             server, project_id = server.split('/project?project=')
             server = RefineServer(server)
         elif re.match(r'\d+$', server):  # just digits => project ID
             server, project_id = RefineServer(), server
         else:
             server = RefineServer(server)
     self.server = server
     if not project_id:
         raise Exception('Missing Refine project ID')
     self.project_id = project_id
     self.engine = facet.Engine()
     self.sorting = facet.Sorting()
     self.history_entry = None
     # following filled in by get_models()
     self.key_column = None
     self.has_records = False
     self.columns = None
     self.column_order = {}  # map of column names to order in UI
     self.rows_response_factory = None  # for parsing get_rows()
     self.get_models()
     # following filled in by get_reconciliation_services
     self.recon_services = None
Beispiel #2
0
 def test_facet(self):
     # Section "2. Exploration using Facets": {4}
     party_code_facet = facet.TextFacet(column='Party Code')
     response = self.project.compute_facets(party_code_facet)
     pc = response.facets[0]
     # test look by index same as look up by facet object
     self.assertEqual(pc, response.facets[party_code_facet])
     self.assertEqual(pc.name, 'Party Code')
     self.assertEqual(pc.choices['D'].count, 3700)
     self.assertEqual(pc.choices['N'].count, 15)
     self.assertEqual(pc.blank_choice.count, 1446)
     # {5}, {6}
     engine = facet.Engine(party_code_facet)
     ethnicity_facet = facet.TextFacet(column='Ethnicity')
     engine.add_facet(ethnicity_facet)
     self.project.engine = engine
     response = self.project.compute_facets()
     e = response.facets[ethnicity_facet]
     self.assertEqual(e.choices['B'].count, 1255)
     self.assertEqual(e.choices['W'].count, 4469)
     # {7}
     ethnicity_facet.include('B')
     response = self.project.get_rows()
     self.assertEqual(response.filtered, 1255)
     indexes = [row.index for row in response.rows]
     self.assertEqual(indexes, [1, 2, 3, 4, 6, 12, 18, 26, 28, 32])
     # {8}
     response = self.project.compute_facets()
     pc = response.facets[party_code_facet]
     self.assertEqual(pc.name, 'Party Code')
     self.assertEqual(pc.choices['D'].count, 1179)
     self.assertEqual(pc.choices['R'].count, 11)
     self.assertEqual(pc.blank_choice.count, 46)
     # {9}
     party_code_facet.include('R')
     response = self.project.compute_facets()
     e = response.facets[ethnicity_facet]
     self.assertEqual(e.choices['B'].count, 11)
     # {10}
     party_code_facet.reset()
     ethnicity_facet.reset()
     response = self.project.get_rows()
     self.assertEqual(response.filtered, 6958)
     # {11}
     office_title_facet = facet.TextFacet('Office Title')
     self.project.engine.add_facet(office_title_facet)
     response = self.project.compute_facets()
     self.assertEqual(len(response.facets[2].choices), 76)
     # {12} - XXX not sure how to interpret bins & baseBins yet
     office_level_facet = facet.NumericFacet('Office Level')
     self.project.engine.add_facet(office_level_facet)
     # {13}
     office_level_facet.From = 300  # from reserved word
     office_level_facet.to = 320
     response = self.project.get_rows()
     self.assertEqual(response.filtered, 1907)
     response = self.project.compute_facets()
     ot = response.facets[office_title_facet]
     self.assertEqual(len(ot.choices), 21)
     self.assertEqual(ot.choices['Chief of Police'].count, 2)
     self.assertEqual(ot.choices['Chief of Police          '].count, 211)
     # {14}
     self.project.engine.remove_all()
     response = self.project.get_rows()
     self.assertEqual(response.filtered, 6958)
     # {15}
     phone_facet = facet.TextFacet('Phone', expression='value[0, 3]')
     self.project.engine.add_facet(phone_facet)
     response = self.project.compute_facets()
     p = response.facets[phone_facet]
     self.assertEqual(p.expression, 'value[0, 3]')
     self.assertEqual(p.choices['318'].count, 2331)
     # {16}
     commissioned_date_facet = facet.NumericFacet(
         'Commissioned Date', expression='value.toDate().datePart("year")')
     self.project.engine.add_facet(commissioned_date_facet)
     response = self.project.compute_facets()
     cd = response.facets[commissioned_date_facet]
     self.assertEqual(cd.error_count, 959)
     self.assertEqual(cd.numeric_count, 5999)
     # {17}
     office_description_facet = facet.NumericFacet(
         'Office Description',
         expression=r'value.match(/\D*(\d+)\w\w Rep.*/)[0].toNumber()')
     self.project.engine.add_facet(office_description_facet)
     response = self.project.compute_facets()
     od = response.facets[office_description_facet]
     self.assertEqual(od.min, 0)
     self.assertEqual(od.max, 110)
     self.assertEqual(od.numeric_count, 548)