Esempio n. 1
0
    make_validator_update, make_schema_adaptor, get_all_fields
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang, validate_version_id, validate_lang_param, \
    validate_preferred_lang_param, check_get_for_integer_property, \
    validate_associations
from c2corg_common.attributes import activities
from c2corg_common.fields_outing import fields_outing
from cornice.resource import resource, view
from pyramid.httpexceptions import HTTPForbidden
from sqlalchemy.orm.util import aliased
from sqlalchemy.sql.expression import exists, and_, over
from sqlalchemy.sql.functions import func

validate_outing_create = make_validator_create(fields_outing, 'activities',
                                               activities)
validate_outing_update = make_validator_update(fields_outing, 'activities',
                                               activities)
validate_associations_create = functools.partial(validate_associations,
                                                 OUTING_TYPE, True)
validate_associations_update = functools.partial(validate_associations,
                                                 OUTING_TYPE, False)


def validate_required_associations(request):
    missing_user = False
    missing_route = False

    associations = request.validated.get('associations', None)
    if not associations:
        missing_user = True
        missing_route = True
    else:
Esempio n. 2
0
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang, validate_version_id, validate_lang_param, \
    validate_preferred_lang_param, validate_associations
from c2corg_common.fields_waypoint import fields_waypoint
from c2corg_common.attributes import waypoint_types
from sqlalchemy.orm import joinedload, load_only
from sqlalchemy.orm.util import aliased
from sqlalchemy.sql.elements import literal_column
from sqlalchemy.sql.expression import and_, union

# the number of routes that are included for waypoints
NUM_ROUTES = 30

validate_waypoint_create = make_validator_create(
    fields_waypoint, 'waypoint_type', waypoint_types)
validate_waypoint_update = make_validator_update(
    fields_waypoint, 'waypoint_type', waypoint_types)
validate_associations_create = functools.partial(
    validate_associations, WAYPOINT_TYPE, True)
validate_associations_update = functools.partial(
    validate_associations, WAYPOINT_TYPE, False)


@resource(collection_path='/waypoints', path='/waypoints/{id}',
          cors_policy=cors_policy)
