Esempio n. 1
0
                            'resource data is updated, the URL will '
                            'change, the latest URL won\'t.',
                            readonly=True),
    'checksum': fields.Nested(
        checksum_fields, allow_null=True,
        description='A checksum to validate file validity'),
    'filesize': 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),
    'extras': fields.Raw(description='Extra attributes as key-value pairs'),
    'is_available': fields.Raw(
        description='The resource availability', readonly=True),
})

upload_fields = api.inherit('UploadedResource', resource_fields, {
    'success': fields.Boolean(
        description='Whether the upload succeeded or not.',
        readonly=True, default=True),
})

resources_order = api.as_list(fields.String(description='Resource ID'))

temporal_coverage_fields = api.model('TemporalCoverage', {
    'start': fields.ISODateTime(description='The temporal coverage start date',
Esempio n. 2
0
        'since':
        fields.ISODateTime(attribute='created_at',
                           description='The registeration date',
                           required=True),
        'page':
        fields.UrlFor('users.show',
                      lambda u: {'user': u},
                      description='The user profile page URL',
                      readonly=True),
        'uri':
        fields.UrlFor('api.user',
                      lambda o: {'user': o},
                      description='The user API URI',
                      required=True),
        'metrics':
        fields.Raw(description='The user metrics', readonly=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",
Esempio n. 3
0
from __future__ import unicode_literals

from udata.api import api, fields


GEOM_TYPES = (
    'Point', 'LineString', 'Polygon', 'MultiPoint', 'MultiLineString',
    'MultiPolygon'
)


geojson = api.model('GeoJSON', {
    'type': fields.String(
        description='The GeoJSON Type', required=True, enum=GEOM_TYPES),
    'coordinates': fields.List(
        fields.Raw(), description='The geometry as coordinates lists',
        required=True),
})

feature_fields = api.model('GeoJSONFeature', {
    'id': fields.String,
    'type': fields.String(required=True, enum=['Feature']),
    'geometry': fields.Nested(geojson, required=True),
    'properties': fields.Raw,
})

feature_collection_fields = api.model('GeoJSONFeatureCollection', {
    'type': fields.String(required=True, enum=['FeatureCollection']),
    'features': fields.List(fields.Nested(feature_fields), required=True)
})
Esempio n. 4
0
from udata.core.dataset.api_fields import dataset_ref_fields
from udata.core.reuse.api_fields import reuse_ref_fields
from udata.core.user.api_fields import user_ref_fields
from udata.core.organization.api_fields import org_ref_fields

from .views import current_site

site_fields = api.model(
    'Site', {
        'id':
        fields.String(description='The Site unique identifier', required=True),
        'title':
        fields.String(description='The site display title', required=True),
        'metrics':
        fields.Raw(description='The associated metrics', default={}),
    })


@api.route('/site/', endpoint='site')
class SiteAPI(API):
    @api.doc(id='get_site')
    @api.marshal_with(site_fields)
    def get(self):
        '''Site-wide variables'''
        return current_site


@api.route('/site/home/datasets/', endpoint='home_datasets')
class SiteHomeDatasetsAPI(API):
    @api.doc('get_home_datasets')
Esempio n. 5
0
        fields.String(description='The discussion title'),
        'user':
        fields.Nested(user_ref_fields, description='The discussion author'),
        'created':
        fields.ISODateTime(description='The discussion creation date'),
        'closed':
        fields.ISODateTime(description='The discussion closing date'),
        'closed_by':
        fields.String(attribute='closed_by.id',
                      description='The user who closed the discussion'),
        'discussion':
        fields.Nested(message_fields),
        'url':
        fields.UrlFor('api.discussion', description='The discussion API URI'),
        'extras':
        fields.Raw(description='Extra attributes as key-value pairs'),
    })

start_discussion_fields = api.model(
    'DiscussionStart', {
        'title':
        fields.String(description='The title of the discussion to open',
                      required=True),
        'comment':
        fields.String(description='The content of the initial comment',
                      required=True),
        'subject':
        fields.Nested(api.model_reference,
                      description='The discussion target object',
                      required=True),
        'extras':
Esempio n. 6
0
from udata.core.site.views import current_site

metrics_fields = api.model(
    'Metric', {
        'object_id':
        fields.String(
            description='The object identifier which metrics belongs to',
            required=True),
        'date':
        fields.String(description='The metrics sampling date', required=True),
        'level':
        fields.String(description='The metrics granularity level',
                      required=True,
                      enum=['daily', 'monthly']),
        'values':
        fields.Raw(description='The metrics as key-value pairs',
                   required=True),
    })


def isodate(value):
    return date(*(int(p) for p in value.split('-'))).isoformat()


parser = api.parser()
parser.add_argument('start',
                    type=isodate,
                    help='Start of the period to fetch',
                    location='args')
parser.add_argument('end',
                    type=isodate,
                    help='End of the period to fetch',
Esempio n. 7
0
})

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),
    'enabled': fields.Boolean(description='Is this job enabled', default=False),
})

