Exemplo n.º 1
0
    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()
Exemplo n.º 3
0
    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)
Exemplo n.º 4
0
    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()
Exemplo n.º 5
0
    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()
Exemplo n.º 6
0
    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)
Exemplo n.º 7
0
    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()
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
    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])
Exemplo n.º 10
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()
Exemplo n.º 11
0
    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')
Exemplo n.º 12
0
    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()
Exemplo n.º 13
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;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()
Exemplo n.º 14
0
    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()
Exemplo n.º 15
0
    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)')
Exemplo n.º 16
0
    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()
Exemplo n.º 17
0
    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']))
Exemplo n.º 18
0
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
Exemplo n.º 19
0
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))
Exemplo n.º 20
0
    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)
Exemplo n.º 21
0
 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)')
     )
Exemplo n.º 22
0
    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)
Exemplo n.º 23
0
    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)
Exemplo n.º 24
0
    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)
Exemplo n.º 25
0
    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])
Exemplo n.º 26
0
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)
Exemplo n.º 27
0
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)
Exemplo n.º 28
0
 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))
Exemplo n.º 29
0
    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'])
Exemplo n.º 30
0
    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)