class WaypointRest(DocumentRest):

    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        """
        Get a list of documents, optionally matching search filters.
        If no search filters are given, the documents are directly queried
Esempio n. 3
0
from c2corg_api.views import set_creator as set_creator_on_documents

from c2corg_api.views.document_schemas import xreport_documents_config
from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view, \
    set_private_cache_header
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param, \
    validate_associations, validate_lang, validate_version_id, \
    is_associated_user

from pyramid.httpexceptions import HTTPForbidden

validate_xreport_create = make_validator_create(fields_xreport.get('required'))
validate_xreport_update = make_validator_update(fields_xreport.get('required'))
validate_associations_create = functools.partial(
    validate_associations, XREPORT_TYPE, True)
validate_associations_update = functools.partial(
    validate_associations, XREPORT_TYPE, False)


@resource(collection_path='/xreports', path='/xreports/{id}',
          cors_policy=cors_policy)
class XreportRest(DocumentRest):

    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(XREPORT_TYPE, xreport_documents_config)

    @view(validators=[validate_id, validate_lang_param])
Esempio n. 4
0
from c2corg_api.views.document_info import DocumentInfoRest
from c2corg_api.views.document_version import DocumentVersionRest
from c2corg_common.fields_book import fields_book
from cornice.resource import resource, view
from cornice.validators import colander_body_validator

from c2corg_api.views.document_schemas import book_documents_config
from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param, \
    validate_associations, validate_lang, validate_version_id

validate_book_create = make_validator_create(fields_book.get('required'))
validate_book_update = make_validator_update(fields_book.get('required'))
validate_associations_create = functools.partial(
    validate_associations, BOOK_TYPE, True)
validate_associations_update = functools.partial(
    validate_associations, BOOK_TYPE, False)


@resource(collection_path='/books', path='/books/{id}',
          cors_policy=cors_policy)
class BookRest(DocumentRest):

    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(BOOK_TYPE, book_documents_config)

    @view(validators=[validate_id, validate_lang_param])
Esempio n. 5
0
from c2corg_common.fields_article import fields_article
from cornice.resource import resource, view
from cornice.validators import colander_body_validator
from c2corg_api.views import set_creator as set_creator_on_documents

from c2corg_api.views.document_schemas import article_documents_config
from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param, \
    validate_associations, validate_lang, validate_version_id

validate_article_create = make_validator_create(fields_article.get('required'))
validate_article_update = make_validator_update(fields_article.get('required'))
validate_associations_create = functools.partial(
    validate_associations, ARTICLE_TYPE, True)
validate_associations_update = functools.partial(
    validate_associations, ARTICLE_TYPE, False)


@resource(collection_path='/articles', path='/articles/{id}',
          cors_policy=cors_policy)
class ArticleRest(DocumentRest):

    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(ARTICLE_TYPE, article_documents_config)

    @view(validators=[validate_id, validate_lang_param])
Esempio n. 6
0
from c2corg_common.fields_topo_map import fields_topo_map
from cornice.resource import resource, view
from cornice.validators import colander_body_validator

from c2corg_api.views.document import DocumentRest, make_validator_create, make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view
from c2corg_api.views.validation import (
    validate_id,
    validate_pagination,
    validate_lang_param,
    validate_preferred_lang_param,
    validate_lang,
)

validate_map_create = make_validator_create(fields_topo_map.get("required"))
validate_map_update = make_validator_update(fields_topo_map.get("required"))


@resource(collection_path="/maps", path="/maps/{id}", cors_policy=cors_policy)
class TopoMapRest(DocumentRest):
    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(MAP_TYPE, topo_map_documents_config)

    @view(validators=[validate_id, validate_lang_param])
    def get(self):
        return self._get(TopoMap, schema_topo_map)

    @restricted_json_view(
        schema=schema_topo_map, validators=[colander_body_validator, validate_map_create], permission="moderator"
    )
Esempio n. 7
0
from c2corg_api.views.document_version import DocumentVersionRest

from c2corg_common.fields_area import fields_area
from cornice.resource import resource, view
from cornice.validators import colander_body_validator

from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param, validate_lang, \
    validate_associations, validate_version_id, validate_cook_param
from pyramid.httpexceptions import HTTPBadRequest

validate_area_create = make_validator_create(fields_area.get('required'))
validate_area_update = make_validator_update(fields_area.get('required'))
validate_associations_create = functools.partial(validate_associations,
                                                 AREA_TYPE, True)
validate_associations_update = functools.partial(validate_associations,
                                                 AREA_TYPE, False)


@resource(collection_path='/areas',
          path='/areas/{id}',
          cors_policy=cors_policy)
class AreaRest(DocumentRest):
    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(AREA_TYPE, area_documents_config)

    @view(validators=[validate_id, validate_lang_param, validate_cook_param])
Esempio n. 8
0
from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update, NUM_RECENT_OUTINGS
from c2corg_api.views import cors_policy, restricted_json_view, \
    get_best_locale, set_default_geom_from_associations
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang, validate_version_id, validate_lang_param, \
    validate_preferred_lang_param, validate_associations, validate_cook_param
from c2corg_api.models.common.fields_route import fields_route
from c2corg_api.models.common.attributes import activities
from sqlalchemy.orm import load_only

log = logging.getLogger(__name__)

validate_route_create = make_validator_create(fields_route, 'activities',
                                              activities)
validate_route_update = make_validator_update(fields_route, 'activities',
                                              activities)
validate_associations_create = functools.partial(validate_associations,
                                                 ROUTE_TYPE, True)
validate_associations_update = functools.partial(validate_associations,
                                                 ROUTE_TYPE, False)


def validate_main_waypoint(is_on_create, request, **kwargs):
    """ Check that the document given as main waypoint is also listed as
    association.
    """
    doc = request.validated if is_on_create else \
        request.validated.get('document', {})
    main_waypoint_id = doc.get('main_waypoint_id', None)

    if not main_waypoint_id:
Esempio n. 9
0
        def f(request, **kwargs):
            image = request.validated
            check_filename_unique(image, request, updating=True)
    else:

        def f(request, **kwargs):
            image = request.validated
            check_filename_unique(image, request, updating=False)

    return f


base_validate_image_create = make_validator_create(
    fields_image.get('required'))
base_validate_image_update = make_validator_update(
    fields_image.get('required'))
validate_filename_create = make_validator_filename_unique(updating=False)
validate_filename_update = make_validator_filename_unique(updating=True)


def validate_image_create(request, **kwargs):
    base_validate_image_create(request, **kwargs)
    validate_filename_create(request, **kwargs)


def validate_image_update(request, **kwargs):
    base_validate_image_update(request, **kwargs)
    validate_filename_update(request, **kwargs)


validate_associations_create = functools.partial(validate_associations,
Esempio n. 10
0
    make_validator_update, make_schema_adaptor, get_all_fields
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang, validate_version_id, validate_lang_param, \
    validate_preferred_lang_param, check_get_for_integer_property, \
    validate_associations
from c2corg_common.attributes import activities
from c2corg_common.fields_outing import fields_outing
from cornice.resource import resource, view
from pyramid.httpexceptions import HTTPForbidden
from sqlalchemy.orm.util import aliased
from sqlalchemy.sql.expression import exists, and_, over
from sqlalchemy.sql.functions import func

validate_outing_create = make_validator_create(
    fields_outing, 'activities', activities)
validate_outing_update = make_validator_update(
    fields_outing, 'activities', activities)
validate_associations_create = functools.partial(
    validate_associations, OUTING_TYPE, True)
validate_associations_update = functools.partial(
    validate_associations, OUTING_TYPE, False)


def validate_required_associations(request):
    missing_user = False
    missing_route = False

    associations = request.validated.get('associations', None)
    if not associations:
        missing_user = True
        missing_route = True
    else:
Esempio n. 11
0
def make_validator_filename_unique(updating):
    if updating:
        def f(request, **kwargs):
            image = request.validated
            check_filename_unique(image, request, updating=True)
    else:
        def f(request, **kwargs):
            image = request.validated
            check_filename_unique(image, request, updating=False)
    return f


base_validate_image_create = make_validator_create(
        fields_image.get('required'))
base_validate_image_update = make_validator_update(
        fields_image.get('required'))
validate_filename_create = make_validator_filename_unique(updating=False)
validate_filename_update = make_validator_filename_unique(updating=True)


def validate_image_create(request, **kwargs):
    base_validate_image_create(request, **kwargs)
    validate_filename_create(request, **kwargs)


def validate_image_update(request, **kwargs):
    base_validate_image_update(request, **kwargs)
    validate_filename_update(request, **kwargs)


validate_associations_create = functools.partial(
Esempio n. 12
0
                                        schema_update_topo_map, MAP_TYPE)
from c2corg_api.models.topo_map_association import update_map
from c2corg_api.views.document_info import DocumentInfoRest
from c2corg_api.views.document_schemas import topo_map_documents_config
from c2corg_common.fields_topo_map import fields_topo_map
from cornice.resource import resource, view
from cornice.validators import colander_body_validator

from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param, validate_lang

validate_map_create = make_validator_create(fields_topo_map.get('required'))
validate_map_update = make_validator_update(fields_topo_map.get('required'))


@resource(collection_path='/maps', path='/maps/{id}', cors_policy=cors_policy)
class TopoMapRest(DocumentRest):
    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(MAP_TYPE, topo_map_documents_config)

    @view(validators=[validate_id, validate_lang_param])
    def get(self):
        return self._get(TopoMap, schema_topo_map)

    @restricted_json_view(
        schema=schema_topo_map,
        validators=[colander_body_validator, validate_map_create],
Esempio n. 13
0
from c2corg_api.models.common.fields_article import fields_article
from cornice.resource import resource, view
from cornice.validators import colander_body_validator
from c2corg_api.views import set_creator as set_creator_on_documents

from c2corg_api.views.document_schemas import article_documents_config
from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param, \
    validate_associations, validate_lang, validate_version_id, \
    validate_cook_param

validate_article_create = make_validator_create(fields_article.get('required'))
validate_article_update = make_validator_update(fields_article.get('required'))
validate_associations_create = functools.partial(validate_associations,
                                                 ARTICLE_TYPE, True)
validate_associations_update = functools.partial(validate_associations,
                                                 ARTICLE_TYPE, False)


@resource(collection_path='/articles',
          path='/articles/{id}',
          cors_policy=cors_policy)
class ArticleRest(DocumentRest):
    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(ARTICLE_TYPE, article_documents_config)

    @view(validators=[validate_id, validate_lang_param, validate_cook_param])
Esempio n. 14
0
from c2corg_api.views.document_info import DocumentInfoRest
from c2corg_api.views.document_version import DocumentVersionRest
from c2corg_common.fields_book import fields_book
from cornice.resource import resource, view
from cornice.validators import colander_body_validator

from c2corg_api.views.document_schemas import book_documents_config
from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param, \
    validate_associations, validate_lang, validate_version_id

validate_book_create = make_validator_create(fields_book.get('required'))
validate_book_update = make_validator_update(fields_book.get('required'))
validate_associations_create = functools.partial(validate_associations,
                                                 BOOK_TYPE, True)
validate_associations_update = functools.partial(validate_associations,
                                                 BOOK_TYPE, False)


@resource(collection_path='/books',
          path='/books/{id}',
          cors_policy=cors_policy)
class BookRest(DocumentRest):
    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(BOOK_TYPE, book_documents_config)

    @view(validators=[validate_id, validate_lang_param])
Esempio n. 15
0
    validate_lang_param,
    validate_preferred_lang_param,
    validate_associations,
)
from c2corg_common.fields_waypoint import fields_waypoint
from c2corg_common.attributes import waypoint_types
from sqlalchemy.orm import joinedload, load_only
from sqlalchemy.orm.util import aliased
from sqlalchemy.sql.elements import literal_column
from sqlalchemy.sql.expression import and_, union

# the number of routes that are included for waypoints
NUM_ROUTES = 30

validate_waypoint_create = make_validator_create(fields_waypoint, "waypoint_type", waypoint_types)
validate_waypoint_update = make_validator_update(fields_waypoint, "waypoint_type", waypoint_types)
validate_associations_create = functools.partial(validate_associations, WAYPOINT_TYPE, True)
validate_associations_update = functools.partial(validate_associations, WAYPOINT_TYPE, False)


@resource(collection_path="/waypoints", path="/waypoints/{id}", cors_policy=cors_policy)
class WaypointRest(DocumentRest):
    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        """
        Get a list of documents, optionally matching search filters.
        If no search filters are given, the documents are directly queried
        from the database. If not, ElasticSearch is used to find the documents
        that match the filters.

        Request:
