Ejemplo n.º 1
0
class Category(ExtSchema):
    id = fields.String()
    name = TranslatedStr()
    title = TranslatedStr()
    description = TranslatedStr()
    image_url = fields.String()
    code = fields.String()
Ejemplo n.º 2
0
class DatasetApiAttrs(ObjectAttrs):
    title = TranslatedStr()
    slug = TranslatedStr()
    notes = TranslatedStr()
    category = fields.Nested(DatasetCategoryAttr, many=False)
    formats = fields.List(fields.String)
    tags = TranslatedTagsList(TranslatedStr(), attr='tags_list')
    openness_scores = fields.List(fields.Int())
    license_condition_db_or_copyrighted = fields.String()
    license_condition_modification = fields.Boolean()
    license_condition_original = fields.Boolean()
    license_condition_responsibilities = fields.String()
    license_condition_source = fields.Boolean()
    license_condition_timestamp = fields.Boolean()
    license_name = fields.String()
    license_description = fields.String()
    update_frequency = TransUpdateFreqField()
    views_count = fields.Integer()
    url = fields.String()
    followed = fields.Boolean()
    modified = fields.DateTime()
    resource_modified = fields.DateTime()
    created = fields.DateTime()
    verified = fields.DateTime()

    class Meta:
        relationships_schema = DatasetApiRelationships
        object_type = 'dataset'
        url_template = '{api_url}/datasets/{ident}'
Ejemplo n.º 3
0
class TopLevelMeta(schemas.ExtSchema):
    language = fields.String()
    params = fields.Raw()
    path = fields.String()
    count = fields.Integer()
    relative_uri = fields.String()
    aggregations = fields.Raw()
    server_time = fields.DateTime(default=now)
Ejemplo n.º 4
0
class LicenseApiAttrs(ObjectAttrs):
    link = fields.String()
    secondLink = fields.String()
    description = fields.Nested(DescriptionSchema())
    allowed = fields.Nested(DescriptionSchema(), many=True)
    conditions = fields.Nested(DescriptionSchema(), many=True)

    class Meta:
        object_type = 'license'
        ordered = True
class Aggregation(schemas.ExtSchema):
    id = fields.String(attribute='key')
    title = fields.String(attribute='key_as_string')
    doc_count = fields.Integer()

    @pre_dump(pass_many=True)
    def prepare_data(self, data, many, **kwargs):
        if many:
            for item in data:
                item['title'] = str(item.key).upper()
            return data
Ejemplo n.º 6
0
class UpdateFrequencyAggregation(schemas.ExtSchema):
    id = fields.String(attribute='key')
    title = fields.String()
    doc_count = fields.Integer()

    @ma.pre_dump(pass_many=True)
    def prepare_data(self, data, many, **kwargs):
        if many:
            for item in data:
                item['title'] = _UPDATE_FREQUENCY.get(item.key)
        return data
Ejemplo n.º 7
0
class LicenseAggregation(schemas.ExtSchema):
    id = fields.String(attribute='key')
    title = fields.String()
    doc_count = fields.Integer()

    @ma.pre_dump(pass_many=True)
    def prepare_data(self, data, many, **kwargs):
        if many:
            for item in data:
                item['title'] = Dataset.LICENSE_CODE_TO_NAME.get(item.key)
        return data
class ErrorSchema(schemas.ExtSchema):
    id = fields.String()
    status = fields.String()
    code = fields.String()
    title = fields.String()
    detail = fields.String()
    meta = fields.Nested(ErrorMeta, many=False)
    source = fields.Nested(ErrorSource)

    class Meta:
        strict = True
        ordered = True
Ejemplo n.º 9
0
class HighValueDataAggregation(schemas.ExtSchema):
    id = fields.String(attribute='key_as_string')
    title = fields.String()
    doc_count = fields.Integer()

    @ma.post_dump(pass_many=True)
    def ensure_keys(self, data, many, **kwargs):
        val_dict = {'false': _('No'), 'true': _('Yes')}
        if many:
            values = [x['id'] for x in data]
            if 'true' not in values:
                data.append({'id': 'true', 'doc_count': 0})
            for item in data:
                item['title'] = str(val_dict.get(item['id']))
        return data
