class CourseModuleSchema(ObjectAttrs):
    id = fields.Int()
    type = fields.Str()
    type_name = fields.Str()
    start = fields.Date()
    end = fields.Date()

    class Meta:
        ordered = True
class UserSchemaMixin(object):
    state = fields.Str(
        required=True,
        faker_type='userstate',
        example='active',
        description="Allowed values: 'active', 'inactive' or 'blocked'")
    email = fields.Email(required=True,
                         faker_type='email',
                         example='*****@*****.**')
    fullname = fields.Str(missing=None,
                          faker_type='name',
                          example='Jan Kowalski')
    about = fields.Str(missing=None,
                       faker_type='sentence',
                       example='I am a very talented programmer.')
    created = fields.Date()
    subscriptions_report_opt_in = fields.Boolean()
    rodo_privacy_policy_opt_in = fields.Boolean()
    count_datasets_created = fields.Int()
    count_datasets_modified = fields.Int()

    @post_dump
    def prepare_data(self, data, **kwargs):
        data['subscriptions_report_opt_in'] = True if data.get(
            'subscriptions_report_opt_in') is not None else False
        data['rodo_privacy_policy_opt_in'] = True if data.get(
            'rodo_privacy_policy_opt_in') is not None else False
        return data
class MeetingApiAttrs(ObjectAttrs):
    title = fields.Str()
    venue = fields.Str()
    description = fields.Str()
    start_date = fields.Date()
    start_time = fields.Str()
    end_time = fields.Str()
    materials = fields.Nested(MeetingFileSchema, many=True)
    state = fields.Str()
    state_name = fields.Str()

    class Meta:
        object_type = 'meeting'
        api_path = 'meetings'
        model = 'users.Meeting'
        ordered = True

    @staticmethod
    def self_api_url(data):
        return None

    @pre_dump
    def prepare_data(self, data, **kwargs):
        today = timezone.now().date()
        start_date = data.start_date.date()
        _state = None
        if start_date < today:
            _state = 'finished'
        elif start_date >= today:
            _state = 'planned'
        if _state:
            setattr(data, 'state', _state)
            setattr(data, 'state_name', Meeting.MEETING_STATES.get(_state))
        return data
class ScheduleApiAttrs(ObjectAttrs):
    start_date = fields.Date()
    period_name = fields.Str()
    end_date = fields.Date()
    new_end_date = fields.Date()
    link = fields.Url()
    state = fields.Str()
    is_blocked = fields.Bool()
    name = fields.Str()
    total_agents_count = fields.Int()

    class Meta:
        relationships_schema = ScheduleApiRelationships
        object_type = 'schedule'
        url_template = '{api_url}/auth/schedules/{ident}'
        ordered = True
        model = 'schedules.Schedule'
class DatasetSubmissionCSVSerializer(CSVSerializer):
    id = fields.Int(data_key='id', required=True, example=77)
    title = fields.Str(data_key=_('Title'), example='Propozycja nowych danych')
    notes = fields.Str(data_key=_('Notes'), default='', example='opis...')
    organization_name = fields.Str(data_key=_('Institution name'), default='', example='Ministerstwo Cyfryzacji')
    data_link = fields.Str(data_key=_('Link to data'), default='', example='http://example.com')
    potential_possibilities = fields.Str(data_key=_('provide potential data use'), default='', example='opis...')
    comment = fields.Str(data_key=_('Comment'), example='komentarz...', default='')
    submission_date = fields.Date(data_key=_('Submission date'))
    decision = fields.Str(data_key=_('decision'), example='accepted', default=_('Decision not taken'))
    decision_date = fields.Date(data_key=_('Decision date'), default=None)
    accepted_dataset_submission = fields.Int(
        data_key=_('accepted dataset submission'), attribute='accepted_dataset_submission.id', default=None)

    class Meta:
        ordered = True
        model = 'suggestions.DatasetSubmission'
