Example #1
0
 def test_adding_validator_does_not_overrides_sqlalchemy_ones(
         self, unique_validator_mock):
     schema_node = GeoFormSchemaNode(FieldsCollection)
     schema_node.add_unique_validator(FieldsCollection.text,
                                      FieldsCollection.id)
     try:
         schema_node.deserialize({'text': 'more than five char'})
         assert False
     except colander.Invalid as e:
         assert 'Longer than maximum length' in e.children[0].msg[0]
         unique_validator_mock.assert_has_calls([
             mock.call(mock.ANY, mock.ANY, mock.ANY, mock.ANY,
                       'more than five char')
         ])
Example #2
0
    def test_adding_validator_does_not_overrides_custom_ones(
            self, unique_validator_mock):
        schema_node = GeoFormSchemaNode(FieldsCollection)

        def side_effect(node, value):
            raise colander.Invalid(schema_node['text'], msg='test ERROR !')

        schema_node['text'].validator = side_effect
        schema_node.add_unique_validator(FieldsCollection.text,
                                         FieldsCollection.id)
        try:
            schema_node.deserialize({'text': 'foo'})
            assert False
        except colander.Invalid as e:
            assert 'test ERROR !' == e.children[0].msg[0]
            unique_validator_mock.assert_has_calls(
                [mock.call(mock.ANY, mock.ANY, mock.ANY, mock.ANY, 'foo')])
Example #3
0
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.roles import roles_schema_node
from c2cgeoportal_admin.schemas.treegroup import children_schema_node
from c2cgeoportal_admin.views.treeitems import TreeItemViews
from c2cgeoportal_commons.models.main import Functionality, Interface, Role, Theme

_list_field = partial(ListField, Theme)

base_schema = GeoFormSchemaNode(
    Theme, widget=FormWidget(fields_template="theme_fields"))