task_fields = api.model('Task', {
    'id': fields.String(description='Tha task execution ID', readonly=True),
    'status': fields.String(description='Cron expression for hour', readonly=True, enum=list(states.ALL_STATES)),
    'result': fields.String(description='The task results if exists'),
    'exc': fields.String(description='The exception thrown during execution'),
    'traceback': fields.String(description='The execution traceback'),
})

Esempio n. 8
0
from udata.auth import admin_permission
from udata.models import Dataset, Reuse

from udata.core.dataset.api_fields import dataset_fields
from udata.core.reuse.api_fields import reuse_fields

from .views import current_site

site_fields = api.model(
    'Site', {
        'id':
        fields.String(description='The Site unique identifier', required=True),
        'title':
        fields.String(description='The site display title', required=True),
        'metrics':
        fields.Raw(description='The associated metrics', default={}),
    })


@api.route('/site/', endpoint='site')
class SiteAPI(API):
    @api.doc(id='get_site')
    @api.marshal_with(site_fields)
    def get(self):
        '''Site-wide variables'''
        return current_site


@api.route('/site/home/datasets/', endpoint='home_datasets')
class SiteHomeDatasetsAPI(API):
    @api.doc('get_home_datasets')
Esempio n. 9
0
error_fields = api.model('HarvestError', {
    'created_at': fields.ISODateTime(description='The error creation date', required=True),
    'message': fields.String(description='The error short message', required=True),
    'details': fields.String(description='Optionnal details (ie. stacktrace)'),
})

item_fields = api.model('HarvestItem', {
    'remote_id': fields.String(description='The item remote ID to process', required=True),
    'status': fields.String(description='The item status', required=True, enum=HARVEST_ITEM_STATUS.keys()),
    'created': fields.ISODateTime(description='The item creation date', required=True),
    'started': fields.ISODateTime(description='The item start date'),
    'ended': fields.ISODateTime(description='The item end date'),
    'errors': api.as_list(fields.Nested(error_fields, description='The item errors')),
    'args': fields.List(fields.String, description='The item positional arguments', default=[]),
    'kwargs': fields.Raw(description='The item keyword arguments', default={}),
})

source_fields = api.model('HarvestSource', {
    'id': fields.String(description='The source unique identifier', required=True),
    'name': fields.String(description='The source display name', required=True),
    'description': fields.String(description='The source description'),
    'url': fields.String(description='The source base URL', required=True),
    'backend': fields.String(description='The source backend', required=True, enum=actions.list_backends()),
    'config': fields.Raw(description='The configuration as key-value pairs'),
    'args': fields.List(fields.Raw, description='The job execution arguments', default=[]),
    'kwargs': fields.Raw(description='The job execution keyword arguments', default={}),
    'created_at': fields.ISODateTime(description='The source creation date', required=True),
    'active': fields.Boolean(description='Is this source active', required=True, default=False),
})
Esempio n. 10
0
from udata.api import api, fields