class SubmissionAttrs(ObjectAttrs):
    title = fields.Str(required=True, example='Very important data')
    notes = fields.Str(required=True, example='We need this data to save the world')
    organization_name = fields.Str(required=False, example='ACME')
    data_link = fields.Url(required=False, example='https://duckduckgo.com')
    potential_possibilities = fields.Str(required=False)
    submission_date = fields.Date(required=True)
    decision_date = fields.Date(required=True)
    published_at = fields.DateTime(required=True)
    feedback_counters = fields.Nested(
        FeedbackCounters,
        many=False
    )
    my_feedback = fields.Str(required=False)

    class Meta:
        object_type = 'submission'
        path = 'submissions'
        url_template = '{api_url}/submissions/accepted/{ident}'
Ejemplo n.º 7
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))
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.º 9
0
class ShowcaseProposalCSVSerializer(CSVSerializer):
    id = fields.Int(data_key='id', required=True, example=77)
    category_name = fields.Str(data_key=_('Category'), example='Aplikacja')
    title = fields.Str(data_key=_('Name'), example='Propozycja aplikacji')
    notes = fields.Str(data_key=_('Notes'), default='', example='opis...')
    url = fields.Str(data_key=_('App URL'),
                     default='',
                     example='http://example.com')
    author = fields.Str(data_key=_('Author'),
                        default='',
                        example='Jan Kowalski')
    applicant_email = fields.Email(data_key=_('applicant email'),
                                   default='',
                                   required=False,
                                   example='*****@*****.**')
    keywords = fields.Str(data_key=_('keywords'),
                          attribute='keywords_as_str',
                          default='',
                          example='tag1,tag2,tag3')
    report_date = fields.Date(data_key=_('report date'))
    decision_date = fields.Date(data_key=_('decision date'), default=None)
    comment = fields.Str(data_key=_('comment'),
                         example='komentarz...',
                         default='')
    datasets = fields.Method('get_datasets',
                             data_key=_('datasets'),
                             example='998,999',
                             default='')
    external_datasets = fields.Raw(data_key=_('external datasets'),
                                   example='[]')
    showcase = fields.Int(data_key=_('Showcase'),
                          attribute='showcase.id',
                          default=None)

    class Meta:
        ordered = True
        model = 'showcases.ShowcaseProposal'

    def get_datasets(self, obj):
        return ','.join(str(x.id) for x in obj.datasets.order_by('id'))
class DatasetCommentCSVSerializer(CSVSerializer):
    id = fields.Int(data_key='id', required=True, example=77)
    title = fields.Str(data_key=_('Title'), attribute='dataset.title', example='Przykładowy zbiór danych')
    comment = fields.Str(data_key=_('text of comment'), example='Treść uwagi...')
    editor_email = fields.Str(data_key=_('editor e-mail'), example='*****@*****.**')
    data_url = fields.Str(data_key=_('comment reported for dataset'), example='http://dane.gov.pl/dataset/1')
    data_provider_url = fields.Str(data_key=_('Data provider'), example='http://dane.gov.pl/institution/1')
    editor_comment = fields.Str(data_key=_('comment'), example='Treść komentarza edytora...')
    report_date = fields.Date(data_key=_('report date'))
    is_data_provider_error = fields.Bool(data_key=_('data provider error'), example=False)
    is_user_error = fields.Bool(data_key=_('user error'), example=False)
    is_portal_error = fields.Bool(data_key=_('portal error'), example=False)
    is_other_error = fields.Bool(data_key=_('other error'), example=False)
    decision = fields.Str(data_key=_('Decision made'), example='accepted')
    decision_date = fields.Date(data_key=_('Decision date'), default='')

    class Meta:
        ordered = True
        fields = ('id', 'title', 'comment', 'editor_email', 'data_url', 'data_provider_url', 'editor_comment',
                  'report_date', 'is_data_provider_error', 'is_user_error', 'is_portal_error', 'is_other_error',
                  'decision', 'decision_date',)
        model = 'suggestions.DatasetComment'
