コード例 #1
0
class ResourceApiAttrs(ObjectAttrs, HighlightObjectMixin):
    title = TranslatedStr()
    description = TranslatedStr()
    category = fields.Str()
    format = fields.Str()
    media_type = fields.Str(
        attribute='type'
    )  # https://jsonapi.org/format/#document-resource-object-fields
    visualization_types = ListWithoutNoneStrElement(fields.Str())
    downloads_count =\
        fields.Function(
            lambda obj: obj.computed_downloads_count if is_enabled('S16_new_date_counters.be') else obj.downloads_count)
    openness_score = fields.Integer()
    views_count =\
        fields.Function(
            lambda obj: obj.computed_views_count if is_enabled('S16_new_date_counters.be') else obj.views_count)
    modified = fields.DateTime()
    created = fields.DateTime()
    verified = fields.DateTime()
    data_date = fields.Date()
    file_url = fields.Str()
    file_size = fields.Integer()
    csv_file_url = fields.Str()
    csv_file_size = fields.Integer()
    jsonld_file_url = fields.Str()
    jsonld_file_size = fields.Integer()
    jsonld_download_url = fields.Str()
    download_url = fields.Str()
    csv_download_url = fields.Str()
    link = fields.Str()
    data_special_signs = fields.Nested(SpecialSignSchema,
                                       data_key='special_signs',
                                       many=True)
    is_chart_creation_blocked = fields.Bool()
    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.Method('get_regions')
    if is_enabled('S40_new_file_model.be'):
        files = fields.Method('get_files')

    class Meta:
        relationships_schema = ResourceApiRelationships
        object_type = 'resource'
        api_path = 'resources'
        url_template = '{api_url}/resources/{ident}'
        model = 'resources.Resource'

    def get_regions(self, res):
        return RegionSchema(many=True).dump(
            getattr(res, 'all_regions', res.regions))

    def get_files(self, res):
        return ResourceFileSchema(many=True).dump(
            getattr(res, 'all_files', res.files))
コード例 #2
0
ファイル: serializers.py プロジェクト: horosin/mcod-backend
class ResourceCSVSchema(CSVSerializer):
    id = fields.Integer(data_key=_('id'), required=True)
    uuid = fields.Str(data_key=_("uuid"), default='')
    title = fields.Str(data_key=_("title"), default='')
    description = fields.Str(data_key=_("description"), default='')
    link = fields.Str(data_key=_("link"), default='')
    link_is_valid = fields.Str(data_key=_("link_is_valid"), default='')
    file_is_valid = fields.Str(data_key=_("file_is_valid"), default='')
    data_is_valid = fields.Str(data_key=_("data_is_valid"), default='')
    format = fields.Str(data_key=_("format"), default='')
    dataset = fields.Str(attribute='dataset.title',
                         data_key=_("dataset"),
                         default='')
    status = fields.Str(data_key=_("status"), default='')
    created_by = fields.Int(attribute='created_by.id',
                            data_key=_("created_by"),
                            default=None)
    created = fields.DateTime(data_key=_("created"), default=None)
    modified_by = fields.Int(attribute='modified_by.id',
                             data_key=_("modified_by"),
                             default=None)
    modified = fields.DateTime(data_key=_("modified"), default=None)
    resource_type = fields.Str(attribute='type',
                               data_key=_("type"),
                               default='')
    openness_score = fields.Int(data_key=_("openness_score"), default=None)
    views_count = fields.Int(data_key=_("views_count"), default=None)
    downloads_count = fields.Int(data_key=_("downloads_count"), default=None)

    class Meta:
        ordered = True
        model = 'resources.Resource'
コード例 #3
0
class ApplicationApiAttrs(ObjectAttrs, HighlightObjectMixin):
    slug = TranslatedStr()
    title = TranslatedStr()
    notes = TranslatedStr()
    author = fields.Str(faker_type='firstname')
    url = fields.Str(faker_type='url')
    image_url = fields.Str(faker_type='image_url')
    image_thumb_url = fields.Str(faker_type='image_thumb_url')
    image_alt = TranslatedStr()
    illustrative_graphics_url = fields.Str()
    illustrative_graphics_alt = TranslatedStr()
    followed = fields.Boolean(faker_type='boolean')
    keywords = KeywordsList(TranslatedStr(), faker_type='tagslist')
    views_count = fields.Integer(faker_type='integer')
    modified = fields.Str(faker_type='datetime')
    created = fields.Str(faker_type='datetime')
    has_image_thumb = fields.Bool()
    main_page_position = fields.Int()
    external_datasets = fields.Nested(ExternalDataset, many=True)

    class Meta:
        relationships_schema = ApplicationApiRelationships
        object_type = 'application'
        url_template = '{api_url}/applications/{ident}'
        model = 'applications.Application'
