def get_sheets_create(self, context: object, request: Request = None, iresource: IInterface = None) -> [IResourceSheet]: """Get creatable sheets for `context` or `iresource`. :param request: If not None filter by sheet create permission. :param iresource: If not None return sheets for this resource type. The `creating` sheet attribute is set to the resource metadata of this type. The returned sheets should only be used to deserialize data to create a new resource. """ if iresource: creating = self.resources_meta[iresource] else: creating = None iresource = get_iresource(context) metas = self._get_sheets_meta(iresource, filter_attr='creatable') if request: metas = self._filter_permission( metas, context, request, permission_attr='permission_create') sheets = [ self.get_sheet(context, m.isheet, request=request, creating=creating) for m in metas ] return sheets
def get_sheets_all(self, context: object, request: Request=None) -> [IResourceSheet]: """Get all sheets for `context`.""" iresource = get_iresource(context) metas = self._get_sheets_meta(iresource) sheets = [self.get_sheet(context, m.isheet, request) for m in metas] return sheets
def __repr__(self): """Return representation of self.""" iface = get_iresource(self) or self.__class__ iface_dotted = to_dotted_name(iface) oid = getattr(self, '__oid__', None) name = getattr(self, '__name__', None) identifier = str(oid) return '{0} oid: {1} name: {2}'.format(iface_dotted, identifier, name)
def get_sheets_all(self, context: object, request: Request = None) -> [IResourceSheet]: """Get all sheets for `context`.""" iresource = get_iresource(context) metas = self._get_sheets_meta(iresource) sheets = [self.get_sheet(context, m.isheet, request) for m in metas] return sheets
def deferred_content_type_default(node: MappingSchema, kw: dict) -> str: """Return the content_type for the given `context`.""" creating = kw['creating'] if creating: return '' else: context = kw['context'] return get_iresource(context) or IResource
def _get_type_name(context: IResource, request: Request) -> str: localizer = get_localizer(request) if context is None: translated_name = '' else: iresource = get_iresource(context) name = request.registry.content.resources_meta[iresource].content_name translated_name = localizer.translate(name) return translated_name
def deferred_validate_asset_mime_type(node: SchemaNode, kw: dict): """Validate mime type for the uploaded asset file data.""" from .image import validate_image_data_mimetype from adhocracy_core.resources.image import IImage context = kw['context'] creating = kw['creating'] iresource = creating and creating.iresource or get_iresource(context) is_image = iresource.isOrExtends(IImage) if is_image: return validate_image_data_mimetype
def get_sheets_read(self, context: object, request: Request=None) -> list: """Get readable sheets for `context` and set the 'context' attribute. :param request: If set check permissions. """ iresource = get_iresource(context) sheets = self.sheets_read[iresource].copy() self._add_context(sheets, context) self._filter_permission(sheets, 'permission_view', context, request) return sheets
def get_resources_meta_addable(self, context: object, request: Request) -> list: """Get addable resource meta for context, mind permissions.""" iresource = get_iresource(context) addables = self.resources_meta_addable[iresource] addables_allowed = [] for resource_meta in addables: if self._can_add_resource(request, resource_meta, context): addables_allowed.append(resource_meta) return addables_allowed
def get_sheets_read(self, context: object, request: Request = None) -> list: """Get readable sheets for `context` and set the 'context' attribute. :param request: If set check permissions. """ iresource = get_iresource(context) sheets = self.sheets_read[iresource].copy() self._add_context(sheets, context) self._filter_permission(sheets, 'permission_view', context, request) return sheets
def get_sheets_create(self, context: object, request: Request=None, iresource: IInterface=None): """Get creatable sheets for `context` and set the 'context' attribute. :param iresource: If set return creatable sheets for this resource type. Else return the creatable sheets of `context`. :param request: If set check permissions. """ iresource = iresource or get_iresource(context) sheets = self.sheets_create[iresource].copy() self._add_context(sheets, context) self._filter_permission(sheets, 'permission_create', context, request) return sheets
def get_sheets_read(self, context: object, request: Request=None) -> [IResourceSheet]: """Get readable sheets for `context`. :param request: If not None filter by sheet edit permission. """ iresource = get_iresource(context) metas = self._get_sheets_meta(iresource, filter_attr='readable') if request: metas = self._filter_permission(metas, context, request, permission_attr='permission_view') sheets = [self.get_sheet(context, m.isheet, request=request) for m in metas] return sheets
def create_initial_content_for_item(context, registry, options): """Add first version and the Tags LAST and FIRST.""" iresource = get_iresource(context) metadata = registry.content.resources_meta[iresource] create = registry.content.create first_version = create(metadata.item_type.__identifier__, parent=context, **options) tags_sheet = get_sheet(context, adhocracy_core.sheets.tags.ITags, registry=registry) request = options.get('request', None) tags_sheet.set({'FIRST': first_version, 'LAST': first_version}, request=request)
def get_sheets_create(self, context: object, request: Request = None, iresource: IInterface = None): """Get creatable sheets for `context` and set the 'context' attribute. :param iresource: If set return creatable sheets for this resource type. Else return the creatable sheets of `context`. :param request: If set check permissions. """ iresource = iresource or get_iresource(context) sheets = self.sheets_create[iresource].copy() self._add_context(sheets, context) self._filter_permission(sheets, 'permission_create', context, request) return sheets
def _create_new_version(event, appstruct) -> IResource: appstructs = _get_writable_appstructs(event.object, event.registry) appstructs[IVersionable.__identifier__]['follows'] = [event.object] appstructs[event.isheet.__identifier__] = appstruct registry = event.registry iresource = get_iresource(event.object) new_version = registry.content.create(iresource.__identifier__, parent=event.object.__parent__, appstructs=appstructs, creator=event.creator, registry=event.registry, root_versions=event.root_versions, is_batchmode=event.is_batchmode, ) return new_version
def deferred_workflow_validator(node: SchemaNode, kw: dict) -> callable: """Deferred workflow name validator.""" context = kw['context'] registry = kw['registry'] creating = kw['creating'] if creating: meta = creating else: iresource = get_iresource(context) meta = registry.content.resources_meta[iresource] if meta.default_workflow in meta.alternative_workflows: workflows = ('',) + meta.alternative_workflows else: workflows = ('', meta.default_workflow) + meta.alternative_workflows return OneOf(workflows)
def deferred_workflow_validator(node: SchemaNode, kw: dict) -> callable: """Deferred workflow name validator.""" context = kw['context'] registry = kw['registry'] creating = kw['creating'] if creating: meta = creating else: iresource = get_iresource(context) meta = registry.content.resources_meta[iresource] if meta.default_workflow in meta.alternative_workflows: workflows = ('', ) + meta.alternative_workflows else: workflows = ('', meta.default_workflow) + meta.alternative_workflows return OneOf(workflows)
def create_initial_content_for_item(context, registry, options): """Add first version and the Tags LAST and FIRST.""" iresource = get_iresource(context) metadata = registry.content.resources_meta[iresource] item_type = metadata.item_type create = registry.content.create first_version = create(item_type.__identifier__, parent=context) tag_first_data = {'adhocracy_core.sheets.tags.ITag': {'elements': [first_version]}, 'adhocracy_core.sheets.name.IName': {'name': u'FIRST'}} create(ITag.__identifier__, parent=context, appstructs=tag_first_data) tag_last_data = {'adhocracy_core.sheets.tags.ITag': {'elements': [first_version]}, 'adhocracy_core.sheets.name.IName': {'name': u'LAST'}} create(ITag.__identifier__, parent=context, appstructs=tag_last_data)
def sdi_organisation_columns(folder, subobject, request, default_columnspec): """Mapping function to add info columns to the sdi organisation listing.""" content = request.registry.content content_name = '' title = '' if subobject: iresource = get_iresource(subobject) metadata = content.resources_meta[iresource] content_name = metadata.content_name if IProcess.providedBy(subobject): title = content.get_sheet_field(subobject, ITitle, 'title') additional_columns = [ {'name': 'Type', 'value': content_name}, {'name': 'Title', 'value': title}, ] return default_columnspec + additional_columns
def _create_new_version(event, appstruct) -> IResource: appstructs = _get_writable_appstructs(event.object, event.registry) appstructs[IVersionable.__identifier__]['follows'] = [event.object] appstructs[event.isheet.__identifier__] = appstruct registry = event.registry iresource = get_iresource(event.object) new_version = registry.content.create(iresource.__identifier__, parent=event.object.__parent__, appstructs=appstructs, creator=event.creator, registry=event.registry, root_versions=event.root_versions, is_batchmode=event.is_batchmode, autoupdated=True, ) return new_version
def can_add_resource(self, request: Request, meta: ResourceMetadata, context: IPool) -> bool: """Check that the resource type in `meta` is addable to `context`. For the `bplan` process we want anonymous to create proposal items and the first non empty version. To make this work we check the item create permission instead of the version create permission if the first version is empty (without sheet data). """ if self._is_bplan_and_has_no_version_with_sheet_data(meta, context): from adhocracy_core.utils import get_iresource iresource = get_iresource(context) permission = self.resources_meta[iresource].permission_create else: permission = meta.permission_create allowed = request.has_permission(permission, context) return allowed
def set_default_workflow(root, registry): # pragma: no cover """Set default workflow if no workflow in IWorkflowAssignment sheet.""" from adhocracy_core.utils import get_iresource from adhocracy_core.sheets.workflow import IWorkflowAssignment catalogs = find_service(root, 'catalogs') resources = _search_for_interfaces(catalogs, IWorkflowAssignment) for resource in resources: iresource = get_iresource(resource) meta = registry.content.resources_meta[iresource] default_workflow_name = meta.default_workflow sheet = registry.content.get_sheet(resource, IWorkflowAssignment) workflow_name = sheet.get()['workflow'] if not workflow_name and default_workflow_name: logger.info('Set default workflow {0} for {1}'.format( default_workflow_name, resource)) sheet._store_data({'workflow': meta.default_workflow}, initialize_workflow=False)
def get_workflow(self, context: object) -> IWorkflow: """Get workflow of `context` or None. :raises RuntimeConfigurationError: if workflow is not registered """ iresource = get_iresource(context) if iresource is None: return None name = self.resources_meta[iresource].workflow_name if name == '': return None try: workflow = self.workflows[name] except KeyError: msg = 'Workflow name is not registered: {0}'.format(name) raise RuntimeConfigurationError(msg) return workflow
def get_workflow(self, context: object) -> IWorkflow: """Get workflow of `context` or None. :raises RuntimeConfigurationError: if workflow is not registered """ iresource = get_iresource(context) try: name = self.resources_meta[iresource].workflow_name except KeyError: # ease testing return None if name == '': return None try: workflow = self.workflows[name] except KeyError: msg = 'Workflow name is not registered: {0}'.format(name) raise RuntimeConfigurationError(msg) return workflow
def get_sheets_read(self, context: object, request: Request = None) -> [IResourceSheet]: """Get readable sheets for `context`. :param request: If not None filter by sheet edit permission. """ iresource = get_iresource(context) metas = self._get_sheets_meta(iresource, filter_attr='readable') if request: metas = self._filter_permission(metas, context, request, permission_attr='permission_view') sheets = [ self.get_sheet(context, m.isheet, request=request) for m in metas ] return sheets
def create_initial_content_for_item(context, registry, options): """Add first version and the Tags LAST and FIRST.""" iresource = get_iresource(context) metadata = registry.content.resources_meta[iresource] create = registry.content.create first_version = create(metadata.item_type.__identifier__, parent=context, **options) request = options.get('request', None) tags_sheet = registry.content.get_sheet( context, adhocracy_core.sheets.tags.ITags, request=request, ) tags_sheet.set({ 'FIRST': first_version, 'LAST': first_version }, autoupdated=True)
def get_sheets_create(self, context: object, request: Request=None, iresource: IInterface=None) -> [IResourceSheet]: """Get creatable sheets for `context` or `iresource`. :param request: If not None filter by sheet create permission. :param iresource: If not None return sheets for this resource type. The `creating` sheet attribute is set to the resource metadata of this type. The returned sheets should only be used to deserialize data to create a new resource. """ if iresource: creating = self.resources_meta[iresource] else: creating = None iresource = get_iresource(context) metas = self._get_sheets_meta(iresource, filter_attr='creatable') if request: metas = self._filter_permission(metas, context, request, permission_attr='permission_create' ) sheets = [self.get_sheet(context, m.isheet, request=request, creating=creating) for m in metas] return sheets
def get_sheets_all(self, context: object) -> list: """Get all sheets for `context` and set the 'context' attribute.""" iresource = get_iresource(context) sheets = self.sheets_all[iresource].copy() self._add_context(sheets, context) return sheets
def _can_add_version_one(self, request, context): iresource = get_iresource(context) # since there is only version zero, the permission of # the item is checked instead of the one from the itemversion permission = self.resources_meta[iresource].permission_create return request.has_permission(permission, context)
def deferred_content_type_default(node: colander.MappingSchema, kw: dict) -> str: """Return the content_type for the given `context`.""" context = kw.get("context") return get_iresource(context) or IResource
def deferred_content_type_default(node: colander.MappingSchema, kw: dict) -> str: """Return the content_type for the given `context`.""" context = kw.get('context') return get_iresource(context) or IResource