예제 #1
0
    def set(self,
            appstruct: dict,
            omit=(),
            send_event=True,
            send_reference_event=True,
            omit_readonly: bool=True,
            autoupdated=False,
            ) -> bool:
        """Store appstruct.

        Read :func:`adhocracy_core.interfaces.IResourceSheet.set`
        """
        appstruct_old = self.get(add_back_references=False)
        appstruct = self._omit_omit_keys(appstruct, omit)
        if omit_readonly:
            appstruct = self._omit_readonly_keys(appstruct)
        appstruct = self._filter_unchanged_data(appstruct, appstruct_old)
        self._store_data(appstruct)
        self._store_references(appstruct,
                               self.registry,
                               send_event=send_reference_event)
        if send_event:
            event = ResourceSheetModified(self.context,
                                          self.meta.isheet,
                                          self.registry,
                                          appstruct_old,
                                          appstruct,
                                          self.request,
                                          autoupdated,
                                          )
            self.registry.notify(event)
        return bool(appstruct)
예제 #2
0
 def event(self, context):
     from adhocracy_core.events import ResourceSheetModified
     from adhocracy_core.sheets.metadata import IMetadata
     event = ResourceSheetModified(object=context,
                                   isheet=IMetadata,
                                   registry=None,
                                   old_appstruct={},
                                   new_appstruct={},
                                   request=None)
     return event
예제 #3
0
 def set(self,
         appstruct: dict,
         omit=(),
         send_event=True,
         request: Request = None,
         omit_readonly: bool = True) -> bool:
     """Store appstruct."""
     appstruct_old = self.get(add_back_references=False)
     appstruct = self._omit_omit_keys(appstruct, omit)
     if omit_readonly:
         appstruct = self._omit_readonly_keys(appstruct)
     self._store_data(appstruct)
     self._store_references(appstruct, self.registry)
     if send_event:
         event = ResourceSheetModified(self.context, self.meta.isheet,
                                       self.registry, appstruct_old,
                                       appstruct, request)
         self.registry.notify(event)
     return bool(appstruct)
예제 #4
0
def validate_activation_path(context, request: Request):
    """Validate the user name of a login request.

    If valid and activated, the user object is added as 'user' to
    `request.validated`.
    """
    path = request.validated['path']
    locator = request.registry.getMultiAdapter((context, request),
                                               IUserLocator)
    user = locator.get_user_by_activation_path(path)
    error = error_entry('body', 'path', 'Unknown or expired activation path')
    if user is None:
        request.errors.append(error)
    elif is_older_than(user, days=8):
        request.errors.append(error)
        user.activation_path = None
    else:
        user.activate()
        user.activation_path = None
        request.validated['user'] = user
        event = ResourceSheetModified(user, IUserBasic, request.registry, {},
                                      {}, request)
        request.registry.notify(event)  # trigger reindex activation_path index
예제 #5
0
 def validate_activation_path(node, value):
     registry = request.registry
     locator = registry.getMultiAdapter((context, request), IUserLocator)
     user = locator.get_user_by_activation_path(value)
     error_msg = 'Unknown or expired activation path'
     if user is None:
         raise Invalid(node, error_msg)
     elif is_older_than(user, days=8):
         user.activation_path = None
         raise Invalid(node, error_msg)
     else:
         request.validated['user'] = user
         if not user.active:
             user.activate()
         elif user.has_new_email_pending:
             user.activate_new_email()
         else:
             raise Invalid(node, 'No new email waiting for activation.')
         user.activation_path = None
         autoupdated = False
         event = ResourceSheetModified(user, IUserBasic, registry, {}, {},
                                       request, autoupdated)
         registry.notify(event)  # trigger reindex activation_path index
예제 #6
0
 def make_one(self, *arg):
     from adhocracy_core.events import ResourceSheetModified
     return ResourceSheetModified(*arg)