Ejemplo n.º 1
0
    def teardown_method(self, _):
        import transaction

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Functionality, OGCServer, Role
        from c2cgeoportal_commons.models.static import User

        transaction.commit()

        for user_name in ("__test_user1", "__test_user2", "__test_user3"):
            for o in DBSession.query(User).filter(
                    User.username == user_name).all():
                o.functionalities = []
                DBSession.delete(o)
        for role_name in ("__test_role1", "__test_role2", "__test_role3",
                          "__test_role4"):
            for o in DBSession.query(Role).filter(
                    Role.name == role_name).all():
                o.functionalities = []
                DBSession.delete(o)
        for func_name in ("__test_s", "__test_a", "__test_b"):
            DBSession.query(Functionality).filter(
                Functionality.name == func_name).delete()
        DBSession.query(OGCServer).delete()

        transaction.commit()
    def teardown_method(self, _):
        testing.tearDown()

        import transaction

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import FullTextSearch, Interface, Role
        from c2cgeoportal_commons.models.static import User

        DBSession.delete(DBSession.query(User).filter(User.username == "__test_user1").one())
        DBSession.delete(DBSession.query(User).filter(User.username == "__test_user2").one())

        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "label1").delete()
        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "label2").delete()
        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "label3").delete()
        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "label4").delete()
        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "label5").delete()
        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "label6").delete()
        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "A 7 simi").delete()
        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "A 70 simi").delete()
        DBSession.query(FullTextSearch).filter(FullTextSearch.label == "A 71 simi").delete()

        DBSession.query(Interface).filter(Interface.name == "main").delete()

        DBSession.query(Role).filter(Role.name == "__test_role1").delete()
        DBSession.query(Role).filter(Role.name == "__test_role2").delete()

        transaction.commit()
Ejemplo n.º 3
0
    def invalidate_authorization_code(
        self,
        client_id: str,
        code: str,
        request: oauthlib.common.Request,
        *args: Any,
        **kwargs: Any,
    ) -> None:
        """
        Invalidate an authorization code after use.

        Arguments:

            client_id: Unicode client identifier
            code: The authorization code grant (request.code).
            request: The HTTP Request

        Method is used by:
            - Authorization Code Grant
        """
        del args, kwargs

        LOG.debug("invalidate_authorization_code %s", client_id)

        from c2cgeoportal_commons.models import DBSession, static  # pylint: disable=import-outside-toplevel

        DBSession.delete(
            DBSession.query(static.OAuth2AuthorizationCode).join(
                static.OAuth2AuthorizationCode.client).filter(
                    static.OAuth2AuthorizationCode.code == code).filter(
                        static.OAuth2Client.client_id == client_id).filter(
                            static.OAuth2AuthorizationCode.user_id ==
                            request.user.id).one())
Ejemplo n.º 4
0
    def setup_method(self, _):
        setup_module()

        import transaction

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Interface, Role
        from c2cgeoportal_commons.models.static import User

        setup_db()

        self.metadata = None
        self.layer_ids = []

        for o in DBSession.query(User).all():
            DBSession.delete(o)

        self.role = Role(name="__test_role")
        self.user = User(username="******",
                         password="******",
                         settings_role=self.role,
                         roles=[self.role])
        self.main = Interface(name="main")

        DBSession.add(self.user)
        DBSession.add(self.role)
        DBSession.add(self.main)

        create_default_ogcserver()

        transaction.commit()
Ejemplo n.º 5
0
    def teardown_method(self, _):
        testing.tearDown()

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import TreeItem, Interface, OGCServer

        for item in DBSession.query(TreeItem).all():
            DBSession.delete(item)
        DBSession.query(OGCServer).delete()
        DBSession.query(Interface).filter(Interface.name == "main").delete()

        transaction.commit()
Ejemplo n.º 6
0
    def teardown_method(self, _):
        import transaction
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Role
        from c2cgeoportal_commons.models.static import User

        transaction.commit()

        DBSession.delete(
            DBSession.query(User).filter_by(username="******").one())
        DBSession.query(Role).filter_by(name="__test_role").delete()
        transaction.commit()
