コード例 #1
0
 def attributes(self):
     return {
         'name': self._instance.ref,
         'permissions': {
             sel: Permissions(perm).name
             for sel, perm in self._instance.data['permissions'].items()
         }
     }
コード例 #2
0
 def attributes(cls, inst):
     return {
         'name': inst.ref,
         'permissions': {
             sel: Permissions(perm).name
             for sel, perm in inst.data['permissions'].items()
         }
     }
コード例 #3
0
 def attributes(cls, inst):
     return {
         'name': inst.ref,
         'schema': inst.data.get('schema'),
         # 'documentCreatorPermissions': Permissions(inst.data['documentCreatorPermissions']).name,
         'permissions': {
             sel: Permissions(perm).name
             for sel, perm in inst.data['permissions'].items()
         }
     }
コード例 #4
0
 def meta(self):
     return {
         'permissions':
         Permissions(self._permission).name,
         'created-by':
         self._instance.created_by,
         'modified-by':
         self._instance.modified_by,
         'created-on':
         datetime.datetime.fromtimestamp(
             self._instance.created_on).isoformat(),
         'modified-on':
         datetime.datetime.fromtimestamp(
             self._instance.modified_on).isoformat()
     }
コード例 #5
0
    def update(self, key, patch, user):
        if isinstance(patch, dict):
            keys = set(patch.keys())
            if not keys.issubset(Collection.WHITELIST):
                raise exceptions.InvalidFields(keys - Collection.WHITELIST)

            previous = self._state.get(key)
            patch = jsonpatch.JsonPatch.from_diff(previous.data, {**previous.data, **patch})
            patch = list(filter(lambda p: p['path'].split('/')[1] in Namespace.WHITELIST, patch))

        for blob in patch:
            if not blob['path'].split('/')[1] in Collection.WHITELIST:
                raise exceptions.InvalidField(blob['path'])
            if blob.get('value') and not isinstance(blob.get('value'), Permissions) and blob['path'].startswith('/permissions'):
                try:
                    blob['value'] = Permissions(reduce(operator.or_, [Permissions[p.strip()] for p in blob['value'].split(',')], Permissions.NONE))
                except (AttributeError, KeyError):
                    raise exceptions.InvalidPermission(blob['value'])

        return super().update(key, patch, user)
コード例 #6
0
    def attributes(self):
        full = self._permission == Permissions.ADMIN or (
            (self._permission ^ Permissions.get_permissions(
                self._user, Collection(self._instance)))
            & Permissions.READ) == Permissions.READ

        return {
            'name':
            self._instance.ref,
            'schema':
            self._instance.data.get('schema'),
            **({} if not full else {
                   'plugins': self._instance.data.get('plugins', {}),
                   'permissions': {
                       sel: Permissions(perm).name
                       for sel, perm in self._instance.data['permissions'].items(
                       )
                   }
               })
        }