Ejemplo n.º 10
0
class CreateSubmissionAttrs(ObjectAttrs):
    applicant_email = core_fields.Email(required=False, default=None)
    author = core_fields.Str(required=False, default=None)
    title = core_fields.Str(required=True,
                            faker_type='application title',
                            example='Some App')
    url = core_fields.Url(required=True)
    notes = core_fields.Str(required=True)
    image = core_fields.Base64String(required=False,
                                     default=None,
                                     max_size=settings.IMAGE_UPLOAD_MAX_SIZE)
    datasets = core_fields.List(core_fields.Int(), required=False, default=[])
    external_datasets = core_fields.Nested(ExternalResourceSchema,
                                           required=False,
                                           default={},
                                           many=True)
    keywords = core_fields.List(core_fields.Str(), default='', required=False)
    comment = core_fields.String(required=False,
                                 description='Comment body',
                                 example='Looks unpretty',
                                 default='')

    class Meta:
        strict = True
        ordered = True
        object_type = 'application-submission'
Ejemplo n.º 11
0
class UpdateSubscriptionAttrs(core_schemas.ExtSchema):
    name = core_fields.String(description='Subscription name', example='my query 1', required=False)
    enable_notifications = core_fields.Boolean(description='Enable notifications', example=True, required=False)
    customfields = core_fields.Raw()

    class Meta:
        strict = True
        ordered = True
Ejemplo n.º 12
0
class CreateSubmissionAttrs(ObjectAttrs):
    notes = core_fields.String(description='Notes',
                               example='Lorem Ipsum',
                               required=True)

    class Meta:
        strict = True
        ordered = True
        object_type = 'submission'
class TopLevelMeta(schemas.ExtSchema):
    language = fields.String()
    params = fields.Raw()
    path = fields.String()
    count = fields.Integer()
    relative_uri = fields.String()
    aggregations = fields.Raw()
    subscription_url = fields.String()
    server_time = fields.DateTime(default=now)
    notifications = fields.Raw()

    @pre_dump
    def do_something(self, data, **kwargs):
        request = self.context['request']
        user = getattr(request, 'user', None)
        if user and user.is_authenticated:
            data['notifications'] = user.get_unread_notifications()
        return data
Ejemplo n.º 14
0
class CreateSubscriptionAttrs(core_schemas.ExtSchema):
    object_name = core_fields.String(description='Object name', example='resource', required=True,
                                     validate=validate.OneOf(choices=ALLOWED_OBJECT_NAMES,
                                                             error=_('Unsupported object name')))
    object_ident = core_fields.String(description='Object ID or query url.', example='12342',
                                      required=True)
    name = core_fields.String(description='Subscription name', example='my query 1', required=False)
    enable_notifications = core_fields.Boolean(description='Enable notifications', example=True, required=False)
    customfields = core_fields.Raw()

    class Meta:
        strict = True
        ordered = True

    @pre_load(pass_many=False)
    def ident_to_string(self, data):
        data['object_ident'] = str(data['object_ident'])
        return data
Ejemplo n.º 15
0
class CreateFeedbackAttrs(ObjectAttrs):
    opinion = core_fields.String(description='Opinion',
                                 example='like',
                                 required=True)

    class Meta:
        strict = True
        ordered = True
        object_type = 'feedback'
Ejemplo n.º 16
0
class UpdateSubscriptionAttrs(ObjectAttrs):
    name = core_fields.String(description='Subscription name',
                              example='my query 1',
                              required=False)
    customfields = core_fields.Raw()

    class Meta:
        strict = True
        ordered = True
        object_type = 'subscription'
Ejemplo n.º 17
0
class ChangeNotificationAttrs(ObjectAttrs):
    status = core_fields.String(required=True,
                                validate=validate.OneOf(
                                    choices=ALLOWED_STATUS_CHOICES,
                                    error=_('Invalid notification status')))

    class Meta:
        strict = True
        ordered = True
        object_type = 'notification'
class LaboratoryApiAttrs(ObjectAttrs):
    title = TranslatedStr()
    notes = TranslatedStr()
    event_type = fields.String()
    execution_date = fields.Date()
    reports = fields.Nested(ReportSchema, many=True)

    class Meta:
        object_type = 'Laboratory'
        url_template = '{api_url}/laboratories/{ident}'
        model = 'laboratory.LabEvent'
Ejemplo n.º 19
0
class CreateDatasetSubmissionAttrs(ObjectAttrs):
    title = core_fields.String(description='Name',
                               example='Lorem Ipsum',
                               required=True)
    notes = core_fields.String(description='Description',
                               example='Lorem Ipsum',
                               required=True)
    organization_name = core_fields.String(description='Organization',
                                           example='ACME',
                                           required=False)
    data_link = core_fields.URL(description='Link to data',
                                example='https://dane.gov.pl',
                                required=False)
    potential_possibilities = core_fields.String(
        description='potential possibilities', example='none', required=False)

    class Meta:
        strict = True
        ordered = True
        object_type = 'submission'