Ejemplo n.º 7
0
    def teardown_method(self, _):
        testing.tearDown()

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Interface, Metadata, TreeItem

        for t in DBSession.query(Metadata).all():
            DBSession.delete(t)
        for item in DBSession.query(TreeItem).all():
            DBSession.delete(item)
        DBSession.query(Interface).filter(Interface.name == "desktop").delete()

        transaction.commit()
    def teardown_method(self, _):
        testing.tearDown()

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import TreeItem, Interface, OGCServer

        for item in DBSession.query(TreeItem).all():
            DBSession.delete(item)
        DBSession.query(OGCServer).delete()
        DBSession.query(Interface).filter(
            Interface.name == "main"
        ).delete()

        transaction.commit()
Ejemplo n.º 9
0
    def teardown_method(self, _):
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Role, LayerWMS, RestrictionArea, Interface, OGCServer
        from c2cgeoportal_commons.models.static import User

        DBSession.delete(
            DBSession.query(User).filter(
                User.username == "__test_user1").one())

        ra = DBSession.query(RestrictionArea).filter(
            RestrictionArea.name == "__test_ra1").one()
        ra.roles = []
        ra.layers = []
        DBSession.delete(ra)

        r = DBSession.query(Role).filter(Role.name == "__test_role1").one()
        DBSession.delete(r)

        for layer in (DBSession.query(LayerWMS).filter(
                LayerWMS.name.in_(
                    ["testpoint_group_name",
                     "testpoint_protected_2_name"])).all()):
            DBSession.delete(layer)
        DBSession.query(Interface).filter(Interface.name == "main").delete()
        DBSession.query(OGCServer).delete()

        transaction.commit()
Ejemplo n.º 10
0
    def teardown_method(self, _):
        testing.tearDown()

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import TreeItem, Interface, Metadata

        for t in DBSession.query(Metadata).all():
            DBSession.delete(t)
        for item in DBSession.query(TreeItem).all():
            DBSession.delete(item)
        DBSession.query(Interface).filter(
            Interface.name == "desktop"
        ).delete()

        transaction.commit()
Ejemplo n.º 11
0
    def setup_method(self, _):
        # Always see the diff
        # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff
        self.maxDiff = None

        setup_db()

        self._tables = []

        import transaction

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import (
            OGCSERVER_AUTH_NOAUTH,
            Interface,
            LayerGroup,
            Role,
            Theme,
            TreeItem,
        )
        from c2cgeoportal_commons.models.static import User

        for treeitem in DBSession.query(TreeItem).all():
            DBSession.delete(treeitem)

        self.role = Role(name="__test_role")
        self.user = User(username="******",
                         password="******",
                         settings_role=self.role,
                         roles=[self.role])
        self.main = Interface(name="main")

        self.ogc_server = create_default_ogcserver()
        self.ogc_server.auth = OGCSERVER_AUTH_NOAUTH

        self.metadata = None
        self.layer_ids = []

        self.layer_group_1 = LayerGroup(name="__test_layer_group_1")

        theme = Theme(name="__test_theme")
        theme.interfaces = [self.main]
        theme.children = [self.layer_group_1]

        DBSession.add_all(
            [self.main, self.user, self.role, theme, self.layer_group_1])

        transaction.commit()
