예제 #1
0
 'acronym': fields.String(description='An optional dataset acronym'),
 'slug': fields.String(
     description='The dataset permalink string', required=True),
 'description': fields.Markdown(
     description='The dataset description in markdown', required=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(
예제 #2
0
파일: api.py 프로젝트: yohanboniface/udata
from udata.core.dataset.api_fields import dataset_ref_fields
from udata.core.organization.api_fields import org_ref_fields
from udata.core.reuse.api_fields import reuse_ref_fields
from udata.core.user.api_fields import user_ref_fields
from udata.models import User, Organization, Dataset, Reuse

from .actions import request_transfer, accept_transfer, refuse_transfer
from .models import TRANSFER_STATUS, Transfer

RESPONSE_TYPES = ['accept', 'refuse']

transfer_request_fields = api.model(
    'TransferRequest', {
        'subject':
        fields.Nested(base_reference,
                      required=True,
                      description='The transfered subject'),
        'recipient':
        fields.Nested(base_reference,
                      required=True,
                      description=('The transfer recipient, '
                                   'either an user or an organization')),
        'comment':
        fields.String(description='An explanation about the transfer request',
                      required=True),
    })

transfer_response_fields = api.model(
    'TransferResponse', {
        'response':
        fields.String(
예제 #3
0
        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),
        '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'),
예제 #4
0
from flask_security import current_user
from flask_restplus.inputs import boolean

from udata.api import api, API, fields
from udata.core.user.api_fields import user_ref_fields

from .forms import IssueCommentForm, IssueCreateForm
from .models import Message, Issue
from .permissions import CloseIssuePermission
from .signals import on_new_issue, on_new_issue_comment, on_issue_closed

ns = api.namespace('issues', 'Issue related operations')

message_fields = api.model('IssueMessage', {
    'content': fields.String(description='The message body', required=True),
    'posted_by': fields.Nested(
        user_ref_fields, description='The message author', required=True),
    'posted_on': fields.ISODateTime(
        description='The message posting date', required=True),
})

issue_fields = api.model('Issue', {
    'id': fields.String(description='The issue identifier', readonly=True),
    'subject': fields.Nested(api.model_reference,
                             description='The issue target object',
                             required=True),
    'class': fields.ClassName(description='The object class',
                              discriminator=True, required=True),
    'title': fields.String(description='The issue title', required=True),
    'user': fields.Nested(
        user_ref_fields, description='The issue author', required=True),
    'created': fields.ISODateTime(
예제 #5
0
 'title':
 fields.String(description='The reuse title', required=True),
 'slug':
 fields.String(description='The reuse permalink string', readonly=True),
 'type':
 fields.String(
     description='The reuse type', required=True, enum=list(REUSE_TYPES)),
 'url':
 fields.String(description='The reuse remote URL (website)', required=True),
 'description':
 fields.Markdown(description='The reuse description in Markdown',
                 required=True),
 'tags':
 fields.List(fields.String, description='Some keywords to help in search'),
 'badges':
 fields.List(fields.Nested(badge_fields),
             description='The reuse badges',
             readonly=True),
 'topic':
 fields.String(
     description='The reuse topic', required=True, enum=list(REUSE_TOPICS)),
 'featured':
 fields.Boolean(description='Is the reuse featured', readonly=True),
 'private':
 fields.Boolean(
     description='Is the reuse private to the owner or the organization'),
 'image':
 fields.ImageField(
     description='The reuse thumbnail thumbnail (cropped) URL'),
 'image_thumbnail':
 fields.ImageField(
예제 #6
0
 'content':
 fields.Markdown(description='The post content in Markdown',
                 required=True),
 'image':
 fields.ImageField(description='The post image'),
 'credit_to':
 fields.String(
     description='An optionnal credit line (associated to the image)'),
 'credit_url':
 fields.String(
     description='An optionnal link associated to the credits'),
 'tags':
 fields.List(fields.String,
             description='Some keywords to help in search'),
 'datasets':
 fields.List(fields.Nested(dataset_ref_fields),
             description='The post datasets'),
 'reuses':
 fields.List(fields.Nested(reuse_ref_fields),
             description='The post reuses'),
 'owner':
 fields.Nested(user_ref_fields,
               description='The owner user',
               readonly=True,
               allow_null=True),
 'private':
 fields.Boolean(description='Is the post visible'),
 'created_at':
 fields.ISODateTime(description='The post creation date',
                    readonly=True),
 'last_modified':
예제 #7
0
파일: api.py 프로젝트: guillo-w/udata
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,
    })

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'),
예제 #8
0
    'slug': fields.String(
        description='The organization string used as permalink',
        required=True),
    'page': fields.UrlFor(
        'organizations.show', lambda o: {'org': o},
        description='The organization web page URL', readonly=True),
    'logo': fields.ImageField(
        size=100, description='The organization logo URL'),
})


from udata.core.user.api_fields import user_ref_fields  # noqa: required

request_fields = api.model('MembershipRequest', {
    'id': fields.String(readonly=True),
    'user': fields.Nested(user_ref_fields),
    'created': fields.ISODateTime(
        description='The request creation date', readonly=True),
    'status': fields.String(
        description='The current request status', required=True,
        enum=MEMBERSHIP_STATUS.keys()),
    'comment': fields.String(
        description='A request comment from the user', required=True),
})

member_fields = api.model('Member', {
    'user': fields.Nested(user_ref_fields),
    'role': fields.String(
        description='The member role in the organization', required=True,
        enum=ORG_ROLES.keys())
})
예제 #9
0
파일: api.py 프로젝트: mayjolux/udata
from flask_security import current_user

from udata import tracking
from udata.api import api, API, fields
from udata.models import Follow
from udata.core.user.api_fields import user_ref_fields

from .signals import on_new_follow

follow_fields = api.model(
    'Follow', {
        'id':
        fields.String(description='The follow object technical ID',
                      readonly=True),
        'follower':
        fields.Nested(
            user_ref_fields, description='The follower', readonly=True),
        'since':
        fields.ISODateTime(
            description='The date from which the user started following',
            readonly=True)
    })

follow_page_fields = api.model('FollowPage', fields.pager(follow_fields))

parser = api.parser()
parser.add_argument('page',
                    type=int,
                    default=1,
                    location='args',
                    help='The page to fetch')
parser.add_argument('page_size',
예제 #10
0
ns = api.namespace('harvest', 'Harvest related operations')

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),
예제 #11
0
from udata.api import api, API, fields
from udata.core.user.api_fields import user_ref_fields

from .forms import DiscussionCreateForm, DiscussionCommentForm
from .models import Message, Discussion
from .permissions import CloseDiscussionPermission
from .signals import (
    on_new_discussion, on_new_discussion_comment, on_discussion_closed,
    on_discussion_deleted
)

ns = api.namespace('discussions', 'Discussion related operations')

message_fields = api.model('DiscussionMessage', {
    'content': fields.String(description='The message body'),
    'posted_by': fields.Nested(user_ref_fields,
                               description='The message author'),
    'posted_on': fields.ISODateTime(description='The message posting date'),
})

discussion_fields = api.model('Discussion', {
    'id': fields.String(description='The discussion identifier'),
    'subject': fields.Nested(api.model_reference,
                             description='The discussion target object'),
    'class': fields.ClassName(description='The object class',
                              discriminator=True),
    'title': 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.Nested(user_ref_fields, allow_null=True,
예제 #12
0
    'id': fields.String(description='The license identifier', required=True),
    'title': fields.String(description='The resource title', required=True),
    'maintainer': fields.String(description='The license official maintainer'),
    'url': fields.String(description='The license official URL'),
    'flags': fields.List(fields.String, description='Some arbitry flags'),
})

resource_fields = api.model('Resource', {
    'id': fields.String(description='The resource unique ID', readonly=True),
    'title': fields.String(description='The resource title', required=True),
    'description': 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(description='The resource creation date', readonly=True),
    'last_modified': fields.ISODateTime(attribute='modified',
        description='The resource last modification date', readonly=True),
    '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),
    # 'error': fields.String(description='An error message if success is false', readonly=True),
})

resources_order = api.as_list(fields.String(description='Resource ID'))
예제 #13
0
파일: api_fields.py 프로젝트: grouan/udata
reuse_fields = api.model('Reuse', {
    'id': fields.String(description='The reuse identifier', readonly=True),
    'title': fields.String(description='The reuse title', required=True),
    'slug': fields.String(
        description='The reuse permalink string', readonly=True),
    'type': fields.String(
        description='The reuse type', required=True, enum=REUSE_TYPES.keys()),
    'url': fields.String(
        description='The reuse remote URL (website)', required=True),
    'description': fields.Markdown(
        description='The reuse description in Markdown', required=True),
    'tags': fields.List(
        fields.String, description='Some keywords to help in search'),
    'badges': fields.List(
        fields.Nested(badge_fields, description='The reuse badges'),
        readonly=True),
    'featured': fields.Boolean(
        description='Is the reuse featured', readonly=True),
    'private': fields.Boolean(
        description='Is the reuse private to the owner or the organization'),
    'image': fields.ImageField(description='The reuse thumbnail'),
    'created_at': fields.ISODateTime(
        description='The reuse creation date', readonly=True),
    'last_modified': fields.ISODateTime(
        description='The reuse last modification date', readonly=True),
    'deleted': fields.ISODateTime(
        description='The organization identifier', readonly=True),
    'datasets': fields.List(
        fields.Nested(dataset_ref_fields), description='The reused datasets'),
    'organization': fields.Nested(
예제 #14
0
 fields.String(description=('Resource type (documentation, 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),
 'latest':
 fields.String(description='The permanent URL redirecting to '
               'the latest version of the resource. When the '
               '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':
예제 #15
0
 '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'),
 'active':
 fields.Boolean(),
 'organizations':
 fields.List(fields.Nested(org_ref_fields),
             description='The organization the user belongs to'),
 '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,
               fallback_endpoint='api.user'),
 'uri':
 fields.UrlFor('api.user',
               lambda o: {'user': o},
               description='The user API URI',
예제 #16
0
파일: api.py 프로젝트: ThomasG77/udata
    'slug': fields.String(
        description='The post permalink string', readonly=True),
    'headline': fields.String(description='The post headline', required=True),
    'content': fields.Markdown(
        description='The post content in Markdown', required=True),

    'image': fields.ImageField(description='The post image', readonly=True),
    'credit_to': fields.String(
        description='An optional credit line (associated to the image)'),
    'credit_url': fields.String(
        description='An optional link associated to the credits'),

    'tags': fields.List(
        fields.String, description='Some keywords to help in search'),
    'datasets': fields.List(
        fields.Nested(dataset_fields), description='The post datasets'),
    'reuses': fields.List(
        fields.Nested(reuse_fields), description='The post reuses'),

    'owner': fields.Nested(
        user_ref_fields, description='The owner user',
        readonly=True, allow_null=True),
    'created_at': fields.ISODateTime(
        description='The post creation date', readonly=True),
    'last_modified': fields.ISODateTime(
        description='The post last modification date', readonly=True),
    'published': fields.ISODateTime(
        description='The post publication date', readonly=True),

    'uri': fields.UrlFor(
        'api.post', lambda o: {'post': o},
예제 #17
0
        fields.UrlFor('organizations.show',
                      lambda o: {'org': o},
                      description='The organization web page URL',
                      readonly=True),
        'logo':
        fields.ImageField(size=100, description='The organization logo URL'),
    })

from udata.core.user.api_fields import user_ref_fields

request_fields = api.model(
    'MembershipRequest', {
        'id':
        fields.String(readonly=True),
        'user':
        fields.Nested(user_ref_fields),
        'created':
        fields.ISODateTime(description='The request creation date',
                           readonly=True),
        'status':
        fields.String(description='The current request status',
                      required=True,
                      enum=MEMBERSHIP_STATUS.keys()),
        'comment':
        fields.String(description='A request comment from the user',
                      required=True),
    })

member_fields = api.model(
    'Member', {
        'user':
예제 #18
0
    '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),
    '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'),
예제 #19
0
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),
    '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),
예제 #20
0
파일: api.py 프로젝트: guillo-w/udata
    def put(self):
        '''Set the homepage reuses editorial selection'''
        if not isinstance(request.json, list):
            api.abort(400, 'Expect a list of reuse IDs')
        ids = [ObjectId(id) for id in request.json]
        current_site.settings.home_reuses = Reuse.objects.bulk_list(ids)
        current_site.save()
        return current_site.settings.home_reuses


activity_fields = api.model(
    'Activity',
    {
        'actor':
        fields.Nested(user_ref_fields,
                      description='The user who performed the action',
                      readonly=True),
        'organization':
        fields.Nested(org_ref_fields,
                      allow_null=True,
                      readonly=True,
                      description='The organization who performed the action'),
        # 'related_to'
        # related_to = db.ReferenceField(db.DomainModel, required=True)
        'created_at':
        fields.ISODateTime(description='When the action has been performed',
                           readonly=True),
        'kwargs':
        fields.Raw(description='Some action specific context'),
    })
예제 #21
0
파일: api.py 프로젝트: guillo-w/udata
from udata.api import api, API, marshal, fields

from udata.core.user.api_fields import user_ref_fields

from .forms import IssueCreateForm, IssueCommentForm
from .models import Issue, Message, ISSUE_TYPES
from .signals import on_new_issue, on_new_issue_comment, on_issue_closed

ns = api.namespace('issues', 'Issue related operations')

message_fields = api.model(
    'IssueMessage', {
        'content':
        fields.String(description='The message body', required=True),
        'posted_by':
        fields.Nested(
            user_ref_fields, description='The message author', required=True),
        'posted_on':
        fields.ISODateTime(description='The message posting date',
                           required=True),
    })

issue_fields = api.model(
    'Issue', {
        'id':
        fields.String(description='The issue identifier', readonly=True),
        'type':
        fields.String(description='The issue type',
                      required=True,
                      enum=ISSUE_TYPES.keys()),
        'subject':
        fields.String(attribute='subject.id',
예제 #22
0
파일: api_fields.py 프로젝트: grouan/udata
 'title':
 fields.String(description='The resource title', required=True),
 'description':
 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':
예제 #23
0
파일: api_fields.py 프로젝트: taniki/udata
    '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('GeoLevel', {
    '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', {
예제 #24
0
from udata.core.user.api_fields import user_ref_fields

from .forms import DiscussionCreateForm, DiscussionCommentForm
from .models import Message, Discussion
from .permissions import CloseDiscussionPermission
from .signals import (on_new_discussion, on_new_discussion_comment,
                      on_discussion_closed, on_discussion_deleted)

ns = api.namespace('discussions', 'Discussion related operations')

message_fields = api.model(
    'DiscussionMessage', {
        'content':
        fields.String(description='The message body'),
        'posted_by':
        fields.Nested(user_ref_fields, description='The message author'),
        'posted_on':
        fields.ISODateTime(description='The message posting date'),
    })

discussion_fields = api.model(
    'Discussion', {
        'id':
        fields.String(description='The discussion identifier'),
        'subject':
        fields.Nested(api.model_reference,
                      description='The discussion target object'),
        'class':
        fields.ClassName(description='The object class', discriminator=True),
        'title':
        fields.String(description='The discussion title'),
예제 #25
0
    'avatar': fields.ImageField(size=100, description='The user avatar URL'),
})


from udata.core.organization.api_fields import org_ref_fields

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

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

user_suggestion_fields = api.model('UserSuggestion', {
    'id': fields.String(description='The user identifier', required=True),
    'fullname': fields.String(description='The user fullname', required=True),