class CourseApiAttrs(ObjectAttrs, HighlightObjectMixin):
    title = fields.Str()
    notes = fields.Str()
    participants_number = fields.Int()
    venue = fields.Str()
    start = fields.Date()
    end = fields.Date()
    file_type = fields.Str()
    file_url = fields.URL()
    materials_file_type = fields.Str()
    materials_file_url = fields.URL()
    sessions = fields.Nested(CourseModuleSchema, many=True)
    state = fields.Str()
    state_name = fields.Str()

    class Meta:
        # relationships_schema = ApplicationApiRelationships
        object_type = 'course'
        url_template = '{api_url}/courses/{ident}'
        model = 'academy.Course'

    @pre_dump
    def prepare_data(self, data, **kwargs):
        if data.start and data.end:
            today = timezone.now().date()
            start_date = data.start.date()
            end_date = data.end.date()
            _state = None
            if start_date <= today <= end_date:
                _state = 'current'
            elif end_date < today:
                _state = 'finished'
            elif today < start_date:
                _state = 'planned'
            if _state:
                setattr(data, 'state', _state)
                setattr(data, 'state_name', Course.COURSE_STATES.get(_state))
        return data
class ScheduleAttrs(ObjectAttrs):
    period_name = fields.Str(validate=validate.Length(min=1, max=100))
    end_date = fields.Date(allow_none=True)
    new_end_date = fields.Date(allow_none=True)
    link = fields.Str()
    is_blocked = fields.Bool()

    class Meta:
        object_type = 'schedule'
        strict = True
        ordered = True

    @validates('link')
    def validate_link(self, value):
        if value:
            validate.URL()(value)

    @validates_schema
    def validate_data(self, data, **kwargs):
        obj = self.context.get('obj')
        if obj and not obj.end_date and 'new_end_date' in data:
            raise ValidationError(
                _('You cannot set new_end_date if end_date is not set yet!'), field_name='new_end_date')
Ejemplo n.º 13
0
class ResourceCSVMetadataSerializer(schemas.ExtSchema):
    frontend_absolute_url = fields.Url(data_key=_('Resource URL'))
    title = TranslatedStr(data_key=_('Resource title'), default='')
    description = TranslatedStr(data_key=_('Resource description'))
    created = fields.DateTime(data_key=_('Resource created'), format='iso8601')
    data_date = fields.Date(data_key=_('Data date'))
    openness_score = fields.Int(data_key=_('Openness score'))
    resource_type = fields.Function(lambda obj: obj.get_type_display(),
                                    data_key=_('Type'))
    format = fields.Str(data_key=_('File format'), default='')
    file_size = fields.Function(lambda obj: sizeof_fmt(obj.file_size)
                                if obj.file_size else '',
                                data_key=_('File size'))
    views_count = fields.Int(attribute='computed_views_count',
                             data_key=_("Resource views count"))
    downloads_count = fields.Int(attribute='computed_downloads_count',
                                 data_key=_("Resource downloads count"))
    has_table = fields.Function(lambda obj: _('YES')
                                if obj.has_table else _('NO'),
                                data_key=_('Table'))
    has_chart = fields.Function(lambda obj: _('YES')
                                if obj.has_chart else _('NO'),
                                data_key=_('Map'))
    has_map = fields.Function(lambda obj: _('YES') if obj.has_map else _('NO'),
                              data_key=_('Chart'))
    download_url = fields.Url(data_key=_('Download URL'))
    data_special_signs = fields.Nested(SpecialSignSchema,
                                       data_key=_('special signs'),
                                       many=True)

    @ma.post_dump(pass_many=False)
    def prepare_nested_data(self, data, **kwargs):
        special_signs = data.get(_('special signs'))
        signs_str = '\n'.join([
            '{name_label}: {name}, {symbol_label}: "{symbol}", {desc_label}: {desc}'
            .format(name=sign['name'],
                    name_label=_('name'),
                    symbol=sign['symbol'],
                    symbol_label=_('symbol'),
                    desc=sign['description'],
                    desc_label=_('description')) for sign in special_signs
        ])
        data[_('special signs')] = signs_str
        values_with_html = [_('Resource title'), _('Resource description')]
        for attribute in values_with_html:
            data[attribute] = strip_tags(data[attribute])
        return data

    class Meta:
        ordered = True