Ejemplo n.º 12
0
    def clean():
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.static import User
        from c2cgeoportal_commons.models.main import TreeItem, Interface, Role, RestrictionArea, OGCServer

        for o in DBSession.query(RestrictionArea).all():
            o.roles = []
            o.layers = []
            DBSession.delete(o)
        for item in DBSession.query(TreeItem).all():
            DBSession.delete(item)
        DBSession.query(OGCServer).delete()
        DBSession.query(Interface).filter(Interface.name == "main").delete()
        DBSession.query(User).filter(User.username == "__test_user").delete()
        DBSession.query(Role).filter(Role.name == "__test_role").delete()

        transaction.commit()
    def setup_method(self, _):
        # Always see the diff
        # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff
        self.maxDiff = None

        cleanup_db()

        self._tables = []

        import transaction
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Role, Interface, TreeItem, Theme, \
            LayerGroup, OGCSERVER_AUTH_NOAUTH
        from c2cgeoportal_commons.models.static import User

        for treeitem in DBSession.query(TreeItem).all():
            DBSession.delete(treeitem)

        self.role = Role(name="__test_role")
        self.user = User(
            username="******",
            password="******",
            role=self.role
        )
        self.main = Interface(name="main")

        self.ogc_server, external_ogc_server = create_default_ogcserver()
        self.ogc_server.auth = OGCSERVER_AUTH_NOAUTH
        external_ogc_server.auth = OGCSERVER_AUTH_NOAUTH

        self.metadata = None
        self.layer_ids = []

        self.layer_group_1 = LayerGroup(name="__test_layer_group_1")

        theme = Theme(name="__test_theme")
        theme.interfaces = [self.main]
        theme.children = [self.layer_group_1]

        DBSession.add_all([self.main, self.user, self.role, theme, self.layer_group_1])

        transaction.commit()
Ejemplo n.º 14
0
def cleanup_db():
    """ Cleanup the database """
    import transaction
    import c2cgeoportal_geoportal.lib
    from c2cgeoportal_commons.models import DBSession
    from c2cgeoportal_commons.models.main import OGCServer, TreeItem, Role, RestrictionArea, \
        Interface, Functionality, FullTextSearch
    from c2cgeoportal_commons.models.static import Shorturl, User

    transaction.commit()
    for ra in DBSession.query(RestrictionArea).all():
        ra.roles = []
        DBSession.delete(ra)
    for ti in DBSession.query(TreeItem).all():
        DBSession.delete(ti)
    DBSession.query(OGCServer).delete()
    DBSession.query(Interface).delete()
    for r in DBSession.query(Role).all():
        r.functionnalities = []
        DBSession.delete(r)
    DBSession.query(User).delete()
    DBSession.query(Functionality).delete()
    DBSession.query(FullTextSearch).delete()
    DBSession.query(Shorturl).delete()
    transaction.commit()

    c2cgeoportal_geoportal.lib.ogc_server_wms_url_ids = None
    c2cgeoportal_geoportal.lib.ogc_server_wfs_url_ids = None

    caching.init_region({
        "backend": "dogpile.cache.null",
    })
    caching.invalidate_region()
    def teardown_method(self, _):
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Role, LayerWMS, RestrictionArea, \
            Interface, OGCServer
        from c2cgeoportal_commons.models.static import User

        DBSession.query(User).filter(User.username == "__test_user1").delete()

        ra = DBSession.query(RestrictionArea).filter(
            RestrictionArea.name == "__test_ra1"
        ).one()
        ra.roles = []
        ra.layers = []
        DBSession.delete(ra)

        r = DBSession.query(Role).filter(Role.name == "__test_role1").one()
        DBSession.delete(r)

        for layer in DBSession.query(LayerWMS).filter(
                LayerWMS.name.in_(["testpoint_group_name", "testpoint_protected_2_name"])
        ).all():
            DBSession.delete(layer)
        DBSession.query(Interface).filter(
            Interface.name == "main"
        ).delete()
        DBSession.query(OGCServer).delete()

        transaction.commit()
Ejemplo n.º 16
0
    def teardown_method(self, _):
        testing.tearDown()

        functionality.FUNCTIONALITIES_TYPES = None

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Role, Layer, \
            RestrictionArea, Theme, LayerGroup, Interface, OGCServer
        from c2cgeoportal_commons.models.static import User

        DBSession.query(User).filter(User.username == "__test_user1").delete()
        DBSession.query(User).filter(User.username == "__test_user2").delete()

        ra = DBSession.query(RestrictionArea).filter(
            RestrictionArea.name == "__test_ra1").one()
        ra.roles = []
        DBSession.delete(ra)
        ra = DBSession.query(RestrictionArea).filter(
            RestrictionArea.name == "__test_ra2").one()
        ra.roles = []
        DBSession.delete(ra)

        DBSession.query(Role).filter(Role.name == "__test_role1").delete()
        DBSession.query(Role).filter(Role.name == "__test_role2").delete()

        for t in DBSession.query(Theme).filter(
                Theme.name == "__test_theme").all():
            DBSession.delete(t)
        for g in DBSession.query(LayerGroup).all():
            DBSession.delete(g)
        for layer in DBSession.query(Layer).all():
            DBSession.delete(layer)
        DBSession.query(Interface).filter(Interface.name == "main").delete()
        DBSession.query(OGCServer).delete()

        for table in self._tables[::-1]:
            table.drop(checkfirst=True)

        transaction.commit()