base_schema.add(children_schema_node(only_groups=True))
base_schema.add(functionalities_schema_node.clone())
base_schema.add(roles_schema_node("restricted_roles"))
base_schema.add(interfaces_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add_unique_validator(Theme.name, Theme.id)


@view_defaults(match_param="table=themes")
class ThemeViews(TreeItemViews):

    _list_fields = (TreeItemViews._list_fields + [
        _list_field("ordering"),
        _list_field("public"),
        _list_field("icon"),
        _list_field(
            "functionalities",
            renderer=lambda themes: ", ".join([
                "{}={}".format(f.name, f.value)
                for f in sorted(themes.functionalities,
                                key=lambda f: cast(str, f.name))
Example #4
0
base_schema.add_before(
    'contact_persons',
    colander.SequenceSchema(
        GeoFormManyToManySchemaNode(Situation),
        name='situations',
        title='Situations',
        widget=RelationCheckBoxListWidget(
            Situation,
            'id',
            'name',
            order_by='name'
        ),
        validator=manytomany_validator
    )
)
base_schema.add_unique_validator(Excavation.reference_number, Excavation.hash)


@view_defaults(match_param='table=excavations')
class ExcavationViews(AbstractViews):

    _model = Excavation
    _base_schema = base_schema
    _id_field = 'hash'

    _list_fields = [
        _list_field('reference_number'),
        _list_field('request_date'),
        _list_field('description'),
        _list_field('location_town'),
        _list_field('responsible_company'),
Example #5
0
from sqlalchemy.orm import aliased, subqueryload
from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from deform.widget import FormWidget

from c2cgeoportal_commons.models.main import Role
from c2cgeoportal_commons.models.static import User
from c2cgeoportal_commons.lib.email_ import send_email_config
from c2cgeoportal_admin.schemas.roles import roles_schema_node

_list_field = partial(ListField, User)

base_schema = GeoFormSchemaNode(
    User, widget=FormWidget(fields_template='user_fields'))
base_schema.add(roles_schema_node('roles'))
base_schema.add_unique_validator(User.username, User.id)

settings_role = aliased(Role)


@view_defaults(match_param='table=users')
class UserViews(AbstractViews):
    _list_fields = [
        _list_field('id'),
        _list_field('username'),
        _list_field('email'),
        _list_field('last_login'),
        _list_field('expire_on'),
        _list_field('deactivated'),
        _list_field('settings_role',
                    renderer=lambda user: user.settings_role.name
from c2cgeoform.views.abstract_views import ListField
from deform.widget import FormWidget

from c2cgeoportal_admin.schemas.treegroup import children_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.treeitems import TreeItemViews
from c2cgeoportal_commons.models.main import LayerGroup, TreeGroup

_list_field = partial(ListField, LayerGroup)

base_schema = GeoFormSchemaNode(
    LayerGroup, widget=FormWidget(fields_template='layer_group_fields'))
base_schema.add(children_schema_node())
base_schema.add(metadatas_schema_node.clone())
base_schema.add_unique_validator(LayerGroup.name, LayerGroup.id)
base_schema.add(parent_id_node(TreeGroup))


@view_defaults(match_param='table=layer_groups')
class LayerGroupsViews(TreeItemViews):

    _list_fields = TreeItemViews._list_fields + [
        _list_field('is_expanded'),
        _list_field('is_internal_wms'),
        _list_field('is_base_layer')] + \
        TreeItemViews._extra_list_fields

    _id_field = 'id'
    _model = LayerGroup
    _base_schema = base_schema
Example #7
0
# of the authors and should not be interpreted as representing official policies,
# either expressed or implied, of the FreeBSD Project.

from functools import partial
from typing import Any, Dict

from c2cgeoform.schema import GeoFormSchemaNode
from c2cgeoform.views.abstract_views import AbstractViews, ListField
from pyramid.view import view_config, view_defaults

from c2cgeoportal_commons.models.static import OAuth2Client

_list_field = partial(ListField, OAuth2Client)

base_schema = GeoFormSchemaNode(OAuth2Client)
base_schema.add_unique_validator(OAuth2Client.client_id, OAuth2Client.id)


@view_defaults(match_param="table=oauth2_clients")
class OAuth2ClientViews(AbstractViews):  # type: ignore
    """The oAuth2 client administration view."""

    _list_fields = [
        _list_field("id"),
        _list_field("client_id"),
        _list_field("secret"),
        _list_field("redirect_uri"),
    ]
    _id_field = "id"
    _model = OAuth2Client
    _base_schema = base_schema
Example #8
0
from c2cgeoform.views.abstract_views import AbstractViews, ItemAction, ListField, UserMessage
from deform.widget import FormWidget
from pyramid.httpexceptions import HTTPNotFound
from pyramid.view import view_config, view_defaults
from sqlalchemy import inspect

from c2cgeoportal_admin import _
from c2cgeoportal_admin.lib.ogcserver_synchronizer import OGCServerSynchronizer
from c2cgeoportal_commons.lib.literal import Literal
from c2cgeoportal_commons.models.main import OGCServer

_list_field = partial(ListField, OGCServer)

base_schema = GeoFormSchemaNode(
    OGCServer, widget=FormWidget(fields_template="ogcserver_fields"))
base_schema.add_unique_validator(OGCServer.name, OGCServer.id)


@view_defaults(match_param="table=ogc_servers")
class OGCServerViews(AbstractViews):  # type: ignore
    """The OGC server administration view."""

    _list_fields = [
        _list_field("id"),
        _list_field("name"),
        _list_field("description"),
        _list_field("url"),
        _list_field("url_wfs"),
        _list_field("type"),
        _list_field("image_type"),
        _list_field("auth"),
Example #9
0
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import subqueryload

from c2cgeoportal_admin import _
from c2cgeoportal_admin.schemas.roles import roles_schema_node
from c2cgeoportal_admin.schemas.treegroup import treeitem_edit_url
from c2cgeoportal_admin.widgets import ChildrenWidget, ChildWidget
from c2cgeoportal_commons.models.main import Layer, RestrictionArea

_list_field = partial(ListField, RestrictionArea)

base_schema = GeoFormSchemaNode(
    RestrictionArea,
    widget=FormWidget(fields_template="restriction_area_fields"))
base_schema.add_before("area", roles_schema_node("roles"))
base_schema.add_unique_validator(RestrictionArea.name, RestrictionArea.id)


def layers(node, kw):  # pylint: disable=unused-argument
    dbsession = kw["request"].dbsession
    query = dbsession.query(Layer).order_by(Layer.name)
    return [{
        "id": layer.id,
        "label": layer.name,
        "icon_class": "icon-{}".format(layer.item_type),
        "edit_url": treeitem_edit_url(kw["request"], layer),
        "group": "All",
    } for layer in query]


base_schema.add(
Example #10
0
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews
from c2cgeoportal_commons.models.main import LayerGroup, LayerVectorTiles

_list_field = partial(ListField, LayerVectorTiles)

base_schema = GeoFormSchemaNode(
    LayerVectorTiles, widget=FormWidget(fields_template="layer_fields"))
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LayerVectorTiles.name, LayerVectorTiles.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param="table=layers_vectortiles")
class LayerVectorTilesViews(DimensionLayerViews):
    _list_fields = (
        DimensionLayerViews._list_fields +
        [_list_field("style"), _list_field("xyz")] +
        DimensionLayerViews._extra_list_fields)
    _id_field = "id"
    _model = LayerVectorTiles
    _base_schema = base_schema

    def _base_query(self, query=None):
        del query
Example #11
0
from c2cgeoportal_admin.schemas.dimensions import dimensions_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews
from c2cgeoportal_commons.models.main import LayerGroup, LayerWMS, LayerWMTS, OGCServer, TreeItem

_list_field = partial(ListField, LayerWMTS)

base_schema = GeoFormSchemaNode(LayerWMTS, widget=FormWidget(fields_template="layer_fields"))
base_schema.add(dimensions_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LayerWMTS.name, LayerWMTS.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param="table=layers_wmts")
class LayerWmtsViews(DimensionLayerViews):
    _list_fields = (
        DimensionLayerViews._list_fields
        + [
            _list_field("url"),
            _list_field("layer"),
            _list_field("style"),
            _list_field("matrix_set"),
            _list_field("image_type"),
        ]
        + DimensionLayerViews._extra_list_fields
Example #12
0
from pyramid.view import view_config, view_defaults
from sqlalchemy.orm import subqueryload

from c2cgeoportal_admin.schemas.functionalities import functionalities_schema_node
from c2cgeoportal_admin.schemas.map import map_widget
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_commons.models.main import Role

_list_field = partial(ListField, Role)

base_schema = GeoFormSchemaNode(
    Role, widget=FormWidget(fields_template="role_fields"))
base_schema["extent"].widget = map_widget
base_schema.add_before("extent", functionalities_schema_node.clone())
base_schema.add_before("extent", restrictionareas_schema_node.clone())
base_schema.add_unique_validator(Role.name, Role.id)


@view_defaults(match_param="table=roles")
class RoleViews(AbstractViews):
    _list_fields = [
        _list_field("id"),
        _list_field("name"),
        _list_field("description"),
        _list_field(
            "functionalities",
            renderer=lambda role: ", ".join([
                "{}={}".format(f.name, f.value) for f in role.functionalities
            ]),
        ),
        _list_field("restrictionareas",
Example #13
0
base_schema.add_before(
    'contact_persons',
    colander.SequenceSchema(
        GeoFormManyToManySchemaNode(Situation),
        name='situations',
        title='Situations',
        widget=RelationCheckBoxListWidget(
            Situation,
            'id',
            'name',
            order_by='name'
        ),
        validator=manytomany_validator
    )
)
base_schema.add_unique_validator(Excavation.reference_number, Excavation.hash)


@view_defaults(match_param='table=excavations')
class ExcavationViews(AbstractViews):

    _model = Excavation
    _base_schema = base_schema
    _id_field = 'hash'

    _list_fields = [
        _list_field('reference_number'),
        _list_field('request_date'),
        _list_field('description'),
        _list_field('location_town'),
        _list_field('responsible_company'),
from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.schemas.treeitem import parent_id_node
from c2cgeoportal_admin.views.dimension_layers import DimensionLayerViews

from geoportailv3_geoportal.models import LuxLayerInternalWMS

_list_field = partial(ListField, LuxLayerInternalWMS)

base_schema = GeoFormSchemaNode(LuxLayerInternalWMS, widget=FormWidget(fields_template='layer_fields'))
base_schema.add(dimensions_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add_unique_validator(LuxLayerInternalWMS.name, LuxLayerInternalWMS.id)
base_schema.add(parent_id_node(LayerGroup))


@view_defaults(match_param='table=lux_layer_internal_wms')
class LuxLayerInternalWMSViews(DimensionLayerViews):
    _list_fields = DimensionLayerViews._list_fields + [
        _list_field('url'),
        _list_field('layers'),
        _list_field('is_poi'),
        _list_field('use_auth'),
        _list_field('collection_id'),
        _list_field('rest_url'),
        _list_field('layer'),
        _list_field('style'),
        _list_field('time_mode'),
Example #15
0
from c2cgeoportal_commons.models.main import LayerV1

from c2cgeoportal_admin.schemas.metadata import metadatas_schema_node
from c2cgeoportal_admin.schemas.interfaces import interfaces_schema_node
from c2cgeoportal_admin.schemas.restriction_areas import restrictionareas_schema_node
from c2cgeoportal_admin.views.layers import LayerViews

_list_field = partial(ListField, LayerV1)

base_schema = GeoFormSchemaNode(
    LayerV1, widget=FormWidget(fields_template='layer_v1_fields'))
base_schema.add(interfaces_schema_node.clone())
base_schema.add(restrictionareas_schema_node.clone())
base_schema.add(metadatas_schema_node.clone())
base_schema.add_unique_validator(LayerV1.name, LayerV1.id)


@view_defaults(match_param='table=layers_v1')
class LayerV1Views(LayerViews):
    _list_fields = LayerViews._list_fields + [
        _list_field('layer'),
        _list_field('is_checked'),
        _list_field('icon'),
        _list_field('layer_type'),
        _list_field('url'),
        _list_field('image_type'),
        _list_field('style'),
        _list_field('dimensions'),
        _list_field('matrix_set'),
        _list_field('wms_url'),