コード例 #4
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)
コード例 #5
0
class SearchCounterAggregation(ExtSchema):
    datasets = fields.Integer()
    resources = fields.Integer()
    showcases = fields.Integer()
    applications = fields.Integer()
    institutions = fields.Integer()
    articles = fields.Integer()
    knowledge_base = fields.Integer()
コード例 #6
0
class InstitutionCSVSchema(CSVSerializer):
    id = fields.Integer(data_key=_('id'), required=True)
    title = fields.Str(data_key=_("Title"), default='')
    institution_type = fields.Str(data_key=_("Institution type"), default='')
    datasets_count = fields.Int(data_key=_("The number of datasets"),
                                default=None)

    class Meta:
        ordered = True
        model = 'organizations.Organization'
コード例 #7
0
class ShowcaseApiAttrs(ObjectAttrs, HighlightObjectMixin):
    category = fields.Str()
    category_name = fields.Method('get_category_name')
    slug = TranslatedStr()
    title = TranslatedStr()
    notes = TranslatedStr()
    author = fields.Str(faker_type='firstname')
    url = fields.Str(faker_type='url')
    image_url = fields.Str(faker_type='image_url')
    image_thumb_url = fields.Str(faker_type='image_thumb_url')
    image_alt = TranslatedStr()
    illustrative_graphics_url = fields.Str()
    illustrative_graphics_alt = TranslatedStr()
    followed = fields.Boolean(faker_type='boolean')
    keywords = KeywordsList(TranslatedStr(), faker_type='tagslist')
    views_count = fields.Integer(faker_type='integer')
    modified = fields.Str(faker_type='datetime')
    created = fields.Str(faker_type='datetime')
    has_image_thumb = fields.Bool()
    main_page_position = fields.Int()
    external_datasets = fields.Nested(ExternalDataset, many=True)
    # application showcase fields:
    is_mobile_app = fields.Bool()
    is_mobile_app_name = fields.Method('get_is_mobile_app_name')
    is_desktop_app = fields.Bool()
    is_desktop_app_name = fields.Method('get_is_desktop_app_name')
    mobile_apple_url = fields.URL()
    mobile_google_url = fields.URL()
    desktop_linux_url = fields.URL()
    desktop_macos_url = fields.URL()
    desktop_windows_url = fields.URL()

    license_type = fields.Str()
    license_type_name = fields.Method('get_license_type_name')
    # api use showcase fields:
    file_url = fields.Str()

    class Meta:
        relationships_schema = ShowcaseApiRelationships
        object_type = 'showcase'
        url_template = '{api_url}/showcases/{ident}'
        model = 'showcases.Showcase'
        ordered = True

    def get_is_desktop_app_name(self, obj):
        return str(_('Desktop App')) if obj.is_desktop_app else ''

    def get_is_mobile_app_name(self, obj):
        return str(_('Mobile App')) if obj.is_mobile_app else ''

    def get_category_name(self, obj):
        return str(Showcase.CATEGORY_NAMES.get(obj.showcase_category, ''))

    def get_license_type_name(self, obj):
        return str(Showcase.LICENSE_TYPE_NAMES.get(obj.license_type, ''))
コード例 #8
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
コード例 #9
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
コード例 #10
0
class ResourceXMLSerializer(schemas.ExtSchema):
    id = fields.Integer()
    access_url = fields.Url(attribute='frontend_absolute_url')
    title = TranslatedStr()
    description = TranslatedStr()
    openness_score = fields.Integer()
    format = fields.Str()
    views_count = fields.Int(attribute='computed_views_count')
    downloads_count = fields.Int(attribute='computed_downloads_count')
    created = fields.DateTime(format='iso8601')
    data_date = fields.Date()
    type = fields.Function(lambda resource: resource.get_type_display())
    file_size = fields.Function(lambda obj: sizeof_fmt(obj.file_size)
                                if obj.file_size else '')

    visualization_types = ListWithoutNoneStrElement(fields.Str())
    download_url = fields.Str()
    data_special_signs = fields.Nested(SpecialSignSchema,
                                       data_key='special_signs',
                                       many=True)