Esempio n. 16
0
from c2corg_api.models.schema_utils import restrict_schema
from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update, make_schema_adaptor, get_all_fields, \
    NUM_RECENT_OUTINGS
from c2corg_api.views import cors_policy, restricted_json_view, \
    get_best_locale, to_json_dict, set_best_locale
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang, validate_version_id, validate_lang_param, \
    validate_preferred_lang_param, validate_associations
from c2corg_common.fields_route import fields_route
from c2corg_common.attributes import activities
from sqlalchemy.orm import load_only, joinedload

validate_route_create = make_validator_create(
    fields_route, 'activities', activities)
validate_route_update = make_validator_update(
    fields_route, 'activities', activities)
validate_associations_create = functools.partial(
    validate_associations, ROUTE_TYPE, True)
validate_associations_update = functools.partial(
    validate_associations, ROUTE_TYPE, False)


def validate_main_waypoint(is_on_create, request):
    """ Check that the document given as main waypoint is also listed as
    association.
    """
    doc = request.validated if is_on_create else \
        request.validated.get('document', {})
    main_waypoint_id = doc.get('main_waypoint_id', None)

    if not main_waypoint_id:
Esempio n. 17
0
from cornice.validators import colander_body_validator
from c2corg_api.views import set_creator as set_creator_on_documents

