def setUp(self): # noqa super(BaseProtectTest, self).setUp() contributor_id = self.global_userids['contributor'] self.waypoint = Waypoint(waypoint_type='summit', elevation=2203) self.locale = WaypointLocale(lang='en', title='Mont Granier', description='...') self.waypoint.locales.append(self.locale) self.waypoint.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') self.session.add(self.waypoint) self.session.flush() DocumentRest.create_new_version(self.waypoint, contributor_id) self.waypoint2 = Waypoint(protected=True, waypoint_type='summit', elevation=2203) self.locale2 = WaypointLocale(lang='en', title='Mont Granier2', description='...') self.waypoint2.locales.append(self.locale2) self.waypoint2.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') self.session.add(self.waypoint2) self.session.flush() DocumentRest.create_new_version(self.waypoint2, contributor_id) self.session.flush()
def setUp(self): # noqa super(BaseProtectTest, self).setUp() self.waypoint = Waypoint(waypoint_type='summit', elevation=2203) self.locale = WaypointLocale(lang='en', title='Mont Granier', description='...') self.waypoint.locales.append(self.locale) self.waypoint.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') self.session.add(self.waypoint) self.waypoint2 = Waypoint(protected=True, waypoint_type='summit', elevation=2203) self.locale2 = WaypointLocale(lang='en', title='Mont Granier2', description='...') self.waypoint2.locales.append(self.locale2) self.waypoint2.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') self.session.add(self.waypoint2) self.session.flush()
def test_geometry_update_optimization_4326(self): lat = 46.0 geom1 = 'SRID=4326;POINT(' + str(lat) + ' 6.0)' waypoint_db = Waypoint( document_id=1, waypoint_type='summit', elevation=2203, geometry=DocumentGeometry( document_id=1, geom=geom1 ) ) waypoint_in = Waypoint( document_id=1, waypoint_type='summit', elevation=1234, geometry=DocumentGeometry( geom='SRID=4326;POINT(' + str(lat + 10**(-8)) + ' 6.0)') ) waypoint_db.update(waypoint_in) self.assertEqual(waypoint_db.geometry.geom, geom1) waypoint_in = Waypoint( document_id=1, waypoint_type='summit', elevation=1234, geometry=DocumentGeometry( geom='SRID=4326;POINT(' + str(lat + 10**(-7)) + ' 6.0)') ) waypoint_db.update(waypoint_in) self.assertNotEqual(waypoint_db.geometry.geom, geom1)
def _add_test_data(self): self.waypoint = Waypoint(waypoint_type='summit', elevation=2203) self.locale_en = WaypointLocale(lang='en', title='Mont Granier', description='...', access='yep') self.waypoint.locales.append(self.locale_en) self.waypoint.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') self.session.add(self.waypoint) self.waypoint_with_topic = Waypoint(waypoint_type='summit', elevation=2203) document_topic = DocumentTopic(topic_id=1) self.locale_en_with_topic = WaypointLocale( lang='en', title='Mont Granier', description='...', access='yep', document_topic=document_topic) self.waypoint_with_topic.locales.append(self.locale_en_with_topic) self.waypoint_with_topic.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') self.session.add(self.waypoint_with_topic) self.image = Image(filename='image.jpg', activities=['paragliding'], height=1500, image_type='collaborative') self.image_locale_en = DocumentLocale(lang='en', title='', description='') self.image.locales.append(self.image_locale_en) self.image.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') self.session.add(self.image) self.outing = Outing(activities=['skitouring'], date_start=datetime.date(2016, 1, 1), date_end=datetime.date(2016, 1, 1), locales=[ OutingLocale( lang='en', title='Mont Granier / skitouring') ]) self.session.add(self.outing) self.session.flush() for user_id in (self.global_userids['contributor'], self.global_userids['contributor2']): self.session.add( Association(parent_document_id=user_id, parent_document_type=USERPROFILE_TYPE, child_document_id=self.outing.document_id, child_document_type=OUTING_TYPE)) self.session.flush()
def setUp(self): BaseTestRest.setUp(self) waypoint = Waypoint( waypoint_type='summit', elevation=2000, geometry=DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') ) outing = Outing( activities=['skitouring'], date_start=date(2016, 1, 1), date_end=date(2016, 1, 1), geometry=DocumentGeometry(geom='SRID=3857;POINT(0 0)') ) article = Article( categories=['site_info'], activities=['hiking'], article_type='collab' ) for lang in default_langs: locale = OutingLocale(lang=lang, title=f'Title in {lang}') outing.locales.append(locale) locale = DocumentLocale(lang=lang, title=f'Title in {lang}') article.locales.append(locale) locale = WaypointLocale(lang=lang, title=f'Title in {lang}') waypoint.locales.append(locale) self.session.add(article) self.session.add(outing) self.session.add(waypoint) self.session.flush() fill_index(self.session) # make sure the search index is built force_search_index() contributor_id = self.global_userids['contributor'] for lang in default_langs: self.session.add(DocumentChange( time=datetime(2016, 1, 1, 12, 0, 0), user_id=contributor_id, change_type='created', document_id=waypoint.document_id, document_type=WAYPOINT_TYPE, user_ids=[contributor_id], langs=[lang] )) self.session.flush()
def test_get_maps(self): map1 = TopoMap( locales=[ DocumentLocale(lang='en', title='Passo del Maloja'), DocumentLocale(lang='fr', title='Passo del Maloja') ], geometry=DocumentGeometry( geom_detail= 'SRID=3857;POLYGON((1060345.67641127 5869598.161661,1161884.8271513 5866294.47946546,1159243.3608776 5796747.98963817,1058506.68785187 5800000.03655724,1060345.67641127 5869598.161661))' ) # noqa ) map2 = TopoMap( locales=[DocumentLocale(lang='fr', title='Monte Disgrazia')], geometry=DocumentGeometry( geom_detail= 'SRID=3857;POLYGON((1059422.5474971 5834730.45170096,1110000.12573506 5833238.36363707,1108884.30979916 5798519.62445622,1058506.68785187 5800000.03655724,1059422.5474971 5834730.45170096))' ) # noqa ) map3 = TopoMap( locales=[DocumentLocale(lang='fr', title='Sciora')], geometry=DocumentGeometry( geom_detail= 'SRID=3857;POLYGON((1059422.5474971 5834730.45170096,1084713.47958582 5834021.11961652,1084204.54539729 5816641.60293193,1058963.71520182 5817348.14989301,1059422.5474971 5834730.45170096))' ) # noqa ) map4 = TopoMap( locales=[DocumentLocale(lang='fr', title='...')], geometry=DocumentGeometry( geom_detail= 'SRID=3857;POLYGON((753678.422528324 6084684.82967302,857818.351438369 6084952.58494753,857577.289072432 6013614.93425228,754282.556732048 6013351.52692378,753678.422528324 6084684.82967302))' ) # noqa ) waypoint = Waypoint( waypoint_type='summit', geometry=DocumentGeometry( geom='SRID=3857;POINT(1069913.22199537 5830556.39234855)' ) # noqa ) self.session.add_all([waypoint, map1, map2, map3, map4]) self.session.flush() maps = get_maps(waypoint, 'en') self.assertEqual( set([m.document_id for m in maps]), set([map1.document_id, map2.document_id, map3.document_id])) for m in maps: # check that the "best" locale is set self.assertEqual(len(m.locales), 1)
def _add_test_data(self): self.image = Image( activities=['paragliding'], height=1500, image_type='collaborative') self.locale_en = DocumentLocale( lang='en', title='Mont Blanc from the air', description='...') self.locale_fr = DocumentLocale( lang='fr', title='Mont Blanc du ciel', description='...') self.image.locales.append(self.locale_en) self.image.locales.append(self.locale_fr) self.image.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)') self.session.add(self.image) self.session.flush() user_id = self.global_userids['contributor'] DocumentRest.create_new_version(self.image, user_id) self.image2 = Image( activities=['paragliding'], height=1500) self.session.add(self.image2) self.image3 = Image( activities=['paragliding'], height=1500) self.session.add(self.image3) self.image4 = Image( activities=['paragliding'], height=1500, image_type='personal') self.image4.locales.append(DocumentLocale( lang='en', title='Mont Blanc from the air', description='...')) self.image4.locales.append(DocumentLocale( lang='fr', title='Mont Blanc du ciel', description='...')) self.session.add(self.image4) self.session.flush() DocumentRest.create_new_version(self.image4, user_id) self.waypoint = Waypoint( waypoint_type='summit', elevation=4, geometry=DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)')) self.waypoint.locales.append(WaypointLocale( lang='en', title='Mont Granier (en)', description='...', access='yep')) self.session.add(self.waypoint) self.session.flush()
def update_default_geometry( old_main_waypoint_id, linked_waypoints, route, route_in, user_id): geometry = route.geometry geometry_in = route_in.geometry if geometry_in is not None and geometry_in.geom is not None: # default geom is manually set in the request return elif geometry_in is not None and geometry_in.geom_detail is not None: # update the default geom with the new track geometry.geom = get_mid_point(geometry.geom_detail) return elif geometry is not None and geometry.geom_detail is not None: # default geom is already set and no new track is provided return elif geometry is None or geometry.geom_detail is None: # only update if no own track if route.main_waypoint_id and \ main_waypoint_has_changed(route, old_main_waypoint_id): main_wp_point = _get_default_geom_from_main_wp(route) if main_wp_point is not None: if geometry is not None: route.geometry.geom = main_wp_point else: route.geometry = DocumentGeometry(geom=main_wp_point) return set_default_geom_from_associations( route, linked_waypoints, update_always=True)
def test_simplify(self): geom = wkbelement_from_geojson( json.loads( '{"type": "LineString", "coordinates": ' + '[[635900, 5723600], [635902, 5723600], [635905, 5723600]]}'), 3857) route = Route(activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom)) self.session.add(route) self.session.flush() # check that the line was simplified on insertion simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) # check that the line was simplified after an update route.geometry.geom_detail = wkbelement_from_geojson( json.loads( '{"type": "LineString", "coordinates": ' + '[[635901, 5723600], [635902, 5723600], [635905, 5723600]]}'), 3857) self.session.flush() simplified_geom = route.geometry self.session.refresh(simplified_geom) geojson = json.loads( geojson_from_wkbelement(simplified_geom.geom_detail)) self.assertEqual(len(geojson['coordinates']), 2) self.assertCoodinateEquals([635901, 5723600], geojson['coordinates'][0])
def _add_test_data(self): self.map1 = TopoMap(editor='IGN', scale='25000', code='3431OT') self.locale_en = DocumentLocale(lang='en', title='Lac d\'Annecy') self.locale_fr = DocumentLocale(lang='fr', title='Lac d\'Annecy') self.map1.locales.append(self.locale_en) self.map1.locales.append(self.locale_fr) self.map1.geometry = DocumentGeometry( geom_detail='SRID=3857;POINT(635956 5723604)') self.session.add(self.map1) self.session.flush() user_id = self.global_userids['contributor'] DocumentRest.create_new_version(self.map1, user_id) self.map2 = TopoMap(editor='IGN', scale='25000', code='3432OT') self.session.add(self.map2) self.map3 = TopoMap(editor='IGN', scale='25000', code='3433OT') self.session.add(self.map3) self.map4 = TopoMap(editor='IGN', scale='25000', code='3434OT') self.map4.locales.append( DocumentLocale(lang='en', title='Lac d\'Annecy')) self.map4.locales.append( DocumentLocale(lang='fr', title='Lac d\'Annecy')) self.session.add(self.map4) self.session.flush()
def test_process_task(self): """Tests that the syncer listens to messages and sends changes to ElasticSearch. """ waypoint = Waypoint( document_id=51251, waypoint_type='summit', elevation=2000, geometry=DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)'), locales=[ WaypointLocale( lang='fr', title='Mont Granier', description='...', summary='Le Mont [b]Granier[/b]') ]) self.session.add(waypoint) self.session.flush() user_id = self.global_userids['contributor'] DocumentRest.create_new_version(waypoint, user_id) self.session.flush() t = transaction.begin() notify_es_syncer(self.queue_config) t.commit() syncer = SyncWorker( self.queue_config.connection, self.queue_config.queue, session=self.session) next(syncer.consume(limit=1)) index = elasticsearch_config['index'] doc = SearchWaypoint.get(id=51251, index=index) self.assertEqual(doc['title_fr'], 'Mont Granier') self.assertEqual(doc['summary_fr'], 'Le Mont Granier ') self.assertEqual(doc['doc_type'], 'w')
def setUp(self): # noqa super(TestSearchRest, self).setUp() self._prefix = '/search' self.waypoint1 = Waypoint( document_id=534681, waypoint_type='summit', elevation=2000, geometry=DocumentGeometry(geom='SRID=3857;POINT(635956 5723604)'), locales=[ WaypointLocale(lang='fr', title='Dent de Crolles', description='...', summary='La Dent de Crolles'), WaypointLocale(lang='en', title='Dent de Crolles', description='...', summary='The Dent de Crolles') ]) self.session.add(self.waypoint1) self.session.add( Waypoint(document_id=534682, waypoint_type='summit', elevation=4985, geometry=DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)'), locales=[ WaypointLocale(lang='en', title='Mont Blanc', description='...', summary='The heighest point in Europe') ])) self.session.add( Route(document_id=534683, activities=['skitouring'], elevation_max=1500, elevation_min=700, locales=[ RouteLocale(lang='fr', title='Mont Blanc du ciel', description='...', summary='Ski') ])) self.session.flush() fill_index(self.session) # make sure the search index is built force_search_index()
def _add_test_data(self): self.map1 = TopoMap(editor='IGN', scale='25000', code='3431OT') self.locale_en = DocumentLocale(lang='en', title='Lac d\'Annecy') self.locale_fr = DocumentLocale(lang='fr', title='Lac d\'Annecy') self.map1.locales.append(self.locale_en) self.map1.locales.append(self.locale_fr) self.map1.geometry = DocumentGeometry( geom_detail='SRID=3857;POLYGON((611774 5706934,611774 5744215,' '642834 5744215,642834 5706934,611774 5706934))') self.session.add(self.map1) self.session.flush() user_id = self.global_userids['contributor'] DocumentRest.create_new_version(self.map1, user_id) self.map2 = TopoMap(editor='IGN', scale='25000', code='3432OT') self.session.add(self.map2) self.map3 = TopoMap(editor='IGN', scale='25000', code='3433OT') self.session.add(self.map3) self.map4 = TopoMap(editor='IGN', scale='25000', code='3434OT') self.map4.locales.append( DocumentLocale(lang='en', title='Lac d\'Annecy')) self.map4.locales.append( DocumentLocale(lang='fr', title='Lac d\'Annecy')) self.session.add(self.map4) self.session.flush() self.waypoint1 = Waypoint( waypoint_type='summit', geometry=DocumentGeometry( geom='SRID=3857;POINT(677461.381691516 5740879.44638645)')) self.waypoint2 = Waypoint( waypoint_type='summit', geometry=DocumentGeometry( geom='SRID=3857;POINT(693666.031687976 5741108.7574713)')) route_geom = 'SRID=3857;LINESTRING(668518 5728802, 668528 5728812)' self.route = Route(activities=['skitouring'], geometry=DocumentGeometry(geom_detail=route_geom)) self.session.add_all([self.waypoint1, self.waypoint2, self.route]) self.session.add( TopoMapAssociation(document=self.waypoint2, topo_map=self.map1)) self.session.flush()
def _add_test_data(self): self.article1 = Article(categories=['site_info'], activities=['hiking'], article_type='collab') self.locale_en = DocumentLocale(lang='en', title='Lac d\'Annecy') self.locale_fr = DocumentLocale(lang='fr', title='Lac d\'Annecy') self.article1.locales.append(self.locale_en) self.article1.locales.append(self.locale_fr) self.session.add(self.article1) self.session.flush() user_id = self.global_userids['contributor'] DocumentRest.create_new_version(self.article1, user_id) self.article1_version = self.session.query(DocumentVersion). \ filter(DocumentVersion.document_id == self.article1.document_id). \ filter(DocumentVersion.lang == 'en').first() self.article2 = Article(categories=['site_info'], activities=['hiking'], article_type='collab') self.session.add(self.article2) self.article3 = Article(categories=['site_info'], activities=['hiking'], article_type='collab') self.session.add(self.article3) self.article4 = Article(categories=['site_info'], activities=['hiking'], article_type='personal') self.article4.locales.append( DocumentLocale(lang='en', title='Lac d\'Annecy')) self.article4.locales.append( DocumentLocale(lang='fr', title='Lac d\'Annecy')) self.session.add(self.article4) self.session.flush() DocumentRest.create_new_version(self.article4, user_id) self.article4_version = self.session.query(DocumentVersion). \ filter(DocumentVersion.document_id == self.article4.document_id). \ filter(DocumentVersion.lang == 'en').first() self.waypoint1 = Waypoint(waypoint_type='summit', elevation=2203) self.session.add(self.waypoint1) self.waypoint2 = Waypoint( waypoint_type='climbing_outdoor', elevation=2, rock_types=[], geometry=DocumentGeometry(geom='SRID=3857;POINT(635956 5723604)')) self.session.add(self.waypoint2) self.session.flush() self.session.add( Association.create(parent_document=self.article1, child_document=self.article4)) self.session.add( Association.create(parent_document=self.article3, child_document=self.article1)) self.session.flush()
def test_update(self): waypoint_db = Waypoint(document_id=1, waypoint_type='summit', elevation=2203, version=123, locales=[ WaypointLocale(id=2, culture='en', title='A', description='abc', version=345), WaypointLocale(id=3, culture='fr', title='B', description='bcd', version=678), ], geometry=DocumentGeometry( id=4, geom='SRID=3857;POINT(1 2)')) waypoint_in = Waypoint( document_id=1, waypoint_type='summit', elevation=1234, version=123, locales=[ WaypointLocale(id=2, culture='en', title='C', description='abc', version=345), WaypointLocale(culture='es', title='D', description='efg'), ], geometry=DocumentGeometry(geom='SRID=3857;POINT(3 4)')) waypoint_db.update(waypoint_in) self.assertEqual(waypoint_db.elevation, waypoint_in.elevation) self.assertEqual(len(waypoint_db.locales), 3) locale_en = waypoint_db.get_locale('en') locale_fr = waypoint_db.get_locale('fr') locale_es = waypoint_db.get_locale('es') self.assertEqual(locale_en.title, 'C') self.assertEqual(locale_fr.title, 'B') self.assertEqual(locale_es.title, 'D') self.assertEqual(waypoint_db.geometry.geom, 'SRID=3857;POINT(3 4)')
def _add_test_data(self): self.area1 = Area(area_type='range') self.locale_en = DocumentLocale(lang='en', title='Chartreuse') self.locale_fr = DocumentLocale(lang='fr', title='Chartreuse') self.area1.locales.append(self.locale_en) self.area1.locales.append(self.locale_fr) self.area1.geometry = DocumentGeometry( geom_detail= 'SRID=3857;POLYGON((668518.249382151 5728802.39591739,668518.249382151 5745465.66808356,689156.247019149 5745465.66808356,689156.247019149 5728802.39591739,668518.249382151 5728802.39591739))' # noqa ) self.session.add(self.area1) self.session.flush() user_id = self.global_userids['contributor'] DocumentRest.create_new_version(self.area1, user_id) self.area2 = Area(area_type='range') self.session.add(self.area2) self.area3 = Area(area_type='range') self.session.add(self.area3) self.area4 = Area(area_type='admin_limits') self.area4.locales.append(DocumentLocale(lang='en', title='Isère')) self.area4.locales.append(DocumentLocale(lang='fr', title='Isère')) self.session.add(self.area4) self.waypoint1 = Waypoint( waypoint_type='summit', geometry=DocumentGeometry( geom='SRID=3857;POINT(677461.381691516 5740879.44638645)')) self.waypoint2 = Waypoint( waypoint_type='summit', geometry=DocumentGeometry( geom='SRID=3857;POINT(693666.031687976 5741108.7574713)')) route_geom = 'SRID=3857;LINESTRING(668518 5728802, 668528 5728812)' self.route = Route(activities=['skitouring'], geometry=DocumentGeometry(geom_detail=route_geom)) self.session.add_all([self.waypoint1, self.waypoint2, self.route]) self.session.add( AreaAssociation(document=self.waypoint2, area=self.area1)) self.session.flush()
def test_set_available_langs(self): waypoint = self._get_waypoint() waypoint.geometry = DocumentGeometry( geom='SRID=3857;POINT(635956.075332665 5723604.677994)') self.session.add(waypoint) self.session.flush() set_available_langs([waypoint]) self.assertEqual(set(waypoint.available_langs), set(['en', 'fr']))
def _add_global_test_data(session): global_passwords['contributor'] = 'super pass' global_passwords['contributor2'] = 'better pass' global_passwords['moderator'] = 'even better pass' contributor_profile = UserProfile( categories=['amateur'], locales=[ DocumentLocale(title='', description='Me', lang='en'), DocumentLocale(title='', description='Moi', lang='fr')], geometry=DocumentGeometry(geom='SRID=3857;POINT(635956 5723604)')) contributor = User( name='Contributor', username='******', email='*****@*****.**', forum_username='******', password='******', email_validated=True, profile=contributor_profile) contributor2_profile = UserProfile( categories=['amateur'], locales=[DocumentLocale(title='...', lang='en')]) contributor2 = User( name='Contributor 2', username='******', email='*****@*****.**', forum_username='******', password='******', email_validated=True, profile=contributor2_profile) moderator_profile = UserProfile( categories=['mountain_guide'], locales=[DocumentLocale(title='', lang='en')]) moderator = User( name='Moderator', username='******', email='*****@*****.**', forum_username='******', moderator=True, password='******', email_validated=True, profile=moderator_profile) users = [moderator, contributor, contributor2] session.add_all(users) session.flush() key = settings['jwtauth.master_secret'] algorithm = 'HS256' now = datetime.datetime.utcnow() exp = now + datetime.timedelta(weeks=10) for user in [moderator, contributor, contributor2]: claims = create_claims(user, exp) token = jwt.encode(claims, key=key, algorithm=algorithm). \ decode('utf-8') add_or_retrieve_token(token, exp, user.id) global_userids[user.username] = user.id global_tokens[user.username] = token
def set_default_geom_from_associations(doc, linked_docs, update_always=False): if update_always or doc.geometry is None or doc.geometry.geom is None: default_geom = _get_default_geom(linked_docs) if default_geom is not None: if doc.geometry is not None: doc.geometry.geom = default_geom else: doc.geometry = DocumentGeometry(geom=default_geom) else: log.warning( 'Creating or updating document {} without default geometry'. format(doc.document_id))
def test_get_documents(self): """Tests that documents keep the order of the list of ids. """ self.session.add( Waypoint(document_id=71171, waypoint_type='summit', elevation=2000, geometry=DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)'), locales=[ WaypointLocale(lang='fr', title='Mont Granier', description='...', summary='Le Mont Granier') ])) self.session.add( Waypoint(document_id=71172, waypoint_type='summit', elevation=4985, geometry=DocumentGeometry( geom='SRID=3857;POINT(635956 5723604)'), locales=[ WaypointLocale(lang='en', title='Mont Blanc', description='...', summary='The heighest point in Europe') ])) self.session.flush() docs = search.get_documents([71171, 71172], Waypoint, DocumentLocale, None) self.assertEqual(71171, docs[0].document_id) self.assertEqual(71172, docs[1].document_id) docs = search.get_documents([71172, 71171], Waypoint, DocumentLocale, None) self.assertEqual(71172, docs[0].document_id) self.assertEqual(71171, docs[1].document_id)
def _get_waypoint(self): return Waypoint( waypoint_type='summit', elevation=2203, locales=[ WaypointLocale( lang='en', title='A', description='abc', access='y'), WaypointLocale( lang='fr', title='B', description='bcd', access='y') ], geometry=DocumentGeometry( geom='SRID=3857;POINT(635956.075332665 5723604.677994)') )
def test_geometry_update_optimization_3857(self): geom1 = 'SRID=3857;POINT(445278.0 1.0)' waypoint_db = Waypoint( document_id=1, waypoint_type='summit', elevation=2203, geometry=DocumentGeometry( document_id=1, geom=geom1 ) ) waypoint_in = Waypoint( document_id=1, waypoint_type='summit', elevation=1234, geometry=DocumentGeometry( geom='SRID=3857;POINT(445278.5 1.0)') ) waypoint_db.update(waypoint_in) self.assertEqual(waypoint_db.geometry.geom, geom1) waypoint_in = Waypoint( document_id=1, waypoint_type='summit', elevation=14, geometry=DocumentGeometry( geom='SRID=3857;POINT(445279.0 1.0)') ) waypoint_db.update(waypoint_in) self.assertNotEqual(waypoint_db.geometry.geom, geom1)
def test_geometry_update_skip_optimization(self): geom1 = 'SRID=3857;POINT(445278.0 334111.0)' waypoint_db = Waypoint( document_id=1, waypoint_type='summit', elevation=2203, geometry=DocumentGeometry( document_id=1, geom=geom1 ) ) waypoint_in = Waypoint( document_id=1, waypoint_type='summit', elevation=1234, geometry=None ) waypoint_db.update(waypoint_in) self.assertEqual(waypoint_db.geometry.geom, geom1)
def test_geometry_update(self): """ Check that geometries are only compared in 2D when updating a document. """ geom1 = wkbelement_from_geojson( json.loads('{"type": "LineString", "coordinates": ' + '[[635956, 5723604, 1200], [635966, 5723644, 1210]]}'), 3857) route_db = Route(document_id=1, activities=['hiking'], geometry=DocumentGeometry(document_id=1, geom=None, geom_detail=geom1)) geom2 = wkbelement_from_geojson( json.loads('{"type": "LineString", "coordinates": ' + '[[635956, 5723604, 9999], [635966, 5723644, 9999]]}'), 3857) route_in = Route(document_id=1, activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom2)) route_db.update(route_in) self.assertIs(route_db.geometry.geom_detail, geom1) geom3 = wkbelement_from_geojson( json.loads('{"type": "LineString", "coordinates": ' + '[[635956, 5723608, 1200], [635966, 5723644, 1210]]}'), 3857) route_in = Route(document_id=1, activities=['hiking'], geometry=DocumentGeometry(geom=None, geom_detail=geom3)) route_db.update(route_in) self.assertIsNot(route_db.geometry.geom_detail, geom1) self.assertIs(route_db.geometry.geom_detail, geom3)
def test_create_search_documents(self): search_documents = [] batch_mock = self._create_mock_match(search_documents)(None, 1000) self.route1.geometry = DocumentGeometry() self.route1.geometry.lon_lat = \ '{"type": "Point", "coordinates": [6, 46]}' create_search_documents('r', [self.route1], batch_mock) doc = search_documents[0] self.assertEqual(doc['_op_type'], 'index') self.assertEqual(doc['_id'], self.route1.document_id) self.assertEqual(doc['title_en'], 'Mont Blanc : Face N') # self.assertEqual(doc['description_en'], '...') self.assertEqual(doc['geom'], [6, 46])
def set_default_geometry(route, user_id): """When creating a new route, set the default geometry to the middle point of a given track, if not to the geometry of the associated main waypoint. """ if route.geometry is not None and route.geometry.geom is not None: # default geometry already set return if route.geometry is not None and route.geometry.geom_detail is not None: # track is given, obtain a default point from the track route.geometry.geom = get_mid_point(route.geometry.geom_detail) elif route.main_waypoint_id: # get default point from main waypoint main_wp_point = DBSession.query(DocumentGeometry.geom).filter( DocumentGeometry.document_id == route.main_waypoint_id).scalar() if main_wp_point is not None: route.geometry = DocumentGeometry(geom=main_wp_point)
def set_default_geometry(linked_routes, outing, user_id): """When creating a new outing, set the default geometry to the middle point of a given track, if not to the geometry of an associated route. """ if outing.geometry is not None and outing.geometry.geom is not None: # default geometry already set return if outing.geometry is not None and outing.geometry.geom_detail is not None: # track is given, obtain a default point from the track outing.geometry.geom = get_mid_point(outing.geometry.geom_detail) elif linked_routes: route_id = linked_routes[0]['document_id'] # get default point from route route_point = DBSession.query(DocumentGeometry.geom).filter( DocumentGeometry.document_id == route_id).scalar() if route_point is not None: outing.geometry = DocumentGeometry(geom=route_point)
def test_get_documents_merged_documents(self): """Tests that merged documents are ignored. """ waypoint = Waypoint( redirects_to=self.waypoint1.document_id, waypoint_type='summit', elevation=4985, geometry=DocumentGeometry(geom='SRID=3857;POINT(635956 5723604)'), locales=[ WaypointLocale(lang='en', title='Mont Blanc', description='...', summary='The heighest point in Europe') ]) self.session.add(waypoint) documents = get_documents([waypoint.document_id], Waypoint, DocumentLocale, None) self.assertEquals(0, len(documents))
def test_save_and_load(self): fake_doc = Document() self.session.add(fake_doc) self.session.flush() geom = wkbelement_from_geojson( '{"type": "Point", "coordinates": [1.0, 2.0]}', 3857) geometry = DocumentGeometry(document_id=fake_doc.document_id, geom=geom) self.session.add(geometry) self.session.flush() self.session.expire(geometry) geom_loaded = geometry.geom geom_str = geojson_from_wkbelement(geom_loaded) geom_geojson = json.loads(geom_str) self.assertCoodinateEquals([1.0, 2.0], geom_geojson['coordinates'])
def test_inheritance(self): waypoint = Waypoint( waypoint_type='summit', elevation=2203, locales=[ WaypointLocale( lang='en', title='A', description='abc') ], geometry=DocumentGeometry( geom=from_shape(Point(1, 1), srid=3857)) ) self.session.add(waypoint) self.session.flush() self.assertIsNotNone(waypoint.document_id) self.assertEqual('w', waypoint.type) locale = waypoint.locales[0] self.assertIsNotNone(locale.id) self.assertEqual('w', locale.type)