preview_item_fields = api.clone( 'HarvestItemPreview', item_fields, { 'dataset': fields.Nested(preview_dataset_fields, description='The processed dataset', allow_null=True), }) preview_job_fields = api.clone( 'HarvestJobPreview', job_fields, { 'items': fields.List(fields.Nested(preview_item_fields), description='The job collected items'), }) source_parser = api.page_parser() source_parser.add_argument('owner', type=str, location='args', help='The organization or user ID to filter on') @ns.route('/sources/', endpoint='harvest_sources') class SourcesAPI(API): @api.doc('list_harvest_sources', parser=source_parser) @api.marshal_list_with(source_page_fields) def get(self): '''List all harvest sources''' args = source_parser.parse_args() return actions.paginate_sources(args.get('owner'), page=args['page'],
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'), }) activity_page_fields = api.model('ActivityPage', fields.pager(activity_fields)) activity_parser = api.page_parser() @api.route('/site/activity', endpoint='site_activity') class SiteActivityAPI(API): @api.doc('site_activity', parser=activity_parser) @api.marshal_list_with(activity_page_fields) def get(self): '''Fetch site activity''' args = activity_parser.parse_args() return Activity.objects.order_by('-created').paginate( args['page'], args['page_size'])
readonly=True), 'uri': fields.UrlFor('api.post', lambda o: {'post': o}, description='The post API URI', readonly=True), 'page': fields.UrlFor('posts.show', lambda o: {'post': o}, description='The post page URL', readonly=True), }) post_page_fields = api.model('PostPage', fields.pager(post_fields)) parser = api.page_parser() @ns.route('/', endpoint='posts') class PostsAPI(API): @api.doc('list_posts', model=post_page_fields, parser=parser) @api.marshal_with(post_page_fields) def get(self): '''List all posts''' args = parser.parse_args() return Post.objects.order_by('-created').paginate( args['page'], args['page_size']) @api.doc('create_post', responses={400: 'Validation error'}) @api.secure(admin_permission) @api.expect(post_fields)
'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': fields.ISODateTime(description='The post last modification date', readonly=True), 'uri': fields.UrlFor('api.post', lambda o: {'post': o}, description='The post API URI', readonly=True), 'page': fields.UrlFor('posts.show', lambda o: {'post': o}, description='The post page URL', readonly=True), }) post_page_fields = api.model('PostPage', fields.pager(post_fields)) parser = api.page_parser() @ns.route('/', endpoint='posts') class PostsAPI(API): @api.doc('list_posts', model=post_page_fields, parser=parser) @api.marshal_with(post_page_fields) def get(self): '''List all posts''' args = parser.parse_args() return Post.objects.order_by('-created').paginate(args['page'], args['page_size']) @api.doc('create_post', responses={400: 'Validation error'}) @api.secure(admin_permission) @api.expect(post_fields)
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=unicode, help="Filter activities for that particular user", location="args") activity_parser.add_argument( "organization", type=unicode, help="Filter activities for that particular organization", location="args" ) @api.route("/activity", endpoint="activity") class SiteActivityAPI(API): @api.doc("activity", parser=activity_parser) @api.marshal_list_with(activity_page_fields) def get(self): """Fetch site activity, optionally filterd by user of org.""" args = activity_parser.parse_args() qs = Activity.objects
org.save() return {'image': org.logo} @api.secure @api.doc('resize_organization_logo') @api.expect(image_parser ) # Swagger 2.0 does not support formData at path level @api.marshal_with(uploaded_image_fields) def put(self, org): '''Set the logo BBox''' EditOrganizationPermission(org).test() parse_uploaded_image(org.logo) return {'image': org.logo} dataset_parser = api.page_parser() dataset_parser.add_argument('sort', type=str, default='-created', location='args', help='The sorting attribute') @ns.route('/<org:org>/datasets/', endpoint='org_datasets') class OrgDatasetsAPI(API): sort_mapping = { 'created': 'created_at', 'views': 'metrics.views', 'updated': 'last_modified', 'reuses': 'metrics.reuses', 'followers': 'metrics.followers',
parse_uploaded_image(org.logo) org.save() return {'image': org.logo} @api.secure @api.doc('resize_organization_logo') @api.expect(image_parser) # Swagger 2.0 does not support formData at path level @api.marshal_with(uploaded_image_fields) def put(self, org): '''Set the logo BBox''' EditOrganizationPermission(org).test() parse_uploaded_image(org.logo) return {'image': org.logo} dataset_parser = api.page_parser() dataset_parser.add_argument( 'sort', type=str, default='-created', location='args', help='The sorting attribute') @ns.route('/<org:org>/datasets/', endpoint='org_datasets') class OrgDatasetsAPI(API): sort_mapping = { 'created': 'created_at', 'views': 'metrics.views', 'updated': 'last_modified', 'reuses': 'metrics.reuses', 'followers': 'metrics.followers', }
'datasets.show', lambda o: {'dataset': 'not-available'}, description='The dataset page URL (fake)'), }) preview_item_fields = api.clone('HarvestItemPreview', item_fields, { 'dataset': fields.Nested(preview_dataset_fields, description='The processed dataset', allow_null=True), }) preview_job_fields = api.clone('HarvestJobPreview', job_fields, { 'items': fields.List(fields.Nested(preview_item_fields), description='The job collected items'), }) source_parser = api.page_parser() source_parser.add_argument('owner', type=str, location='args', help='The organization or user ID to filter on') @ns.route('/sources/', endpoint='harvest_sources') class SourcesAPI(API): @api.doc('list_harvest_sources') @api.expect(source_parser) @api.marshal_list_with(source_page_fields) def get(self): '''List all harvest sources''' args = source_parser.parse_args() return actions.paginate_sources(args.get('owner'), page=args['page'], page_size=args['page_size'])