GEOM_TYPES = ('Point', 'LineString', 'Polygon', 'MultiPoint',
              'MultiLineString', 'MultiPolygon')

geojson = api.model(
    'GeoJSON', {
        'type':
        fields.String(
            description='The GeoJSON Type', required=True, enum=GEOM_TYPES),
        'coordinates':
        fields.List(fields.Raw(),
                    description='The geometry as coordinates lists',
                    required=True),
    })

feature_fields = api.model(
    'GeoJSONFeature', {
        'id': fields.String,
        'type': fields.String(required=True, enum=['Feature']),
        'geometry': fields.Nested(geojson, required=True),
        'properties': fields.Raw,
    })

feature_collection_fields = api.model(
    'GeoJSONFeatureCollection', {
        'type': fields.String(required=True, enum=['FeatureCollection']),
        'features': fields.List(fields.Nested(feature_fields), required=True)
    })

level_fields = api.model(
Esempio n. 11
0
    'dataset': fields.Nested(dataset_ref_fields,
                             description='The processed dataset',
                             allow_null=True),
    'status': fields.String(description='The item status',
                            required=True,
                            enum=HARVEST_ITEM_STATUS.keys()),
    'created': fields.ISODateTime(description='The item creation date',
                                  required=True),
    'started': fields.ISODateTime(description='The item start date'),
    'ended': fields.ISODateTime(description='The item end date'),
    'errors': fields.List(fields.Nested(error_fields),
                          description='The item errors'),
    'args': fields.List(fields.String,
                        description='The item positional arguments',
                        default=[]),
    'kwargs': fields.Raw(description='The item keyword arguments',
                         default={}),
})

job_fields = api.model('HarvestJob', {
    'id': fields.String(description='The job execution ID', required=True),
    'created': fields.ISODateTime(description='The job creation date',
                                  required=True),
    'started': fields.ISODateTime(description='The job start date'),
    'ended': fields.ISODateTime(description='The job end date'),
    'status': fields.String(description='The job status',
                            required=True, enum=HARVEST_JOB_STATUS.keys()),
    'errors': fields.List(fields.Nested(error_fields),
                          description='The job initialization errors'),
    'items': fields.List(fields.Nested(item_fields),
                         description='The job collected items'),
    'source': fields.String(description='The source owning the job',
Esempio n. 12
0
        fields.ISODateTime(attribute='created_at',
                           description='The registeration date',
                           required=True),
        'page':
        fields.UrlFor('users.show',
                      lambda u: {'user': u},
                      description='The user profile page URL',
                      readonly=True),
        'uri':
        fields.UrlFor('api.user',
                      lambda o: {'user': o},
                      description='The user API URI',
                      required=True),
        'metrics':
        fields.Raw(attribute=lambda o: o.get_metrics(),
                   description='The user metrics',
                   readonly=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(
Esempio n. 13
0
                           readonly=True),
        'datasets':
        fields.List(fields.Nested(dataset_ref_fields),
                    description='The reused datasets'),
        'organization':
        fields.Nested(org_ref_fields,
                      allow_null=True,
                      description='The publishing organization',
                      readonly=True),
        'owner':
        fields.Nested(user_ref_fields,
                      description='The owner user',
                      readonly=True,
                      allow_null=True),
        'metrics':
        fields.Raw(description='The reuse metrics', readonly=True),
        'uri':
        fields.UrlFor('api.reuse',
                      lambda o: {'reuse': o},
                      description='The reuse API URI',
                      readonly=True),
        'page':
        fields.UrlFor('reuses.show',
                      lambda o: {'reuse': o},
                      description='The reuse page URL',
                      readonly=True),
    })

reuse_page_fields = api.model('ReusePage', fields.pager(reuse_fields))

reuse_suggestion_fields = api.model(
Esempio n. 14
0
                      description='A checksum to validate file validity'),
        'filesize':
        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),
        'extras':
        fields.Raw(description='Extra attributes as key-value pairs'),
        'preview_url':
        fields.String(description='An optional preview URL to be '
                      'loaded as a standalone page (ie. iframe or '
                      'new page)',
                      readonly=True),
    })

