Ejemplo n.º 1
0
        fields.Markdown(description='The resource markdown description'),
        'type':
        fields.String(description=('Whether the resource is an uploaded file, '
                                   'a remote file or an API'),
                      required=True,
                      enum=RESOURCE_TYPES.keys()),
        'format':
        fields.String(description='The resource format', required=True),
        'url':
        fields.String(description='The resource URL', required=True),
        'checksum':
        fields.Nested(checksum_fields,
                      allow_null=True,
                      description='A checksum to validate file validity'),
        'size':
        fields.Integer(description='The resource file size in bytes'),
        'mime':
        fields.String(description='The resource mime type'),
        'created_at':
        fields.ISODateTime(readonly=True,
                           description='The resource creation date'),
        'published':
        fields.ISODateTime(description='The resource publication date'),
        'last_modified':
        fields.ISODateTime(attribute='modified',
                           readonly=True,
                           description='The resource last modification date'),
        'metrics':
        fields.Raw(description='The resource metrics', readonly=True),
    })
Ejemplo n.º 2
0
    'page': fields.UrlFor(
        'datasets.show', lambda o: {'dataset': o},
        description='The dataset page URL', required=True, fallback_endpoint='api.dataset'),
    'quality': fields.Raw(description='The dataset quality', readonly=True),
    'last_update': fields.ISODateTime(
        description='The resources last modification date', required=True),
}, mask=DEFAULT_MASK_APIV2)


resource_page_fields = apiv2.model('ResourcePage', {
    'data': fields.List(
        fields.Nested(resource_fields, description='The dataset resources')
    ),
    'next_page': fields.String(),
    'previous_page': fields.String(),
    'page': fields.Integer(),
    'page_size': fields.Integer(),
    'total': fields.Integer()
})


@ns.route('/<dataset:dataset>/', endpoint='dataset', doc=common_doc)
@apiv2.response(404, 'Dataset not found')
@apiv2.response(410, 'Dataset has been deleted')
class DatasetAPI(API):
    @apiv2.doc('get_dataset')
    @apiv2.marshal_with(dataset_fields)
    def get(self, dataset):
        '''Get a dataset given its identifier'''
        if dataset.deleted and not DatasetEditPermission(dataset).can():
            apiv2.abort(410, 'Dataset has been deleted')
Ejemplo n.º 3
0
from .forms import CrontabTaskForm, IntervalTaskForm
from .models import PeriodicTask, PERIODS

ns = api.namespace('workers', 'Asynchronous workers related operations', path='')

crontab_fields = api.model('Crontab', {
    'minute': fields.String(description='Cron expression for minute', required=True, default='*'),
    'hour': fields.String(description='Cron expression for hour', required=True, default='*'),
    'day_of_week': fields.String(description='Cron expression for day of week', required=True, default='*'),
    'day_of_month': fields.String(description='Cron expression for day of month', required=True, default='*'),
    'month_of_year': fields.String(description='Cron expression for month of year', required=True, default='*'),
})

interval_fields = api.model('Interval', {
    'every': fields.Integer(description='The interval without unit', required=True),
    'period': fields.String(description='The period/interval type', required=True, enum=PERIODS),
})

job_fields = api.model('Job', {
    'id': fields.String(description='The job unique identifier', readonly=True),
    'name': fields.String(description='The job unique name', required=True),
    'description': fields.String(description='The job description'),
    'task': fields.String(description='The task name', required=True, enum=[job.name for job in schedulables()]),
    'crontab': fields.Nested(crontab_fields, allow_null=True),
    'interval': fields.Nested(interval_fields, allow_null=True),
    'args': fields.List(fields.Raw, description='The job execution arguments', default=[]),
    'kwargs': fields.Raw(description='The job execution keyword arguments', default={}),
    'schedule': fields.String(attribute='schedule_display', description='The schedule display', readonly=True),
    'last_run_at': fields.ISODateTime(description='The last job execution date', readonly=True),
    'last_run_id': fields.String(description='The last execution task id', readonly=True),
Ejemplo n.º 4
0
    'id': fields.String(description='The level identifier', required=True),
    'name': fields.String(description='The level name', required=True),
    'parents': fields.List(fields.String, description='The parent levels'),
})