from c2corg_api.views.document_schemas import xreport_documents_config
from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view, \
    set_private_cache_header
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param, \
    validate_associations, validate_lang, validate_version_id

from pyramid.httpexceptions import HTTPForbidden

validate_xreport_create = make_validator_create(fields_xreport.get('required'))
validate_xreport_update = make_validator_update(fields_xreport.get('required'))
validate_associations_create = functools.partial(
    validate_associations, XREPORT_TYPE, True)
validate_associations_update = functools.partial(
    validate_associations, XREPORT_TYPE, False)


@resource(collection_path='/xreports', path='/xreports/{id}',
          cors_policy=cors_policy)
class XreportRest(DocumentRest):

    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(XREPORT_TYPE, xreport_documents_config)

    @view(validators=[validate_id, validate_lang_param])
Esempio n. 18
0
from c2corg_api.models.area import schema_area, Area, schema_update_area, \
    schema_listing_area, AREA_TYPE
from c2corg_api.models.area_association import update_area
from c2corg_api.models.document import UpdateType
from c2corg_common.fields_area import fields_area
from cornice.resource import resource, view

from c2corg_api.views.document import DocumentRest, make_validator_create, \
    make_validator_update
from c2corg_api.views import cors_policy, restricted_json_view
from c2corg_api.views.validation import validate_id, validate_pagination, \
    validate_lang_param, validate_preferred_lang_param
from pyramid.httpexceptions import HTTPBadRequest

validate_area_create = make_validator_create(fields_area.get('required'))
validate_area_update = make_validator_update(fields_area.get('required'))


@resource(collection_path='/areas', path='/areas/{id}',
          cors_policy=cors_policy)
class AreaRest(DocumentRest):

    @view(validators=[validate_pagination, validate_preferred_lang_param])
    def collection_get(self):
        return self._collection_get(
            Area, schema_listing_area, AREA_TYPE, include_areas=False)

    @view(validators=[validate_id, validate_lang_param])
    def get(self):
        return self._get(Area, schema_area, include_areas=False)