def _set_bundle_permissions(): """ Bulk set bundle permissions. A bundle permission created on a bundle-group pair will replace any existing permissions on the same bundle-group pair. """ new_permissions = BundlePermissionSchema(strict=True, many=True).load(request.json).data set_bundle_permissions(new_permissions) return BundlePermissionSchema(many=True).dump(new_permissions).data
def _set_bundle_permissions(): """ Bulk set bundle permissions. """ new_permissions = BundlePermissionSchema( strict=True, many=True, ).load(request.json).data set_bundle_permissions(new_permissions) return BundlePermissionSchema(many=True).dump(new_permissions).data
def build_bundles_document(bundle_uuids): include_set = query_get_json_api_include_set(supported={ 'owner', 'group_permissions', 'children', 'host_worksheets' }) bundles_dict = get_bundle_infos( bundle_uuids, get_children='children' in include_set, get_permissions='group_permissions' in include_set, get_host_worksheets='host_worksheets' in include_set, ignore_not_found=False, ) # Create list of bundles in original order bundles = [bundles_dict[uuid] for uuid in bundle_uuids] # Build response document document = BundleSchema(many=True).dump(bundles).data # Shim in display metadata used by the front-end application if query_get_bool('include_display_metadata', default=False): for bundle, data in zip(bundles, document['data']): bundle_class = get_bundle_subclass(bundle['bundle_type']) json_api_meta( data, { 'editable_metadata_keys': worksheet_util.get_editable_metadata_fields(bundle_class), 'metadata_type': worksheet_util.get_metadata_types(bundle_class), }, ) if 'owner' in include_set: owner_ids = set(b['owner_id'] for b in bundles if b['owner_id'] is not None) json_api_include( document, UserSchema(), local.model.get_users(user_ids=owner_ids, limit=len(owner_ids))['results'], ) if 'group_permissions' in include_set: for bundle in bundles: json_api_include(document, BundlePermissionSchema(), bundle.get('group_permissions', [])) if 'children' in include_set: for bundle in bundles: json_api_include(document, BundleSchema(), bundle.get('children', [])) if 'host_worksheets' in include_set: for bundle in bundles: json_api_include(document, WorksheetSchema(), bundle.get('host_worksheets', [])) return document
def build_bundles_document(bundle_uuids): bundles_dict = get_bundle_infos( bundle_uuids, get_children=True, get_permissions=True, get_host_worksheets=True, ) # Create list of bundles in original order try: bundles = [bundles_dict[uuid] for uuid in bundle_uuids] except KeyError as e: abort(httplib.NOT_FOUND, "Bundle %s not found" % e.args[0]) # Build response document document = BundleSchema(many=True).dump(bundles).data # Shim in editable metadata keys # Used by the front-end application for bundle, data in izip(bundles, document['data']): json_api_meta( data, { 'editable_metadata_keys': worksheet_util.get_editable_metadata_fields( get_bundle_subclass(bundle['bundle_type'])) }) # Include users owner_ids = set(b['owner_id'] for b in bundles) json_api_include(document, UserSchema(), local.model.get_users(owner_ids)) # Include permissions for bundle in bundles: json_api_include(document, BundlePermissionSchema(), bundle['group_permissions']) # Include child bundles children_uuids = set(c['uuid'] for bundle in bundles for c in bundle['children']) json_api_include(document, BundleSchema(), get_bundle_infos(children_uuids).values()) return document