Ejemplo n.º 20
0
class CreateCommentAttrs(ObjectAttrs):
    comment = core_fields.String(required=True, description='Comment body', example='Looks unpretty')

    @validates('comment')
    def validate_comment(self, comment):
        if len(comment) < 3:
            raise ValidationError(_('Comment must be at least 3 characters long'))

    class Meta:
        strict = True
        ordered = True
        object_type = 'comment'
class ExtAggregation(schemas.ExtSchema):
    id = fields.String()
    title = fields.String()
    doc_count = fields.Integer()

    @pre_dump(pass_many=True)
    def prepare_data(self, data, **kwargs):
        _meta_cls = getattr(self, 'Meta')
        if _meta_cls:
            model_str = getattr(_meta_cls, 'model')
            field_name = getattr(_meta_cls, 'title_field', 'name')
            if model_str:
                model = apps.get_model(model_str)
                _data = {item['key']: item['doc_count'] for item in data}
                data = []
                for item in model.objects.filter(pk__in=_data.keys()).values('id', field_name):
                    data.append({
                        'id': item['id'],
                        'title': item[field_name],
                        'doc_count': _data[item['id']]
                    })

        return data
Ejemplo n.º 22
0
class CreateSubscriptionAttrs(ObjectAttrs):
    object_name = core_fields.String(description='Object name',
                                     example='resource',
                                     required=True,
                                     validate=validate.OneOf(
                                         choices=ALLOWED_OBJECT_NAMES,
                                         error=_('Unsupported object name')))
    object_ident = core_fields.String(description='Object ID or query url.',
                                      example='12342',
                                      required=True)
    name = core_fields.String(description='Subscription name',
                              example='my query 1',
                              required=False)
    customfields = core_fields.Raw()

    @pre_load
    def prepare_data(self, data, **kwargs):
        object_ident = data.get('object_ident')
        data['object_ident'] = str(object_ident) if object_ident else None
        object_name = data.get('object_name')
        if object_name and isinstance(object_name, str):
            data['object_name'] = object_name.lower()
        return data

    @validates_schema
    def validate_url(self, data, **kwargs):
        if data['object_name'] == 'query':
            url_split = urlsplit(data['object_ident'])
            api_split = urlsplit(settings.API_URL)
            if url_split.scheme != api_split.scheme or url_split.netloc != api_split.netloc:
                raise ValidationError(_('Invalid url address'),
                                      field_name='object_ident')

    class Meta:
        object_type = 'subscription'
        strict = True
        ordered = True
Ejemplo n.º 23
0
class DatasetApiAttrs(ObjectAttrs, HighlightObjectMixin):
    title = TranslatedStr()
    slug = TranslatedStr()
    notes = TranslatedStr()
    categories = fields.Nested(DatasetCategoryAttr, many=True)
    category = fields.Nested(DatasetCategoryAttr, many=False)
    formats = fields.List(fields.String())
    types = fields.List(fields.String())
    keywords = KeywordsList(TranslatedStr())
    openness_scores = fields.List(fields.Int())
    license_chosen = fields.Integer()
    license_condition_db_or_copyrighted = fields.String()
    license_condition_personal_data = fields.String()
    license_condition_modification = fields.Boolean()
    license_condition_original = fields.Boolean()
    license_condition_responsibilities = fields.String()
    license_condition_source = fields.Boolean()
    license_condition_timestamp = fields.Boolean()
    license_name = fields.String()
    license_description = fields.String()
    update_frequency = TransUpdateFreqField()
    views_count =\
        fields.Function(
            lambda obj: obj.computed_views_count if is_enabled('S16_new_date_counters.be') else obj.views_count)
    downloads_count =\
        fields.Function(
            lambda obj: obj.computed_downloads_count if is_enabled('S16_new_date_counters.be') else obj.downloads_count)
    url = fields.String()
    followed = fields.Boolean()
    modified = fields.DateTime()
    resource_modified = fields.DateTime()
    created = fields.DateTime()
    verified = fields.DateTime()
    visualization_types = ListWithoutNoneStrElement(fields.Str())
    source = fields.Nested(SourceSchema)
    image_url = fields.Str()
    image_alt = TranslatedStr()
    if is_enabled('S35_high_value_data.be'):
        has_high_value_data = fields.Boolean()
    if is_enabled('S37_resources_admin_region_data.be'):
        regions = fields.Nested(RegionSchema, many=True)

    class Meta:
        relationships_schema = DatasetApiRelationships
        object_type = 'dataset'
        url_template = '{api_url}/datasets/{ident}'
        model = 'datasets.Dataset'