コード例 #11
0
class DatasetXMLSerializer(ExtSchema):
    id = fields.Integer()
    url = fields.Url(attribute='frontend_absolute_url')
    title = TranslatedStr()
    notes = TranslatedStr()
    keywords = fields.Function(lambda dataset: (
        tag.name for tag in getattr(dataset, f'tags_{get_language()}')))
    categories = fields.Nested(DatasetCategoryAttr, many=True)
    update_frequency = TransUpdateFreqField()
    created = fields.DateTime()
    verified = fields.DateTime()
    views_count = fields.Int(attribute='computed_views_count')
    downloads_count = fields.Int(attribute='computed_downloads_count')
    published_resources_count = fields.Int(
        attribute='published_resources__count')
    license = fields.Str(attribute='license_name')
    conditions = fields.Method('get_conditions')
    organization = fields.Method('get_organization')
    resources = fields.Method('get_resources')

    source = fields.Nested(SourceXMLSchema)

    def get_conditions(self, dataset):
        conditions = _(
            'This dataset is public information, it can be reused under the following conditions: '
        )
        terms = [
            str(
                dataset._meta.get_field(
                    'license_condition_modification').verbose_name)
            if dataset.license_condition_modification else '',
            str(
                dataset._meta.get_field('license_condition_source').
                verbose_name) if dataset.license_condition_source else '',
            dataset.license_condition_db_or_copyrighted,
            dataset.license_condition_personal_data
        ]
        return conditions + '\n'.join([term for term in terms if term])

    def get_organization(self, dataset):
        context = {
            'published_datasets_count':
            dataset.organization_published_datasets__count,
            'published_resources_count':
            dataset.organization_published_resources__count,
        }
        return InstitutionXMLSerializer(many=False, context=context).dump(
            dataset.organization)

    def get_resources(self, dataset):
        return ResourceXMLSerializer(many=True).dump(
            dataset.published_resources)
コード例 #12
0
ファイル: serializers.py プロジェクト: horosin/mcod-backend
class ResourceApiAttrs(ObjectAttrs):
    title = TranslatedStr()
    description = TranslatedStr()
    category = fields.Str()
    format = fields.Str()
    media_type = fields.Str()
    downloads_count = fields.Integer()
    openness_score = fields.Integer()
    views_count = fields.Integer()
    modified = fields.DateTime()
    created = fields.DateTime()
    verified = fields.DateTime()
    data_date = fields.Date()
    file_url = fields.Str()
    download_url = fields.Str()
    link = fields.Str()
    file_size = fields.Integer()

    class Meta:
        relationships_schema = ResourceApiRelationships
        object_type = 'resource'
        api_path = 'resources'
        url_template = '{api_url}/resources/{ident}'
コード例 #13
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
コード例 #14
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'
コード例 #15
0
class ArticleApiAttrs(ObjectAttrs, HighlightObjectMixin):
    slug = TranslatedStr()
    title = TranslatedStr()
    notes = TranslatedStr()
    author = fields.Str(faker_type='firstname')
    keywords = KeywordsList(TranslatedStr(), faker_type='tagslist')
    views_count = fields.Integer(faker_type='integer')
    followed = fields.Boolean()
    modified = fields.Str(faker_type='datetime')
    created = fields.Str(faker_type='datetime')
    license = fields.Nested(ArticleLicense, many=False)
    category = fields.Nested(ArticleCategory, many=False)

    class Meta:
        relationships_schema = ArticleApiRelationships
        object_type = 'article'
        url_template = '{api_url}/articles/{ident}'
        model = 'articles.Article'
コード例 #16
0
class ResponseMeta(schemas.ExtSchema):
    server_time = fields.DateTime(missing=datetime.now(), default=datetime.now())
    language = fields.Str(required=True, missing='en', default='en')
    # params = fields.Dict(required=True, nullable=True)
    path = fields.Str(required=True)
    relative_uri = fields.Str(required=True)
    count = fields.Integer()

    def __init__(
            self, only=None, exclude=(), many=False, context=None,
            load_only=(), dump_only=(), partial=False, unknown=None,
    ):
        super().__init__(only=only, exclude=exclude, many=many, context=context,
                         load_only=load_only, dump_only=dump_only,
                         partial=partial, unknown=unknown)
        many = self.context.get('many', False)
        if many:
            self.fields['count'] = fields.Int(required=True, missing=0, default=0)

        _meta = getattr(self, 'Meta', None)
        aggs_cls = getattr(_meta, 'aggregations_cls', None)

        self.fields['aggregations'] = fields.Nested(aggs_cls, name='aggregations',
                                                    required=False) if aggs_cls else fields.Dict(nullable=True)
コード例 #17
0
class GeoTileAggregation(schemas.ExtSchema):
    tile_name = fields.String()
    doc_count = fields.Integer()
    shapes = fields.Nested(GeoShapeObject, many=True)
    centroid = fields.List(fields.Float)
コード例 #18
0
class ExtLinksMeta(schemas.ExtSchema):
    count = fields.Integer()

    class Meta:
        nullable = True
コード例 #19
0
class Aggregation(schemas.ExtSchema):
    key = fields.Raw()
    title = fields.String()
    doc_count = fields.Integer()
コード例 #20
0
class ResourceFileSchema(ExtSchema):
    file_size = fields.Integer()
    download_url = fields.Str()
    format = fields.Str()
    openness_score = fields.Integer()
コード例 #21
0
ファイル: serializers.py プロジェクト: horosin/mcod-backend
class TableApiAttrsMeta(ObjectAttrsMeta):
    updated_at = fields.DateTime()
    row_no = fields.Integer()
コード例 #22
0
class ShowcaseAggregationMixin(ExtSchema):
    id = fields.String(attribute='key')
    title = fields.String()
    doc_count = fields.Integer()