zone_fields = api.model('GeoZone', {
    'id': fields.String(description='The zone identifier', required=True),
    'name': fields.String(description='The zone name', required=True),
    'code': fields.String(
        description='The zone unique code in the level', required=True),
    'level': fields.String(description='The zone level', required=True),
    'parents': fields.List(
        fields.String, description='Every known parent zones'),
    'keys': fields.Raw(
        description='Some arbitry key-value identifying the zone'),
    'population': fields.Integer(
        description='An estimated/approximative population'),
    'area': fields.Integer(description='An estimated/approximative area'),
    'geom': fields.Nested(
        geojson, description='A multipolygon for the whole coverage'),
})

granularity_fields = api.model('GeoGranularity', {
    'id': fields.String(
        description='The granularity identifier', required=True),
    'name': fields.String(description='The granularity name', required=True),
})


spatial_coverage_fields = api.model('SpatialCoverage', {
    'geom': fields.Nested(
        geojson, allow_null=True,
Ejemplo n.º 5
0
        'api.user', lambda o: {'user': o},
        description='The user API URI', required=True),
})

me_fields = api.inherit('Me', user_fields, {
    'email': fields.String(description='The user email', required=True),
    'apikey': fields.String(description='The user API Key', readonly=True),
})

me_metrics_fields = api.model('MyMetrics', {
    'id': fields.String(
        description='The user identifier', required=True),
    'resources_availability': fields.Float(
        description="The user's resources availability percentage",
        readonly=True),
    'datasets_org_count': fields.Integer(
        description="The user's orgs datasets number", readonly=True),
    'followers_org_count': fields.Integer(
        description="The user's orgs followers number", readonly=True),
    'datasets_count': fields.Integer(
        description="The user's datasets number", readonly=True),
    'followers_count': fields.Integer(
        description="The user's followers number", readonly=True),
})

apikey_fields = api.model('ApiKey', {
    'apikey': fields.String(description='The user API Key', readonly=True),
})

user_page_fields = api.model('UserPage', fields.pager(user_fields))

user_suggestion_fields = api.model('UserSuggestion', {
Ejemplo n.º 6
0
me_fields = api.inherit(
    'Me', user_fields, {
        'apikey': fields.String(description='The user API Key', readonly=True),
    })

me_metrics_fields = api.model(
    'MyMetrics', {
        'id':
        fields.String(description='The user identifier', required=True),
        'resources_availability':
        fields.Float(
            description="The user's resources availability percentage",
            readonly=True),
        'datasets_org_count':
        fields.Integer(description="The user's orgs datasets number",
                       readonly=True),
        'followers_org_count':
        fields.Integer(description="The user's orgs followers number",
                       readonly=True),
        'datasets_count':
        fields.Integer(description="The user's datasets number",
                       readonly=True),
        'followers_count':
        fields.Integer(description="The user's followers number",
                       readonly=True),
    })

apikey_fields = api.model(
    'ApiKey', {
        'apikey': fields.String(description='The user API Key', readonly=True),
    })
Ejemplo n.º 7
0
feature_collection_fields = api.model(
    'GeoJSONFeatureCollection', {
        'type': fields.String(required=True, enum=['FeatureCollection']),
        'features': api.as_list(fields.Nested(feature_fields))
    })

level_fields = api.model(
    'TerritoryLevel', {
        'id':
        fields.String(description='The level identifier', required=True),
        'label':
        fields.String(description='The level name', required=True),
        'position':
        fields.Integer(
            description='The position in the level tree (top is zero)',
            min=0,
            required=True),
        'parent':
        fields.String(description='The parent level'),
        'children':
        fields.List(fields.String, description='The known children levels'),
    })

granularity_fields = api.model(
    'SpatialGranularity', {
        'id':
        fields.String(description='The granularity identifier', required=True),
        'label':
        fields.String(description='The granularity name', required=True),
    })
Ejemplo n.º 8
0
                       required=True),
},
                             mask=DEFAULT_MASK_APIV2)

resource_page_fields = apiv2.model(
    'ResourcePage', {
        'data':
        fields.List(
            fields.Nested(resource_fields,
                          description='The dataset resources')),
        'next_page':
        fields.String(),
        'previous_page':
        fields.String(),
        'page':
        fields.Integer(),
        'page_size':
        fields.Integer(),
        'total':
        fields.Integer()
    })

dataset_page_fields = apiv2.model(
    'DatasetPage',
    fields.pager(dataset_fields),
    mask='data{{{0}}},*'.format(DEFAULT_MASK_APIV2))

specific_resource_fields = apiv2.model(
    'SpecificResource', {
        'resource':
        fields.Nested(resource_fields, description='The dataset resources'),