Ejemplo n.º 17
0
    def clean():
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.static import User
        from c2cgeoportal_commons.models.main import TreeItem, Interface, Role, RestrictionArea, OGCServer

        for o in DBSession.query(RestrictionArea).all():
            o.roles = []
            o.layers = []
            DBSession.delete(o)
        for item in DBSession.query(TreeItem).all():
            DBSession.delete(item)
        DBSession.query(OGCServer).delete()
        DBSession.query(Interface).filter(
            Interface.name == "main"
        ).delete()
        DBSession.query(User).filter(
            User.username == "__test_user"
        ).delete()
        DBSession.query(Role).filter(
            Role.name == "__test_role"
        ).delete()

        transaction.commit()
Ejemplo n.º 18
0
    def teardown_method(self, _):
        testing.tearDown()

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import LayerGroup, LayerWMS, OGCServer, Theme

        for t in DBSession.query(Theme).filter(Theme.name == "__test_theme").all():
            DBSession.delete(t)
        for g in DBSession.query(LayerGroup).all():
            DBSession.delete(g)
        for layer in DBSession.query(LayerWMS).all():
            DBSession.delete(layer)
        DBSession.query(OGCServer).delete()

        transaction.commit()
Ejemplo n.º 19
0
    def teardown_method(self, _):
        testing.tearDown()

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import LayerWMS, Theme, LayerGroup, Interface, OGCServer

        for t in DBSession.query(Theme).all():
            DBSession.delete(t)
        for g in DBSession.query(LayerGroup).all():
            DBSession.delete(g)
        for layer in DBSession.query(LayerWMS).all():
            DBSession.delete(layer)  # pragma: no cover
        DBSession.query(Interface).filter(Interface.name == "main").delete()
        DBSession.query(OGCServer).delete()

        transaction.commit()
Ejemplo n.º 20
0
    def teardown_method(self, _):
        import transaction
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Role, Functionality, OGCServer
        from c2cgeoportal_commons.models.static import User

        functionality.FUNCTIONALITIES_TYPES = None

        transaction.commit()

        for o in DBSession.query(User).filter(
                User.username == "__test_user1").all():
            o.functionalities = []
            DBSession.delete(o)
        for o in DBSession.query(User).filter(
                User.username == "__test_user2").all():
            o.functionalities = []
            DBSession.delete(o)
        for o in DBSession.query(Role).filter(
                Role.name == "__test_role1").all():
            o.functionalities = []
            DBSession.delete(o)
        for o in DBSession.query(Role).filter(
                Role.name == "__test_role2").all():
            o.functionalities = []
            DBSession.delete(o)
        DBSession.query(Functionality).filter(
            Functionality.name == "__test_s").delete()
        DBSession.query(Functionality).filter(
            Functionality.name == "__test_a").delete()
        DBSession.query(Functionality).filter(
            Functionality.name == "__test_s").delete()
        DBSession.query(Functionality).filter(
            Functionality.name == "__test_a").delete()
        DBSession.query(OGCServer).delete()

        transaction.commit()