upload_fields = api.inherit(
    'UploadedResource', resource_fields, {
        'success':
        fields.Boolean(description='Whether the upload succeeded or not.',
                       readonly=True,
                       default=True),
Esempio n. 15
0
 'created_at': fields.ISODateTime(
     description='The dataset creation date', required=True),
 'last_modified': fields.ISODateTime(
     description='The dataset last modification date', required=True),
 'deleted': fields.ISODateTime(description='The deletion date if deleted'),
 'archived': fields.ISODateTime(description='The archival date if archived'),
 'featured': fields.Boolean(description='Is the dataset featured'),
 'private': fields.Boolean(
     description='Is the dataset private to the owner or the organization'),
 'tags': fields.List(fields.String),
 'badges': fields.List(fields.Nested(badge_fields),
                       description='The dataset badges',
                       readonly=True),
 'resources': fields.Raw(attribute=lambda o: {
     'rel': 'subsection',
     'href': url_for('apiv2.resources', dataset=o.id, page=1, page_size=DEFAULT_PAGE_SIZE, _external=True),
     'type': 'GET',
     'total': len(o.resources)
     }, description='Link to the dataset resources'),
 'community_resources': fields.Raw(attribute=lambda o: {
     'rel': 'subsection',
     'href': url_for('api.community_resources', dataset=o.id, page=1, page_size=DEFAULT_PAGE_SIZE, _external=True),
     'type': 'GET',
     'total': len(o.community_resources)
     }, description='Link to the dataset community resources'),
 'frequency': fields.String(
     description='The update frequency', required=True,
     enum=list(UPDATE_FREQUENCIES), default=DEFAULT_FREQUENCY),
 'frequency_date': fields.ISODateTime(
     description=('Next expected update date, you will be notified '
                  'once that date is reached.')),
 'extras': fields.Raw(description='Extras attributes as key-value pairs'),
Esempio n. 16
0
from udata.models import SPATIAL_GRANULARITIES, Territory, Dataset

GEOM_TYPES = ('Point', 'LineString', 'Polygon', 'MultiPoint',
              'MultiLineString', 'MultiPolygon')

ns = api.namespace('spatial', 'Spatial references')


@api.model(
    fields={
        'type':
        fields.String(description='The GeoJSON Type',
                      required=True,
                      enum=GEOM_TYPES),
        'coordinates':
        fields.List(fields.Raw(),
                    description='The geometry as coordinates lists',
                    required=True),
    })
class GeoJSON(fields.Raw):
    pass


feature_fields = api.model(
    'GeoJSONFeature', {
        'id': fields.String,
        'type': fields.String(required=True, enum=['Feature']),
        'geometry': GeoJSON(required=True),
        'properties': fields.Raw,
    })
Esempio n. 17
0
File: api.py Progetto: taniki/udata
                      required=True),
        'related_to_url':
        fields.String(attribute='related_to.display_url',
                      description='The activity target model',
                      required=True),
        'created_at':
        fields.ISODateTime(description='When the action has been performed',
                           readonly=True),
        'label':
        fields.String(description='The label of the activity', required=True),
        'key':
        fields.String(description='The key of the activity', required=True),
        'icon':
        fields.String(description='The icon of the activity', required=True),
        'kwargs':
        fields.Raw(description='Some action specific context'),
    })

activity_page_fields = api.model('ActivityPage', fields.pager(activity_fields))

activity_parser = api.page_parser()
activity_parser.add_argument('user',
                             type=str,
                             help='Filter activities for that particular user',
                             location='args')
activity_parser.add_argument(
    'organization',
    type=str,
    help='Filter activities for that particular organization',
    location='args')
Esempio n. 18
0
from udata.core.organization.api_fields import org_ref_fields  # noqa

