def render_page(content1, content2): version1 = content1['version'] doc_v1 = content1['document'] version2 = content2['version'] doc_v2 = content2['document'] field_diffs = diff_documents(doc_v1, doc_v2) self.template_input.update({ 'module': self._API_ROUTE, 'lang': lang, 'title': doc_v1['locales'][0]['title'], 'document_id': id, 'v1_id': v1, 'v2_id': v2, 'diffs': field_diffs, 'version1': version1, 'version2': version2, 'geometry1': doc_v1['geometry']['geom'] if 'geometry' in doc_v1 and doc_v1['geometry'] else None, 'geometry2': doc_v2['geometry']['geom'] if 'geometry' in doc_v2 and doc_v2['geometry'] else None, 'previous_version_id': content1['previous_version_id'], 'next_version_id': content2['next_version_id'] }) return render( 'c2corg_ui:templates/document/diff.html', self.template_input, self.request)
def _diff(self): id = self._validate_int('id') culture = self._validate_culture() v1 = self._validate_int('v1') v2 = self._validate_int('v2') url = '%s/%s/%d/%s/%d' % ( self.settings['api_url'], self._API_ROUTE, id, culture, v1) resp_v1, content_v1 = self._call_api(url) url = '%s/%s/%d/%s/%d' % ( self.settings['api_url'], self._API_ROUTE, id, culture, v2) resp_v2, content_v2 = self._call_api(url) # TODO: better error handling if resp_v1['status'] == '200' and resp_v2['status'] == '200': version1 = content_v1['version'] doc_v1 = content_v1['document'] version2 = content_v2['version'] doc_v2 = content_v2['document'] field_diffs = diff_documents(doc_v1, doc_v2) self.template_input.update({ 'module': self._API_ROUTE, 'culture': culture, 'title': doc_v1['locales'][0]['title'], 'document_id': id, 'v1_id': v1, 'v2_id': v2, 'diffs': field_diffs, 'version1': version1, 'version2': version2, 'geometry1': doc_v1['geometry']['geom'] if doc_v1['geometry'] else None, 'geometry2': doc_v2['geometry']['geom'] if doc_v2['geometry'] else None, 'previous_version_id': content_v1['previous_version_id'], 'next_version_id': content_v2['next_version_id'] }) return self.template_input raise HTTPNotFound()
def render_page(content1, content2): version1 = content1['version'] doc_v1 = content1['document'] version2 = content2['version'] doc_v2 = content2['document'] field_diffs = diff_documents(doc_v1, doc_v2) self.template_input.update({ 'module': self._API_ROUTE, 'lang': lang, 'title': doc_v1['locales'][0]['title'], 'document_id': id, 'v1_id': v1, 'v2_id': v2, 'diffs': field_diffs, 'version1': version1, 'version2': version2, 'geometry1': doc_v1['geometry']['geom'] if 'geometry' in doc_v1 and doc_v1['geometry'] else None, 'geometry2': doc_v2['geometry']['geom'] if 'geometry' in doc_v2 and doc_v2['geometry'] else None, 'previous_version_id': content1['previous_version_id'], 'next_version_id': content2['next_version_id'] }) return render('c2corg_ui:templates/document/diff.html', self.template_input, self.request)
def test_diff_documents(self): doc1 = { 'version': 1, 'document_id': 642184, 'available_langs': ['fr'], 'parking_fee': None, 'lift_access': None, 'elevation': 400, 'activities': ['skitouring', 'hiking'], 'elevation_min': None, 'geometry': { 'version': 1, 'geom': '{"type": "Point", ' '"coordinates": [647832.459591738, 5735074.612643753]}' }, 'maps_info': None, 'locales': [ { 'version': 1, 'lang': 'fr', 'description': 'The first line.\nThe second line.', 'title': 'Gerbaz', 'summary': None, 'access': None, 'access_period': None } ], 'snow_clearance_rating': None, 'waypoint_type': 'access' } doc2 = { 'version': 2, 'document_id': 642184, 'available_langs': ['fr', 'en'], 'parking_fee': 'seasonal', 'lift_access': True, 'elevation': 400, 'activities': ['skitouring', 'hiking'], 'elevation_min': None, 'geometry': { 'version': 2, 'geom': '{"type": "Point", ' '"coordinates": [647835, 5735080]}' }, 'maps_info': None, 'locales': [ { 'version': 1, 'lang': 'fr', 'description': 'The first line.\n\nThe third line.', 'title': 'Gerbaz', 'summary': None, 'access': None, 'access_period': None } ], 'snow_clearance_rating': 'closed_in_winter', 'waypoint_type': 'access' } diff_fields = diff_documents(doc1, doc2) self.assertEqual(len(diff_fields), 5) self.assertContainsField(diff_fields, 'lift_access') self.assertContainsField(diff_fields, 'parking_fee') self.assertContainsField(diff_fields, 'snow_clearance_rating') self.assertContainsField(diff_fields, 'description') self.assertContainsField(diff_fields, 'geometry')
def test_diff_documents(self): doc1 = { 'version': 1, 'document_id': 642184, 'available_langs': ['fr'], 'parking_fee': None, 'lift_access': None, 'elevation': 400, 'activities': ['skitouring', 'hiking'], 'elevation_min': None, 'geometry': { 'version': 1, 'geom': '{"type": "Point", ' '"coordinates": [647832.459591738, 5735074.612643753]}' }, 'maps_info': None, 'locales': [{ 'version': 1, 'lang': 'fr', 'description': 'The first line.\nThe second line.', 'title': 'Gerbaz', 'summary': None, 'access': None, 'access_period': None }], 'snow_clearance_rating': None, 'waypoint_type': 'access' } doc2 = { 'version': 2, 'document_id': 642184, 'available_langs': ['fr', 'en'], 'parking_fee': 'seasonal', 'lift_access': True, 'elevation': 400, 'activities': ['skitouring', 'hiking'], 'elevation_min': None, 'geometry': { 'version': 2, 'geom': '{"type": "Point", ' '"coordinates": [647835, 5735080]}' }, 'maps_info': None, 'locales': [{ 'version': 1, 'lang': 'fr', 'description': 'The first line.\n\nThe third line.', 'title': 'Gerbaz', 'summary': None, 'access': None, 'access_period': None }], 'snow_clearance_rating': 'closed_in_winter', 'waypoint_type': 'access' } diff_fields = diff_documents(doc1, doc2) self.assertEqual(len(diff_fields), 5) self.assertContainsField(diff_fields, 'lift_access') self.assertContainsField(diff_fields, 'parking_fee') self.assertContainsField(diff_fields, 'snow_clearance_rating') self.assertContainsField(diff_fields, 'description') self.assertContainsField(diff_fields, 'geometry')