Ejemplo n.º 21
0
    def teardown_method(self, _):
        import transaction
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Role, Functionality, OGCServer
        from c2cgeoportal_commons.models.static import User

        functionality.FUNCTIONALITIES_TYPES = None

        transaction.commit()

        for o in DBSession.query(User).filter(
                User.username == "__test_user1").all():
            o.functionalities = []
            DBSession.delete(o)
        for o in DBSession.query(User).filter(
                User.username == "__test_user2").all():
            o.functionalities = []
            DBSession.delete(o)
        for o in DBSession.query(Role).filter(
                Role.name == "__test_role1").all():
            o.functionalities = []
            DBSession.delete(o)
        for o in DBSession.query(Role).filter(
                Role.name == "__test_role2").all():
            o.functionalities = []
            DBSession.delete(o)
        DBSession.query(Functionality).filter(
            Functionality.name == "__test_s").delete()
        DBSession.query(Functionality).filter(
            Functionality.name == "__test_a").delete()
        DBSession.query(Functionality).filter(
            Functionality.name == "__test_s").delete()
        DBSession.query(Functionality).filter(
            Functionality.name == "__test_a").delete()
        DBSession.query(OGCServer).delete()

        transaction.commit()
Ejemplo n.º 22
0
    def teardown_method(self, _):
        testing.tearDown()

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Layer, Theme, LayerGroup, OGCServer, Interface

        for layer in DBSession.query(Layer).all():
            DBSession.delete(layer)
        for g in DBSession.query(LayerGroup).all():
            DBSession.delete(g)
        for t in DBSession.query(Theme).all():
            DBSession.delete(t)
        DBSession.query(OGCServer).delete()
        DBSession.query(Interface).filter(
            Interface.name == "main"
        ).delete()

        transaction.commit()
Ejemplo n.º 23
0
    def clean():
        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Interface, OGCServer, RestrictionArea, Role, TreeItem
        from c2cgeoportal_commons.models.static import User

        for obj in DBSession.query(RestrictionArea).all():
            obj.roles = []
            obj.layers = []
            DBSession.delete(obj)
        for item in DBSession.query(TreeItem).all():
            DBSession.delete(item)
        DBSession.query(OGCServer).delete()
        DBSession.query(Interface).filter(Interface.name == "main").delete()
        for name in ("__test_user", "__test_user2"):
            for user in DBSession.query(User).filter(
                    User.username == name).all():
                DBSession.delete(user)
        for name in ("__test_role", "__test_role2"):
            DBSession.query(Role).filter(Role.name == name).delete()

        transaction.commit()
Ejemplo n.º 24
0
    def teardown_method(self, _):
        testing.tearDown()

        from c2cgeoportal_geoportal.lib import functionality
        functionality.FUNCTIONALITIES_TYPES = None

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import LayerV1, \
            Theme, LayerGroup, Interface, OGCServer

        for t in DBSession.query(Theme).all():
            DBSession.delete(t)
        for g in DBSession.query(LayerGroup).all():
            DBSession.delete(g)
        for layer in DBSession.query(LayerV1).all():
            DBSession.delete(layer)  # pragma: no cover
        DBSession.query(Interface).filter(
            Interface.name == "main"
        ).delete()
        DBSession.query(OGCServer).delete()

        transaction.commit()
