'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',
'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",
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) })
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')
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':
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',
}) 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'), })
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')
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), })
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(
'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',
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(
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(
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),
'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'),
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, })
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')
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'),
'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))
}) 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) })
'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}')
'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), })
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':
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':
'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,
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):