Ejemplo n.º 24
0
class SubscriptionAttrs(ObjectAttrs):
    email = core_fields.Email(required=True)
    newsletter_subscription_info = core_fields.String(
        description='Human readable subscription status',
        example='Your subscription is active',
        required=False)
    is_active = core_fields.Boolean(
        description='Is newsletter subscription active?',
        example=True,
        required=False)

    class Meta:
        object_type = 'subscription'
        strict = True
        ordered = True
Ejemplo n.º 25
0
class CreateSubmissionAttrs(ObjectAttrs):
    applicant_email = core_fields.Email(required=False, default=None)
    author = core_fields.Str(required=False, default=None)
    title = core_fields.Str(required=True,
                            faker_type='application title',
                            example='Some App')
    url = core_fields.Url(required=True)
    notes = core_fields.Str(required=True)
    image = core_fields.Base64String(required=False,
                                     default=None,
                                     max_size=settings.IMAGE_UPLOAD_MAX_SIZE)
    illustrative_graphics = core_fields.Base64String(
        required=False, default=None, max_size=settings.IMAGE_UPLOAD_MAX_SIZE)
    image_alt = core_fields.Str(required=False, default=None)
    datasets = core_fields.List(core_fields.Str(), required=False, default=[])
    external_datasets = core_fields.Nested(ExternalResourceSchema,
                                           required=False,
                                           default={},
                                           many=True)
    keywords = core_fields.List(core_fields.Str(), default='', required=False)
    comment = core_fields.String(required=False,
                                 description='Comment body',
                                 example='Looks unpretty',
                                 default='')
    is_personal_data_processing_accepted = core_fields.Boolean(required=True)
    is_terms_of_service_accepted = core_fields.Boolean(required=True)

    class Meta:
        strict = True
        ordered = True
        object_type = 'application-submission'

    @pre_load
    def prepare_data(self, data, **kwargs):
        data['datasets'] = [
            x.replace('dataset-', '') for x in data.get('datasets', []) if x
        ]
        return data

    @validates('is_personal_data_processing_accepted')
    def validate_is_personal_data_processing_accepted(self, value):
        if not value:
            raise ValidationError(_('This field is required'))

    @validates('is_terms_of_service_accepted')
    def validate_is_terms_of_service_accepted(self, value):
        if not value:
            raise ValidationError(_('This field is required'))
Ejemplo n.º 26
0
class Object(schemas.ExtSchema):
    OPTIONS_CLASS = ObjectOpts
    _type = fields.String(required=True, data_key='type')

    def __init__(
            self, only=None, exclude=(), many=False, context=None,
            load_only=(), dump_only=(), partial=False, unknown=None,
    ):
        self._declared_fields['attributes'] = fields.Nested(
            self.opts.attrs_schema, name='attributes', many=False
        )

        # relationships_schema = getattr(self.opts.attrs_schema.opts, 'relationships_schema', None)
        #
        # if relationships_schema:
        #     self._declared_fields['relationships'] = fields.Nested(relationships_schema, many=False,
        #                                                            name='relationships')

        super().__init__(only=only, exclude=exclude, many=many, context=context,
                         load_only=load_only, dump_only=dump_only,
                         partial=partial, unknown=unknown)
Ejemplo n.º 27
0
class SparqlRequestAttrs(ObjectAttrs):
    q = core_fields.String(required=True,
                           description='Sparql query',
                           example='Looks unpretty')
    format = core_fields.Str(
        required=True,
        validate=validate.OneOf(
            choices=SPARQL_FORMAT_CHOICES,
            error=_('Unsupported format. Supported are: %(formats)s') %
            {'formats': ', '.join(SPARQL_FORMAT_CHOICES)}))
    page = core_fields.Int()
    per_page = core_fields.Int()
    external_sparql_endpoint = core_fields.Str(validate=validate.OneOf(
        choices=SPARQL_ENDPOINTS,
        error=
        _('Unsupported SPARQL endpoint value. Supported values are: %(providers)s'
          ) % {'providers': ', '.join(SPARQL_ENDPOINTS)},
    ),
                                               allow_none=True)

    class Meta:
        strict = True
        ordered = True
        object_type = 'sparql'
Ejemplo n.º 28
0
class NewsletterRulesAttrs(ObjectAttrs):
    personal_data_processing = core_fields.String()
    personal_data_use = core_fields.String()
    personal_data_use_rules = core_fields.String()
class RelationshipLinks(schemas.ExtSchema):
    related = fields.String(required=True)
class RelationshipData(schemas.ExtSchema):
    id = fields.String(required=True)
    _type = fields.String(required=True, data_key='type')