Ejemplo n.º 25
0
    def setup_method(self, _):
        # Always see the diff
        # https://docs.python.org/2/library/unittest.html#unittest.TestCase.maxDiff
        self.maxDiff = None
        self._tables = []

        from c2cgeoportal_geoportal.lib import functionality
        functionality.FUNCTIONALITIES_TYPES = None

        from c2cgeoportal_commons.models import DBSession
        from c2cgeoportal_commons.models.main import Role, \
            RestrictionArea, TreeItem, Theme, LayerGroup, Interface, LayerWMS
        from c2cgeoportal_commons.models.static import User

        from sqlalchemy import Column, Table, types
        from sqlalchemy.ext.declarative import declarative_base
        from geoalchemy2 import Geometry

        for o in DBSession.query(RestrictionArea).all():
            DBSession.delete(o)
        for o in DBSession.query(Role).all():
            DBSession.delete(o)
        for o in DBSession.query(User).all():
            DBSession.delete(o)
        for o in DBSession.query(TreeItem).all():
            DBSession.delete(o)
        ogcserver = create_default_ogcserver()

        role1 = Role(name="__test_role1")
        role1.id = 999
        user1 = User(username="******", password="******", settings_role=role1, roles=[role1])
        user1.email = "*****@*****.**"

        role2 = Role(name="__test_role2", extent=WKTElement(
            "POLYGON((1 2, 1 4, 3 4, 3 2, 1 2))", srid=21781
        ))
        user2 = User(username="******", password="******", settings_role=role2, roles=[role2])

        main = Interface(name="main")

        engine = DBSession.c2c_rw_bind
        engine.connect()
        a_geo_table = Table(
            "a_geo_table", declarative_base(bind=engine).metadata,
            Column("id", types.Integer, primary_key=True),
            Column("geom", Geometry("POINT", srid=21781)),
            schema="geodata"
        )

        self._tables = [a_geo_table]
        a_geo_table.drop(checkfirst=True)
        a_geo_table.create()

        private_layer = LayerWMS(name="__test_private_layer", public=False)
        private_layer.layer = "__test_private_layer"
        private_layer.geo_table = "geodata.a_geo_table"
        private_layer.interfaces = [main]
        private_layer.ogc_server = ogcserver

        group = LayerGroup(name="__test_layer_group")
        group.children = [private_layer]

        theme = Theme(name="__test_theme")
        theme.children = [group]
        theme.interfaces = [main]

        DBSession.add(RestrictionArea(
            name="__test_ra1", description="", layers=[private_layer],
            roles=[role1],
        ))
        DBSession.add(RestrictionArea(
            name="__test_ra2", description="", layers=[private_layer],
            roles=[role2], readwrite=True,
        ))

        DBSession.add_all([
            user1, user2, role1, role2, theme, group, private_layer,
        ])

        transaction.commit()