user_fields = api.model(
    'User', {
        'id':
        fields.String(description='The user identifier', required=True),
        'slug':
        fields.String(description='The user permalink string', required=True),
        'first_name':
        fields.String(description='The user first name', required=True),
        'last_name':
        fields.String(description='The user last name', required=True),
        'email':
        fields.Raw(attribute=lambda o: o.email
                   if current_user_is_admin_or_self() else None,
                   description='The user email',
                   readonly=True),
        'avatar':
        fields.ImageField(original=True, description='The user avatar URL'),
        'avatar_thumbnail':
        fields.ImageField(
            attribute='avatar',
            size=BIGGEST_AVATAR_SIZE,
            description='The user avatar thumbnail URL. This is the square '
            '({0}x{0}) and cropped version.'.format(BIGGEST_AVATAR_SIZE)),
        'website':
        fields.String(description='The user website'),
        'about':
        fields.Markdown(description='The user self description'),
        'roles':
        fields.List(fields.String, description='Site wide user roles'),
Esempio n. 19
0
    'name': fields.String(description='The organization name', required=True),
    'acronym': fields.String(description='The organization acronym'),
    'url': fields.String(description='The organization website URL'),
    'slug': fields.String(
        description='The organization string used as permalink',
        required=True),
    'description': fields.Markdown(
        description='The organization description in Markdown', required=True),
    'created_at': fields.ISODateTime(
        description='The organization creation date', readonly=True),
    'last_modified': fields.ISODateTime(
        description='The organization last modification date', readonly=True),
    'deleted': fields.ISODateTime(
        description='The organization deletion date if deleted',
        readonly=True),
    'metrics': fields.Raw(
        description='The organization metrics', readonly=True),
    'uri': fields.UrlFor(
        'api.organization', lambda o: {'org': o},
        description='The organization API URI', readonly=True),
    'page': fields.UrlFor(
        'organizations.show', lambda o: {'org': o},
        description='The organization page URL', readonly=True),
    'logo': fields.ImageField(description='The organization logo URLs'),
    'members': fields.List(
        fields.Nested(member_fields, description='The organization members')),
    'badges': fields.List(fields.Nested(badge_fields),
                          description='The organization badges',
                          readonly=True),
})

org_page_fields = api.model('OrganizationPage', fields.pager(org_fields))
Esempio n. 20
0
})

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', {
    'id': fields.String(description='The user identifier', readonly=True),
    'first_name': fields.String(description='The user first name',
                                readonly=True),
    'last_name': fields.String(description='The user last name',
                               readonly=True),
    'avatar_url': fields.String(description='The user avatar URL'),
    'slug': fields.String(
        description='The user permalink string', readonly=True),
    'score': fields.Float(
        description='The internal match score', readonly=True),
})


notifications_fields = api.model('Notification', {
    'type': fields.String(description='The notification type', readonly=True),
    'created_on': fields.ISODateTime(
        description='The notification creation datetime', readonly=True),
    'details': fields.Raw(
        description='Key-Value details depending on notification type',
        readonly=True)
})
Esempio n. 21
0
    'datasets':
    fields.List(fields.Nested(dataset_fields),
                description='The reused datasets'),
    'organization':
    fields.Nested(org_ref_fields,
                  allow_null=True,
                  description='The publishing organization',
                  readonly=True),
    'owner':
    fields.Nested(user_ref_fields,
                  description='The owner user',
                  readonly=True,
                  allow_null=True),
    'metrics':
    fields.Raw(attribute=lambda o: o.get_metrics(),
               description='The reuse metrics',
               readonly=True),
    'uri':
    fields.UrlFor('api.reuse',
                  lambda o: {'reuse': o},
                  description='The reuse API URI',
                  readonly=True),
    'page':
    fields.UrlFor('reuses.show',
                  lambda o: {'reuse': o},
                  description='The reuse page URL',
                  readonly=True,
                  fallback_endpoint='api.reuse'),
},
                         mask='*,datasets{title,uri,page}')