Ejemplo n.º 14
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)
Ejemplo n.º 15
0
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}'
class UserScheduleItemApiAttrs(ObjectAttrs):
    email = fields.Email()
    institution = fields.Str(attribute='organization_name')
    institution_unit = fields.Str(attribute='organization_unit')
    dataset_title = fields.Str()
    created = fields.Date()
    format = fields.Str()
    is_new = fields.Bool()
    is_openness_score_increased = fields.Bool()
    is_quality_improved = fields.Bool()
    description = fields.Str()
    state = fields.Str()
    recommendation_state = fields.Str()
    recommendation_notes = fields.Str()
    is_recommendation_issued = fields.Bool()

    is_accepted = fields.Bool()
    is_completed = fields.Bool()
    is_resource_added = fields.Bool()
    is_resource_added_notes = fields.Str()
    resource_link = fields.Url()

    class Meta:
        relationships_schema = UserScheduleItemApiRelationships
        object_type = 'user_schedule_item'
        url_template = '{api_url}/auth/user_schedule_items/{ident}'
        ordered = True
        model = 'schedules.UserScheduleItem'

    @post_dump
    def prepare_data(self, data, **kwargs):
        request = self.context.get('request')
        user = getattr(request, 'user', None) if request else None
        if not user or not user.is_superuser:
            del data['recommendation_state']
            del data['recommendation_notes']
        return data
Ejemplo n.º 17
0
class CommonObjectApiAttrs(ObjectAttrs, HighlightObjectMixin):
    model = fields.Str()

    # common
    slug = TranslatedStr()
    title = TranslatedStr()
    notes = TranslatedStr()
    keywords = KeywordsList(TranslatedStr(), faker_type='tagslist')
    modified = fields.DateTime()
    created = fields.DateTime()
    verified = fields.DateTime()
    categories = fields.Nested(Category, many=True)
    category = fields.Nested(Category)
    if is_enabled('S35_high_value_data.be'):
        has_high_value_data = fields.Boolean()

    # datasets
    source = fields.Nested(SourceSchema)

    # resources
    data_date = fields.Date()
    visualization_types = fields.List(fields.Str())

    # applications, showcases
    author = fields.Str()
    illustrative_graphics_alt = TranslatedStr()
    illustrative_graphics_url = fields.Str()
    image_alt = TranslatedStr()
    image_thumb_url = fields.Str()
    if is_enabled('S39_showcases.be'):
        showcase_category = fields.Str()
        showcase_category_name = fields.Method('get_showcase_category_name')
        showcase_types = fields.List(fields.Str())
        showcase_platforms = fields.List(fields.Str())

    # institutions
    abbreviation = fields.Str()
    institution_type = fields.Str()
    datasets_count = fields.Int(attribute='published_datasets_count')
    resources_count = fields.Int(attribute='published_resources_count')
    fax = fields.Str()
    tel = fields.Str()
    sources = fields.Nested(DataSourceAttr, many=True)

    # cms pages
    html_url = fields.Str()

    if is_enabled('S39_filter_by_geodata.be'):
        # regions
        region_id = fields.Int()
        hierarchy_label = TranslatedStr()
        bbox = fields.List(fields.List(fields.Float),
                           attribute='bbox.coordinates')
        regions = fields.Nested(RegionSchema, many=True)

    def get_showcase_category_name(self, obj):
        val = getattr(obj, 'showcase_category', None)
        if val:
            model = apps.get_model('showcases.Showcase')
            return str(model.CATEGORY_NAMES[val])
        return missing

    @staticmethod
    def self_api_url(data):
        try:
            api_url = getattr(settings, 'API_URL', 'https://api.dane.gov.pl')
            model = data.model
            obj_id = data.id
            slug = data['slug'][get_language()]
            full_url = f'{api_url}/{model}s/{obj_id},{slug}'
        except AttributeError:
            full_url = None
        return full_url

    class Meta:
        relationships_schema = CommonObjectRelationships
        object_type = 'common'
        api_path = 'search'
Ejemplo n.º 18
0
class SearchDateRangeAggregation(ExtSchema):
    max_date = fields.Date()
    min_date = fields.Date()