Ejemplo n.º 26
0
    def lux_report_get(self):
        ref = self.request.matchdict.get("ref")
        job = DBSession.query(LuxPrintJob).get(ref)
        if job is None:
            return HTTPNotFound()
        try:
            resp, content = self._proxy("%s/report/%s" % (job.print_url, ref))

            attributes = json.loads(job.spec)["attributes"]
            is_pdf = json.loads(job.spec)["format"] == "pdf"
            print_title = attributes.get("name")
            if print_title is None or len(print_title) == 0:
                print_title = "map_geoportal_lu"
            print_title = re.sub(r" ", "_", print_title)
            print_title = re.sub(r"[^a-zA-Z0-9\-\_]", "", print_title)

            if is_pdf and "firstPagesUrls" in attributes and\
                    attributes["firstPagesUrls"] is not None and\
                    len(attributes["firstPagesUrls"]) > 0:
                attributes["firstPagesUrls"].reverse()
                for pageUrl in attributes["firstPagesUrls"]:
                    try:
                        merger = PdfFileMerger(strict=False)
                        if pageUrl['type'].lower() == 'pdf':
                            opener = urllib.request.build_opener(
                                urllib.request.HTTPHandler())
                            pdf_content = opener.open(pageUrl['url']).read()
                            merger.append(BytesIO(pdf_content))
                        else:
                            first_page = BytesIO()
                            weasyprint.HTML(
                                pageUrl['url']).write_pdf(first_page)
                            merger.append(first_page)
                        merger.append(BytesIO(content))
                        content = BytesIO()
                        merger.write(content)
                        content = content.getvalue()
                    except Exception as e:
                        log.exception(e)

            if is_pdf and "legend" in attributes and\
                    attributes["legend"] is not None:
                merger = PdfFileMerger(strict=False)
                merger.append(BytesIO(content))

                lang = attributes.get("lang")

                for item in attributes["legend"]:
                    if "restUrl" in item and item["restUrl"] is not None:
                        merger.append(
                            self._create_legend_from_url(item["restUrl"]))
                    elif "legendUrl" in item and item["legendUrl"] is not None:
                        legend_title = ""
                        if "legendTitle" in item and\
                           item["legendTitle"] is not None:
                            legend_title = item["legendTitle"]
                        access_constraints = ""
                        if "accessConstraints" in item and\
                           item["accessConstraints"] is not None:
                            access_constraints = item["accessConstraints"]
                        merger.append(
                            self._create_legend_from_image(
                                item["legendUrl"], legend_title,
                                access_constraints))
                    elif "name" in item and item["name"] is not None:
                        merger.append(self._get_legend(item["name"], lang))

                content = BytesIO()
                merger.write(content)
                content = content.getvalue()

            if is_pdf and "queryResults" in attributes and\
                    attributes["queryResults"] is not None:
                css = weasyprint.CSS(
                    string=".ng-hide {display: none !important;} " +
                    ".no-print {display: none !important;} " +
                    "body {font-size: 60%;} " +
                    ".route-details-step { font-family: " +
                    "Arial,sans-serif; font-size: 14px; " +
                    "line-height: 20px; border-bottom: 1px " +
                    "solid #8394A0; padding: 10px 10px 10px 30px; " +
                    "margin: 0 -12px 0 0; position: relative;} " +
                    ".route-info-title {font-size: 18px; " +
                    "line-height: 19px; font-weight: 700;} " +
                    ".route-general-info-container {display: " +
                    "table; width: 100%;} " +
                    ".route-single-info {display: table-cell; " +
                    "width: auto;} " +
                    ".route-info-general-data {font-size: 18px; " +
                    "font-weight: 700; line-height: 22px; " +
                    "padding-top: 10px;} " +
                    ".route-info-data {color: #8394A0;} " +
                    ".route-instruction-data {font-size: 16px; " +
                    "line-height: 19px; display: inline-block; " +
                    "margin: 0 10px 0 0;} " +
                    ".route-instruction {margin-bottom: 10px;" +
                    "position: relative;} " +
                    ".icon-Direction {position: absolute; top: 0;" +
                    "right: 100%; margin-right: 6px;} " +
                    ".icon-Direction:before {font-family: " +
                    "apart-geoportail!important;content: '\e903';" +
                    "font-size: 6px;color:'#000';} " +
                    ".south {transform: rotate(90deg);} " +
                    ".north {transform: rotate(270deg);} " +
                    ".west {transform: rotate(180deg);} " +
                    ".east {transform: rotate(0deg);} " +
                    ".n-e {transform: rotate(315deg);} " +
                    ".n-w {transform: rotate(225deg);} " +
                    ".s-w {transform: rotate(135deg);} " +
                    ".s-e {transform: rotate(45deg);} ")
                merger = PdfFileMerger(strict=False)
                merger.append(BytesIO(content))
                query_results = BytesIO()
                weasyprint.HTML(string=attributes["queryResults"]).write_pdf(
                    query_results, stylesheets=[css])
                merger.append(query_results)

                content = BytesIO()
                merger.write(content)
                content = content.getvalue()

            DBSession.delete(job)
            if is_pdf:
                resp["content-disposition"] =\
                    "attachment; filename=%s.pdf" % (str(print_title))
            else:
                resp["content-disposition"] =\
                    "attachment; filename=%s.png" % (str(print_title))

            return self._build_response(resp, content, NO_CACHE, "print")
        except Exception as e:
            log.exception(e)
            log.error("reference is : " + ref)
            if job is not None:
                job.is_error = True
            return HTTPInternalServerError()