Esempio n. 22
0
    'id': fields.String(
        description='The user identifier', required=True),
    'slug': fields.String(
        description='The user permalink string', required=True),
    'first_name': fields.String(
        description='The user first name', required=True),
    'last_name': fields.String(
        description='The user last name', required=True),
    'avatar': fields.ImageField(description='The user avatar URL'),
    'website': fields.String(description='The user website'),
    'about': fields.Markdown(description='The user self description'),
    'roles': fields.List(fields.String, description='Site wide user roles'),
    'organizations': fields.List(
        fields.Nested(org_ref_fields),
        description='The organization the user belongs to'),
    'metrics': fields.Raw(description='Th last user metrics'),
    'since': fields.ISODateTime(
        attribute='created_at',
        description='The registeration date', required=True),
    'page': fields.UrlFor(
        'users.show', lambda u: {'user': u},
        description='The user profile page URL', readonly=True),
    'uri': fields.UrlFor(
        '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),
})
Esempio n. 23
0
                      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),
    })

upload_fields = api.extend(
    'UploadedResource', resource_fields, {
        'success':
        fields.Boolean(description='Whether the upload succeeded or not.',
                       readonly=True,
                       default=True),
    })

resources_order = api.as_list(fields.String(description='Resource ID'))

temporal_coverage_fields = api.model(
    'TemporalCoverage', {
        'start':
Esempio n. 24
0
 fields.Markdown(description='The organization description in Markdown',
                 required=True),
 'created_at':
 fields.ISODateTime(description='The organization creation date',
                    readonly=True),
 'last_modified':
 fields.ISODateTime(
     description='The organization last modification date',
     readonly=True),
 'deleted':
 fields.ISODateTime(
     description='The organization deletion date if deleted',
     readonly=True),
 'metrics':
 fields.Raw(attribute=lambda o: o.get_metrics(),
            description='The organization metrics',
            readonly=True),
 'uri':
 fields.UrlFor('api.organization',
               lambda o: {'org': o},
               description='The organization API URI',
               readonly=True),
 'page':
 fields.UrlFor('organizations.show',
               lambda o: {'org': o},
               description='The organization page URL',
               readonly=True),
 'logo':
 fields.ImageField(original=True,
                   description='The organization logo URL'),
 'logo_thumbnail':
Esempio n. 25
0
        'created':
        fields.ISODateTime(description='The item creation date',
                           required=True),
        'started':
        fields.ISODateTime(description='The item start date'),
        'ended':
        fields.ISODateTime(description='The item end date'),
        'errors':
        fields.List(fields.Nested(error_fields),
                    description='The item errors'),
        'args':
        fields.List(fields.String,
                    description='The item positional arguments',
                    default=[]),
        'kwargs':
        fields.Raw(description='The item keyword arguments', default={}),
    })

job_fields = api.model(
    'HarvestJob', {
        'id':
        fields.String(description='The job execution ID', required=True),
        'created':
        fields.ISODateTime(description='The job creation date', required=True),
        'started':
        fields.ISODateTime(description='The job start date'),
        'ended':
        fields.ISODateTime(description='The job end date'),
        'status':
        fields.String(description='The job status',
                      required=True,
Esempio n. 26
0
from udata.core.dataset.api_fields import dataset_fields
from udata.core.reuse.api_fields import reuse_fields

from .models import current_site
from .rdf import build_catalog

site_fields = api.model(
    'Site', {
        'id':
        fields.String(description='The Site unique identifier', required=True),
        'title':
        fields.String(description='The site display title', required=True),
        'metrics':
        fields.Raw(attribute=lambda o: o.get_metrics(),
                   description='The associated metrics',
                   default={}),
    })


@api.route('/site/', endpoint='site')
class SiteAPI(API):
    @api.doc(id='get_site')
    @api.marshal_with(site_fields)
    def get(self):
        '''Site-wide variables'''
        return current_site


@api.route('/site/home/datasets/', endpoint='home_datasets')
class SiteHomeDatasetsAPI(API):