Ejemplo n.º 27
0
def main():
    parser = ArgumentParser(
        prog=sys.argv[0],
        add_help=True,
        description=
        "Tool used to migrate your old layers from the old structure to the new one.",
    )

    parser.add_argument(
        "-i",
        "--app-config",
        default="geoportal/production.ini",
        dest="app_config",
        help=
        "the application .ini config file (optional, default is 'production.ini')"
    )
    parser.add_argument(
        "-n",
        "--app-name",
        default="app",
        dest="app_name",
        help="the application name (optional, default is 'app')")
    parser.add_argument("--no-layers",
                        dest="layers",
                        action="store_false",
                        help="do not import the layers")
    parser.add_argument("--no-groups",
                        dest="groups",
                        action="store_false",
                        help="do not import the groups")
    parser.add_argument("--no-themes",
                        dest="themes",
                        action="store_false",
                        help="do not import the themes")
    options = parser.parse_args()

    app_config = options.app_config
    app_name = options.app_name
    if app_name is None and "#" in app_config:
        app_config, app_name = app_config.split("#", 1)
    env = {}
    env.update(os.environ)
    env["LOG_LEVEL"] = "INFO"
    env["GUNICORN_ACCESS_LOG_LEVEL"] = "INFO"
    env["C2CGEOPORTAL_LOG_LEVEL"] = "WARN"
    fileConfig(app_config, defaults=env)
    app = get_app(app_config, app_name, options=env)

    # must be done only once we have loaded the project config
    from c2cgeoportal_commons.models import DBSession
    from c2cgeoportal_commons.models.main import OGCServer, Theme, LayerWMS, LayerWMTS, LayerV1, LayerGroup

    session = DBSession()

    if options.layers:
        table_list = [LayerWMTS, LayerWMS, OGCServer]
        for table in table_list:
            print(("Emptying table {0!s}.".format(table.__table__)))
            # must be done exactly this way otherwise the cascade config in the
            # models are not used
            for t in session.query(table).all():
                session.delete(t)

        # list and create all distinct ogc_server
        ogc_server(session, app.registry.settings)

        print("Converting layerv1.")
        for layer in session.query(LayerV1).all():
            layer_v1tov2(session, layer)

    if options.groups:
        print("Converting layer groups.")
        for group in session.query(LayerGroup).all():
            layergroup_v1tov2(session, group)

    if options.themes:
        print("Converting themes.")
        for theme in session.query(Theme).all():
            theme_v1tov2(session, theme)

    transaction.commit()
Ejemplo n.º 28
0
def main():
    parser = ArgumentParser(
        prog=sys.argv[0], add_help=True,
        description="Tool used to migrate your old layers from the old structure to the new one.",
    )

    parser.add_argument(
        "-i", "--app-config",
        default="geoportal/production.ini",
        dest="app_config",
        help="the application .ini config file (optional, default is 'production.ini')"
    )
    parser.add_argument(
        "-n", "--app-name",
        default="app",
        dest="app_name",
        help="the application name (optional, default is 'app')"
    )
    parser.add_argument(
        "--no-layers",
        dest="layers",
        action="store_false",
        help="do not import the layers"
    )
    parser.add_argument(
        "--no-groups",
        dest="groups",
        action="store_false",
        help="do not import the groups"
    )
    parser.add_argument(
        "--no-themes",
        dest="themes",
        action="store_false",
        help="do not import the themes"
    )
    options = parser.parse_args()

    app_config = options.app_config
    app_name = options.app_name
    if app_name is None and "#" in app_config:
        app_config, app_name = app_config.split("#", 1)
    fileConfig(app_config, defaults=os.environ)
    app = get_app(app_config, app_name, options=os.environ)

    # must be done only once we have loaded the project config
    from c2cgeoportal_commons.models import DBSession
    from c2cgeoportal_commons.models.main import OGCServer, Theme, LayerWMS, LayerWMTS, LayerV1, LayerGroup

    session = DBSession()

    if options.layers:
        table_list = [LayerWMTS, LayerWMS, OGCServer]
        for table in table_list:
            print(("Emptying table {0!s}.".format(table.__table__)))
            # must be done exactly this way otherwise the cascade config in the
            # models are not used
            for t in session.query(table).all():
                session.delete(t)

        # list and create all distinct ogc_server
        ogc_server(session, app.registry.settings)

        print("Converting layerv1.")
        for layer in session.query(LayerV1).all():
            layer_v1tov2(session, layer)

    if options.groups:
        print("Converting layer groups.")
        for group in session.query(LayerGroup).all():
            layergroup_v1tov2(session, group)

    if options.themes:
        print("Converting themes.")
        for theme in session.query(Theme).all():
            theme_v1tov2(session, theme)

    transaction.commit()