コード例 #1
0
    def handle_submit(self, converted):
        request = self.request
        context = self.context

        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))

        simple_fields = ['title', 'text', 'caption', 'publication_date']
        for field in simple_fields:
            setattr(context, field, converted[field])

        # save tags, attachments, photo
        set_tags(context, request, converted['tags'])
        userid = authenticated_userid(request)
        attachments_folder = context['attachments']
        upload_attachments(converted['attachments'], attachments_folder,
                           userid, request)
        handle_photo_upload(context, converted)
        self.filestore.clear

        # mark as modified
        context.modified_by = userid
        objectEventNotify(ObjectModifiedEvent(context))

        location = resource_url(context, request)
        msg = "?status_message=News%20Item%20edited"
        return HTTPFound(location=location + msg)
コード例 #2
0
    def handle_submit(self, converted):
        context = self.context
        request = self.request
        workflow = self.workflow

        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        if workflow is not None:
            if 'security_state' in converted:
                workflow.transition_to_state(context, request,
                                             converted['security_state'])

        context.title = converted['title']
        context.text = converted['text']
        context.description = extract_description(converted['text'])

        # Save the tags on it
        set_tags(context, request, converted['tags'])

        # Save new attachments
        creator = authenticated_userid(request)
        if support_attachments(context):
            upload_attachments(converted['attachments'], context['attachments'],
                               creator, request)

        # Modified
        context.modified_by = authenticated_userid(request)
        objectEventNotify(ObjectModifiedEvent(context))

        location = resource_url(context, request,
                             query={'status_message':'Forum Topic Edited'})
        return HTTPFound(location=location)
コード例 #3
0
ファイル: wiki.py プロジェクト: reebalazs/karl
    def handle_submit(self, converted):
        context = self.context
        request = self.request
        workflow = self.workflow
        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        if workflow is not None:
            if 'security_state' in converted:
                workflow.transition_to_state(context, request,
                                             converted['security_state'])

        context.text = converted['text']
        context.description = extract_description(converted['text'])
        newtitle = converted['title']
        if newtitle != context.title:
            context.change_title(newtitle)

        # Save the tags on it
        set_tags(context, request, converted['tags'])

        # Modified
        context.modified_by = authenticated_userid(request)
        objectEventNotify(ObjectModifiedEvent(context))

        location = model_url(context, request)
        msg = "?status_message=Wiki%20Page%20edited"
        return HTTPFound(location=location+msg)
コード例 #4
0
    def test_it(self):
        from zope.interface import Interface
        from zope.interface import implementer
        from zope.component.globalregistry import getGlobalSiteManager
        from zope.component.interfaces import IObjectEvent
        from zope.component.event import objectEventNotify
        _adapted = []

        def _adapter(context, event):
            _adapted.append((context, event))
            return object()

        gsm = getGlobalSiteManager()
        gsm.registerHandler(_adapter, (Interface, IObjectEvent))
        del _adapted[:]  # clear handler reg

        @implementer(IObjectEvent)
        class _ObjectEvent(object):
            def __init__(self, object):
                self.object = object

        context = object()
        event = _ObjectEvent(context)
        objectEventNotify(event)
        self.assertEqual(_adapted, [(context, event)])
コード例 #5
0
ファイル: people.py プロジェクト: boothead/karl
    def update(self, item):
        objectEventNotify(ObjectWillBeModifiedEvent(item))

        item.title = _element_value(self, self.element, 'title')
        item.description = _element_value(self, self.element, 'description')

        objectEventNotify(ObjectModifiedEvent(item))
コード例 #6
0
ファイル: blog.py プロジェクト: disko/karl
    def handle_submit(self, converted):
        context = self.context
        request = self.request
        workflow = self.workflow
        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        if 'security_state' in converted:
            if workflow is not None:
                workflow.transition_to_state(context, request,
                                             converted['security_state'])

        context.title = converted['title']
        context.text = converted['text']
        context.description = extract_description(converted['text'])

        # Tags and attachments
        set_tags(context, request, converted['tags'])
        creator = authenticated_userid(request)
        attachments_folder = context['attachments']
        upload_attachments(
            filter(lambda x: x is not None, converted['attachments']),
            attachments_folder,
            creator, request)

        # modified
        context.modified_by = authenticated_userid(request)
        objectEventNotify(ObjectModifiedEvent(context))

        location = resource_url(context, request)
        self.filestore.clear()
        return HTTPFound(location=location)
コード例 #7
0
ファイル: bbb.py プロジェクト: attilaolah/node
 def __delitem__(self, key):
     delnode = self[key]
     super(LifecycleNode, self).__delitem__(key)
     if self._notify_suppress:
         return
     objectEventNotify(self.events['removed'](delnode, oldParent=self,
                                              oldName=key))
コード例 #8
0
 def set_field_appstruct(self, values, notify = True, mark_modified = True):
     #Remove restricted keys, in case they're present
     #This might be changed to raise an error instead in time
     for restricted_key in RESTRICTED_KEYS:
         if restricted_key in values:
             del values[restricted_key]
     updated = set()
     for (k, v) in values.items():
         cur = self.get_field_value(k)
         if cur == v:
             continue
         self.set_field_value(k, v)
         updated.add(k)
     if updated:
         updated.add('searchable_text') #Just to make sure
         updated.add('allowed_to_view')
         if mark_modified and 'modified' not in values:
             #Don't update if modified is set, since it will override the value we're trying to set.
             self.mark_modified()
             updated.add('modified')
         if 'tags' not in updated:
             #Hack to fix text
             updated.add('tags')
         if notify:
             #FIXME: This hack can be removed when transformations are live
             #Currently we need to reindex whenever some fields have changed
             objectEventNotify(ObjectUpdatedEvent(self, changed=updated))
     return updated
コード例 #9
0
    def handle_submit(self, converted):
        request = self.request
        context = self.context

        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))

        simple_fields = ['title', 'text', 'caption', 'publication_date']
        for field in simple_fields:
            setattr(context, field, converted[field])

        # save tags, attachments, photo
        set_tags(context, request, converted['tags'])
        userid = authenticated_userid(request)
        attachments_folder = context['attachments']
        upload_attachments(converted['attachments'], attachments_folder,
                           userid, request)
        handle_photo_upload(context, converted)
        self.filestore.clear

        # mark as modified
        context.modified_by = userid
        objectEventNotify(ObjectModifiedEvent(context))

        location = resource_url(context, request)
        msg = "?status_message=News%20Item%20edited"
        return HTTPFound(location=location+msg)
コード例 #10
0
ファイル: people.py プロジェクト: claytron/karl
 def handle_submit(self, converted):
     context = self.context
     request = self.request
     users = self.users
     userid = self.userid
     user = self.user
     if user is not None:
         login = converted.get('login')
         login_changed = users.get_by_login(login) != user
         if (login_changed and
             (users.get_by_id(login) is not None or
              users.get_by_login(login) is not None or
              login in context)):
             msg = "Login '%s' is already in use" % login
             raise ValidationError(login=msg)
     objectEventNotify(ObjectWillBeModifiedEvent(context))
     if user is not None:
         # Set new login
         try:
             users.change_login(userid, converted['login'])
         except ValueError, e:
             raise ValidationError(login=str(e))
         # Set group memberships
         user_groups = self.user_groups
         chosen_groups = set(converted['groups'])
         for group, group_title in self.group_options:
             if group in chosen_groups and group not in user_groups:
                 users.add_user_to_group(userid, group)
             if group in user_groups and group not in chosen_groups:
                 users.remove_user_from_group(userid, group)
         # Edit password
         if converted.get('password', None):
             users.change_password(userid, converted['password'])
コード例 #11
0
ファイル: lifecycle.py プロジェクト: bluedynamics/node
 def __delitem__(_next, self, key):
     delnode = self[key]
     _next(self, key)
     if self._notify_suppress:
         return
     objectEventNotify(self.events['removed'](delnode, oldParent=self,
                                              oldName=key))
コード例 #12
0
    def handle_submit(self, converted):
        if lock.owns_lock(self.context, self.userid):
            lock.clear(self.context)

        context = self.context
        request = self.request
        workflow = self.workflow
        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        if workflow is not None:
            if 'security_state' in converted:
                workflow.transition_to_state(context, request,
                                             converted['security_state'])

        context.text = converted['text']
        context.description = extract_description(converted['text'])
        newtitle = converted['title']
        if newtitle != context.title:
            context.change_title(newtitle)

        # Save the tags on it
        set_tags(context, request, converted['tags'])

        # Modified
        context.modified_by = authenticated_userid(request)
        objectEventNotify(ObjectModifiedEvent(context))

        location = resource_url(context, request)
        msg = "?status_message=Wiki%20Page%20edited"
        return HTTPFound(location=location + msg)
コード例 #13
0
ファイル: __init__.py プロジェクト: pingviini/repoze.folder
    def remove(self, name, send_events=True):
        """See IFolder."""
        name = unicodify(name)
        other = self.data[name]

        if send_events:
            objectEventNotify(ObjectWillBeRemovedEvent(other, self, name))

        if hasattr(other, '__parent__'):
            del other.__parent__

        if hasattr(other, '__name__'):
            del other.__name__

        # backwards compatibility: add a Length _num_objects to folders that
        # have none
        if self._num_objects is None:
            self._num_objects = Length(len(self.data))

        del self.data[name]
        self._num_objects.change(-1)

        if self._order is not None:
            self._order = tuple([x for x in self._order if x != name])

        if send_events:
            objectEventNotify(ObjectRemovedEvent(other, self, name))

        return other
コード例 #14
0
ファイル: community.py プロジェクト: boothead/karl
    def handle_submit(self, converted):
        context = self.context
        request = self.request
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        workflow = self.workflow
        if workflow is not None:
            if 'security_state' in converted:
                workflow.transition_to_state(context, request,
                                             converted['security_state'])
        context.title = converted['title']
        context.description = converted['description']
        context.text = converted['text']
        # NB: this is an edit form, so tags are added immediately via
        # AJAX; we needn't deal with setting them in the form post
        tools_present = [None]
        available_tools = self.available_tools
        for info in available_tools:
            component = info['component']
            tool_name = info['name']
            tools_present.append(tool_name)
            present = component.is_present(context, request)
            if (not present) and tool_name in converted['tools']:
                component.add(context, request)
            if present and (tool_name not in converted['tools']):
                component.remove(context, request)
                tools_present.remove(tool_name)
        if converted['default_tool'] in tools_present:
            context.default_tool = converted['default_tool']
        elif not (context.default_tool in tools_present):
            context.default_tool = None

        # *modified* event
        objectEventNotify(ObjectModifiedEvent(context))
        location = model_url(context, request)
        return HTTPFound(location=location)
コード例 #15
0
ファイル: models.py プロジェクト: ArcheProject/arche_pas
 def store(self, user, data):
     assert IUser.providedBy(user)
     assert isinstance(data, dict)
     provider_data = IProviderData(user)
     #Check if data already exist and if it needs to be updated
     stored_keys = set()
     if self.name in provider_data:
         curr_data = provider_data[self.name]
         #Check existing keys
         for (k, v) in data.items():
             if curr_data.get(k, object()) != v:
                 curr_data[k] = v
                 stored_keys.add(k)
         #Remove unused keys
         for k in set(curr_data) - set(data):
             del curr_data[k]
             #We don't need to track updated here
     else:
         provider_data[self.name] = data
         stored_keys.update(data)
     if stored_keys:
         self.logger.debug("provider %s data changed for user %s", self.name, user.userid)
         event = ObjectUpdatedEvent(user, changed = ['pas_ident'])
         objectEventNotify(event)
     return stored_keys
コード例 #16
0
ファイル: __init__.py プロジェクト: pingviini/repoze.folder
    def add(self, name, other, send_events=True):
        """See IFolder."""
        if not isinstance(name, basestring):
            raise TypeError("Name must be a string rather than a %s" %
                            name.__class__.__name__)
        if not name:
            raise TypeError("Name must not be empty")

        name = unicodify(name)

        if name in self.data:
            raise KeyError('An object named %s already exists' % name)

        if send_events:
            objectEventNotify(ObjectWillBeAddedEvent(other, self, name))
        other.__parent__ = self
        other.__name__ = name

        # backwards compatibility: add a Length _num_objects to folders that
        # have none
        if self._num_objects is None:
            self._num_objects = Length(len(self.data))

        self.data[name] = other
        self._num_objects.change(1)

        if self._order is not None:
            self._order += (name,)

        if send_events:
            objectEventNotify(ObjectAddedEvent(other, self, name))
コード例 #17
0
 def detach(_next, self, key):
     self._notify_suppress = True
     node = _next(self, key)
     self._notify_suppress = False
     objectEventNotify(self.events['detached'](node, oldParent=self,
                                               oldName=key))
     return node
コード例 #18
0
 def handle_submit(self, converted):
     context = self.context
     request = self.request
     users = self.users
     userid = self.userid
     user = self.user
     if user is not None:
         login = converted.get('login')
         login_changed = users.get_by_login(login) != user
         if (login_changed and (users.get_by_id(login) is not None
                                or users.get_by_login(login) is not None
                                or login in context)):
             msg = "Login '%s' is already in use" % login
             raise ValidationError(login=msg)
     objectEventNotify(ObjectWillBeModifiedEvent(context))
     if user is not None:
         # Set new login
         try:
             users.change_login(userid, converted['login'])
         except ValueError, e:
             raise ValidationError(login=str(e))
         # Set group memberships
         user_groups = self.user_groups
         chosen_groups = set(converted['groups'])
         for group, group_title in self.group_options:
             if group in chosen_groups and group not in user_groups:
                 users.add_user_to_group(userid, group)
             if group in user_groups and group not in chosen_groups:
                 users.remove_user_from_group(userid, group)
         # Edit password
         if converted.get('password', None):
             users.change_password(userid, converted['password'])
コード例 #19
0
ファイル: __init__.py プロジェクト: ArcheProject/Arche
def appmaker(zodb_root):
    try:
        return zodb_root['app_root']
    except KeyError:
        from pyramid.threadlocal import get_current_registry
        from zope.interface import alsoProvides
        from zope.component.event import objectEventNotify
        import transaction
        from arche.utils import get_content_factories
        from arche.interfaces import IRoot
        from arche.populators import root_populator
        from arche.models.evolver import run_initial_migrations
        from arche.events import ObjectAddedEvent

        factories = get_content_factories()
        #This is where initial population takes place, but first some site setup
        if not 'initial_setup' in zodb_root or not zodb_root['initial_setup'].setup_data:
            InitialSetup = factories['InitialSetup']
            zodb_root['initial_setup'] = InitialSetup()
            transaction.commit()
            return zodb_root['initial_setup']
        else:
            #FIXME move this population to its own method so tests can use it
            #Root added
            data = dict(zodb_root['initial_setup'].setup_data)
            #Attach and remove setup context
            zodb_root['app_root'] = root = root_populator(**data)
            transaction.commit()
            run_initial_migrations(root)
            # Manually notify added event
            objectEventNotify(ObjectAddedEvent(root, None, None))
            del zodb_root['initial_setup']
            return root
コード例 #20
0
 def __delitem__(_next, self, key):
     delnode = self[key]
     _next(self, key)
     if self._notify_suppress:
         return
     objectEventNotify(self.events['removed'](delnode, oldParent=self,
                                              oldName=key))
コード例 #21
0
ファイル: intranets.py プロジェクト: disko/karl
    def handle_submit(self, converted):
        request = self.request
        context = self.context
        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        if converted.get('middle_portlets'):
            middle_portlets = split_lines(converted['middle_portlets'])
        else:
            middle_portlets = []
        if converted.get('right_portlets'):
            right_portlets = split_lines(converted['right_portlets'])
        else:
            right_portlets = []
        context.title = converted['title']
        context.address = converted['address']
        context.city = converted['city']
        context.state = converted['state']
        context.country = converted['country']
        context.zipcode = converted['zipcode']
        context.telephone = converted['telephone']
        context.navigation = clean_html(converted['navigation'])
        context.middle_portlets = middle_portlets
        context.right_portlets = right_portlets
        context.css = converted['css']
        # *modified* event
        objectEventNotify(ObjectModifiedEvent(context))

        location = resource_url(context.__parent__['intranets'], request)
        return HTTPFound(location=location)
コード例 #22
0
ファイル: forum.py プロジェクト: boothead/karl
    def handle_submit(self, converted):
        context = self.context
        request = self.request
        workflow = self.workflow

        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        if workflow is not None:
            if 'security_state' in converted:
                workflow.transition_to_state(context, request,
                                             converted['security_state'])

        context.title = converted['title']
        context.text = converted['text']
        context.description = extract_description(converted['text'])

        # Save the tags on it
        set_tags(context, request, converted['tags'])

        # Save new attachments
        creator = authenticated_userid(request)
        if support_attachments(context):
            upload_attachments(converted['attachments'], context['attachments'],
                               creator, request)

        # Modified
        context.modified_by = authenticated_userid(request)
        objectEventNotify(ObjectModifiedEvent(context))

        location = model_url(context, request,
                             query={'status_message':'Forum Topic Edited'})
        return HTTPFound(location=location)
コード例 #23
0
    def handle_submit(self, params):
        context = self.context
        objectEventNotify(ObjectWillBeModifiedEvent(context))

        if self.use_folder_options:
            noLongerProvides(context, IReferencesFolder)
            noLongerProvides(context, INetworkNewsMarker)
            noLongerProvides(context, INetworkEventsMarker)
            marker = params.get('marker')
            if marker == 'reference_manual':
                alsoProvides(context, IReferencesFolder)
            elif marker == 'network_news':
                alsoProvides(context, INetworkNewsMarker)
            elif marker == 'network_events':
                alsoProvides(context, INetworkEventsMarker)

        keywords = params.get('keywords')
        if keywords is not None:
            context.search_keywords = keywords

        weight = params.get('weight')
        if weight is not None:
            context.search_weight = weight

        if self.use_unlock and params.get('unlock'):
            lock.clear(context)

        objectEventNotify(ObjectModifiedEvent(context))
        return HTTPFound(location=resource_url(
            self.context,
            self.request,
            query={'status_message': 'Advanced settings changed.'}))
コード例 #24
0
ファイル: advanced.py プロジェクト: reebalazs/karl
    def handle_submit(self, params):
        context = self.context
        objectEventNotify(ObjectWillBeModifiedEvent(context))

        if self.use_folder_options:
            noLongerProvides(context, IReferencesFolder)
            noLongerProvides(context, INetworkNewsMarker)
            noLongerProvides(context, INetworkEventsMarker)
            marker = params.get('marker')
            if marker == 'reference_manual':
                alsoProvides(context, IReferencesFolder)
            elif marker == 'network_news':
                alsoProvides(context, INetworkNewsMarker)
            elif marker == 'network_events':
                alsoProvides(context, INetworkEventsMarker)

        keywords = params.get('keywords')
        if keywords is not None:
            context.search_keywords = keywords

        weight = params.get('weight')
        if weight is not None:
            context.search_weight = weight

        objectEventNotify(ObjectModifiedEvent(context))
        return HTTPFound(location=model_url(self.context, self.request,
                    query={'status_message': 'Advanced settings changed.'}))
コード例 #25
0
ファイル: references.py プロジェクト: boothead/karl
def edit_referencesection_view(context, request):

    tags_list = request.POST.getall('tags')
    form = EditReferenceSectionForm(tags_list=tags_list)

    if 'form.cancel' in request.POST:
        return HTTPFound(location=model_url(context, request))

    if 'form.submitted' in request.POST:
        try:
            converted = form.validate(request.POST)
            # *will be* modified event
            objectEventNotify(ObjectWillBeModifiedEvent(context))

            context.title = converted['title']
            context.description = converted['description']

            # Save the tags on it
            set_tags(context, request, converted['tags'])

            # Modified
            context.modified_by = authenticated_userid(request)
            objectEventNotify(ObjectModifiedEvent(context))

            location = model_url(context, request)
            msg = "?status_message=Reference%20section%20edited"
            return HTTPFound(location=location+msg)

        except Invalid, e:
            fielderrors = e.error_dict
            fill_values = form.convert(request.POST)
コード例 #26
0
    def handle_submit(self, converted):
        context = self.context
        request = self.request
        userid = authenticated_userid(request)
        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))

        context.title = converted['title']
        context.text = converted['text']
        context.description = extract_description(converted['text'])

        # tags and attachments
        set_tags(context, request, converted['tags'])
        creator = userid
        attachments_folder = context['attachments']
        upload_attachments(converted['attachments'], attachments_folder,
                           creator, request)

        # modified
        context.modified_by = userid
        objectEventNotify(ObjectModifiedEvent(context))

        self.filestore.clear()
        location = resource_url(context, request)
        msg = "?status_message=Page%20edited"
        return HTTPFound(location=location + msg)
コード例 #27
0
    def remove(self, name, send_events=True):
        """See IFolder."""
        name = unicodify(name)
        other = self.data[name]

        if send_events:
            objectEventNotify(ObjectWillBeRemovedEvent(other, self, name))

        if hasattr(other, '__parent__'):
            del other.__parent__

        if hasattr(other, '__name__'):
            del other.__name__

        # backwards compatibility: add a Length _num_objects to folders that
        # have none
        if self._num_objects is None:
            self._num_objects = Length(len(self.data))

        del self.data[name]
        self._num_objects.change(-1)

        if self._order is not None:
            self._order = tuple([x for x in self._order if x != name])

        if send_events:
            objectEventNotify(ObjectRemovedEvent(other, self, name))

        return other
コード例 #28
0
    def add(self, name, other, send_events=True):
        """See IFolder."""
        if not isinstance(name, basestring):
            raise TypeError("Name must be a string rather than a %s" %
                            name.__class__.__name__)
        if not name:
            raise TypeError("Name must not be empty")

        name = unicodify(name)

        if name in self.data:
            raise KeyError('An object named %s already exists' % name)

        if send_events:
            objectEventNotify(ObjectWillBeAddedEvent(other, self, name))
        other.__parent__ = self
        other.__name__ = name

        # backwards compatibility: add a Length _num_objects to folders that
        # have none
        if self._num_objects is None:
            self._num_objects = Length(len(self.data))

        self.data[name] = other
        self._num_objects.change(1)

        if self._order is not None:
            self._order += (name, )

        if send_events:
            objectEventNotify(ObjectAddedEvent(other, self, name))
コード例 #29
0
def demo_events(load_zcml):
    gsm = getGlobalSiteManager()

    if load_zcml:
        from zope.configuration.xmlconfig import xmlconfig
        fname = __file__[:-3] + '.zcml'
        xmlconfig(open(fname))
    else:
        gsm.registerHandler(me.handle_some_event)
        gsm.registerHandler(me.handle_object_modified_event,
                            [me.IData, me.IObjectModifiedEvent])

    obj = me.Data()
    evt = me.SomeEvent()
    evt.object = obj

    if load_zcml:
        notify(evt)
    else:
        handle(evt)

    assert obj.data == 'changed'

    obj.data = 'unchanged'

    if load_zcml:
        notify(me.ObjectModifiedEvent(obj))
    else:
        objectEventNotify(me.ObjectModifiedEvent(obj))

    assert obj.data == 'changed'

    print "Done"
コード例 #30
0
    def handle_submit(self, converted):
        request = self.request
        context = self.context
        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        if converted.get('middle_portlets'):
            middle_portlets = split_lines(converted['middle_portlets'])
        else:
            middle_portlets = []
        if converted.get('right_portlets'):
            right_portlets = split_lines(converted['right_portlets'])
        else:
            right_portlets = []
        context.title = converted['title']
        context.address = converted['address']
        context.city = converted['city']
        context.state = converted['state']
        context.country = converted['country']
        context.zipcode = converted['zipcode']
        context.telephone = converted['telephone']
        context.navigation = clean_html(converted['navigation'])
        context.middle_portlets = middle_portlets
        context.right_portlets = right_portlets
        # *modified* event
        objectEventNotify(ObjectModifiedEvent(context))

        location = resource_url(context.__parent__['intranets'], request)
        return HTTPFound(location=location)
コード例 #31
0
ファイル: blog.py プロジェクト: araymund/karl
    def handle_submit(self, converted):
        context = self.context
        request = self.request
        workflow = self.workflow
        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))
        if 'security_state' in converted:
            if workflow is not None:
                workflow.transition_to_state(context, request,
                                             converted['security_state'])

        context.title = converted['title']
        context.text = converted['text']
        context.description = extract_description(converted['text'])

        # Tags and attachments
        set_tags(context, request, converted['tags'])
        creator = authenticated_userid(request)
        attachments_folder = context['attachments']
        upload_attachments(
            filter(lambda x: x is not None, converted['attachments']),
            attachments_folder, creator, request)

        # modified
        context.modified_by = authenticated_userid(request)
        objectEventNotify(ObjectModifiedEvent(context))

        location = resource_url(context, request)
        self.filestore.clear()
        return HTTPFound(location=location)
コード例 #32
0
    def update(self, item):
        objectEventNotify(ObjectWillBeModifiedEvent(item))

        item.title = self._element_value(self.element, 'title')
        item.description = self._element_value(self.element, 'description')

        objectEventNotify(ObjectModifiedEvent(item))
コード例 #33
0
ファイル: page.py プロジェクト: araymund/karl
    def handle_submit(self, converted):
        context = self.context
        request = self.request
        userid = authenticated_userid(request)
        # *will be* modified event
        objectEventNotify(ObjectWillBeModifiedEvent(context))

        context.title = converted['title']
        context.text = converted['text']
        context.description = extract_description(converted['text'])

        # tags and attachments
        set_tags(context, request, converted['tags'])
        creator = userid
        attachments_folder = context['attachments']
        upload_attachments(converted['attachments'], attachments_folder,
                           creator, request)

        # modified
        context.modified_by = userid
        objectEventNotify(ObjectModifiedEvent(context))

        self.filestore.clear()
        location = resource_url(context, request)
        msg = "?status_message=Page%20edited"
        return HTTPFound(location=location+msg)
コード例 #34
0
 def __setitem__(_next, self, key, val):
     _next(self, key, val)
     if self._notify_suppress:
         return
     objectEventNotify(self.events['added'](val,
                                            newParent=self,
                                            newName=key))
コード例 #35
0
ファイル: advanced.py プロジェクト: lslaz1/karl
    def handle_submit(self, params):
        context = self.context
        objectEventNotify(ObjectWillBeModifiedEvent(context))

        if self.use_folder_options:
            noLongerProvides(context, IReferencesFolder)
            noLongerProvides(context, INetworkNewsMarker)
            noLongerProvides(context, INetworkEventsMarker)
            marker = params.get("marker")
            if marker == "reference_manual":
                alsoProvides(context, IReferencesFolder)
            elif marker == "network_news":
                alsoProvides(context, INetworkNewsMarker)
            elif marker == "network_events":
                alsoProvides(context, INetworkEventsMarker)

        keywords = params.get("keywords")
        if keywords is not None:
            context.search_keywords = keywords

        weight = params.get("weight")
        if weight is not None:
            context.search_weight = weight

        if self.use_unlock and params.get("unlock"):
            lock.clear(context)

        objectEventNotify(ObjectModifiedEvent(context))
        return HTTPFound(
            location=resource_url(self.context, self.request, query={"status_message": "Advanced settings changed."})
        )
コード例 #36
0
ファイル: lifecycle.py プロジェクト: bluedynamics/node
 def detach(_next, self, key):
     self._notify_suppress = True
     node = _next(self, key)
     self._notify_suppress = False
     objectEventNotify(self.events['detached'](node, oldParent=self,
                                               oldName=key))
     return node
コード例 #37
0
 def __setitem__(self, name, value):
     if name in self.keys():
         msg = u"Node already exists: %s" % ('/'.join(self.path + [name]))
         raise ValueError(msg)
     if IFile.providedBy(value) \
       or IDirectory.providedBy(value):
         super(Directory, self).__setitem__(name, value)
     objectEventNotify(FileAddedEvent(value))
コード例 #38
0
 def buildOptions(self):
     super(ZenEventD, self).buildOptions()
     maintenanceBuildOptions(self.parser)
     self.parser.add_option('--synceveryevent', dest='syncEveryEvent',
                 action="store_true", default=False,
                 help='Force sync() before processing every event; default is to sync() no more often '
                 'than once every 1/2 second.')
     objectEventNotify(BuildOptionsEvent(self))
コード例 #39
0
ファイル: unread.py プロジェクト: zhangqiang99/voteit.core
 def mark_as_read(self, userid):
     storage = self.unread_storage
     if userid in storage:
         storage.remove(userid)
         objectEventNotify(
             ObjectUpdatedEvent(self.context,
                                indexes=('unread', ),
                                metadata=False))
コード例 #40
0
 def get_schema(self):
     schema = self.access_policy.schema()
     if schema is None:
         raise HTTPForbidden(_("forbidden_on_closed_meetings",
                               default = "You need to contact the moderator "
                               "to get access to this meeting."))
     objectEventNotify(SchemaCreatedEvent(schema))
     return schema
コード例 #41
0
 def save_success(self, appstruct):
     from_meeting = self.request.root[appstruct['meeting_name']]
     assert IMeeting.providedBy(from_meeting)
     for (userid, roles) in from_meeting.local_roles.items():
         self.context.local_roles.add(userid, roles, event=False)
     event_obj = ObjectUpdatedEvent(self.context, changed=['local_roles'])
     objectEventNotify(event_obj)
     return HTTPFound(location=self.request.resource_url(self.context))
コード例 #42
0
ファイル: test_logs.py プロジェクト: VoteIT/voteit.core
    def test_content_not_updated_when_only_read(self):
        root = self._fixture()
        meeting = root["m"]

        objectEventNotify(ObjectUpdatedEvent(meeting, indexes=("unread",)))

        adapter = self.config.registry.queryAdapter(meeting, ILogHandler)
        self.assertEqual(len(adapter.log_storage), 0)
コード例 #43
0
ファイル: company.py プロジェクト: RedTurtle/restarter.policy
 def manage_delLocalRoles(self, userids=[]):
     for user_id in userids:
         try:
             self.company_employees.remove(user_id)
         except ValueError:
             pass
         objectEventNotify(CompanyShareNotify(self, user_id, add_user=False))
     super(Company, self).manage_delLocalRoles(userids=userids)
コード例 #44
0
ファイル: disqus.py プロジェクト: RedTurtle/restarter.policy
 def __call__(self):
     if not self.request.method == 'POST':
         raise NotFound(self, 'disqus-not-found')
     elif not self.request.URL.startswith(self.request.get('HTTP_REFERER')):
         raise NotFound(self, 'disqus-not-found')
     comment_text = self.request.form.get('comment[text]')
     comment_id = self.request.form.get('comment[id]')
     objectEventNotify(DisqusNotify(self.context, comment_id, comment_text))
コード例 #45
0
ファイル: test_logs.py プロジェクト: zhangqiang99/voteit.core
    def test_content_not_updated_when_only_read(self):
        root = self._fixture()
        meeting = root['m']

        objectEventNotify(ObjectUpdatedEvent(meeting, indexes=('unread', )))

        adapter = self.config.registry.queryAdapter(meeting, ILogHandler)
        self.assertEqual(len(adapter.log_storage), 0)
コード例 #46
0
def clear_unread_from_retracted_proposals(obj, event):
    if obj.get_workflow_state() != 'retracted':
        return
    reg = get_current_registry()
    unread = reg.queryAdapter(obj, IUnread)
    if unread and unread.unread_storage:
        unread.unread_storage.clear()
        objectEventNotify(ObjectUpdatedEvent(obj, indexes = ('unread',), metadata = False))
コード例 #47
0
ファイル: usersync.py プロジェクト: araymund/karl
    def syncuser(self, data, missing):
        for key in self.required_keys:
            if not data.get(key):
                raise ValueError("Invalid user data: '%s' key is required" % key)
        users = find_users(self.context)
        profiles = find_profiles(self.context)
        username = data.pop("username")
        profile = profiles.get(username)
        active = profile and profile.security_state == "active"
        if username in missing:
            missing.remove(username)
        if not profile:
            profile = self.createuser(data)
            self.update(profile, data)
            profiles[username] = profile
            activate = data.pop("active", "true")
            security_state = "active" if activate else "inactive"
            log.info("Created user: %s", username)
        else:
            objectEventNotify(ObjectWillBeModifiedEvent(profile))
            self.update(profile, data)
            objectEventNotify(ObjectModifiedEvent(profile))
            activate = data.pop("active", None)
            if activate is not None:
                security_state = "active" if activate else "inactive"
            else:
                security_state = profile.security_state
                activate = active
            if type(missing) is Empty:
                log.info("Updated user: %s", username)
        profile.usersync_managed = True

        if active:
            info = users.get(username)
            password = data.pop("password", info["password"])
            groups = data.pop("groups", info["groups"])
            login = data.pop("login", info["login"])
            users.remove(username)

        elif activate:  # reactivate
            log.info("Reactivating user: %s", username)
            login = data.pop("login", username)
            password = data.pop("password", None)
            groups = data.pop("groups", [])
            if not password:
                raise ValueError("Invalid user data: 'password' key is required to " "reactivate user")

        if activate:
            users.add(username, login, password, groups, encrypted=True)

        if security_state != getattr(profile, "security_state", None):
            workflow = get_workflow(IProfile, "security", profile)
            workflow.transition_to_state(profile, None, security_state)
            if security_state == "inactive":
                log.info("Deactivated user: %s", username)

        if data:
            raise ValueError("Unrecognized keys in sync data for user: %s: %s" % (username, data.keys()))
コード例 #48
0
ファイル: test_logs.py プロジェクト: VoteIT/voteit.core
    def test_content_updated(self):
        root = self._fixture()
        meeting = root["m"]

        objectEventNotify(ObjectUpdatedEvent(meeting))

        adapter = self.config.registry.queryAdapter(meeting, ILogHandler)
        self.assertEqual(len(adapter.log_storage), 1)
        self.assertEqual(adapter.log_storage[0].tags, ("updated",))
コード例 #49
0
ファイル: vote.py プロジェクト: tobsan/voteit.core
 def set_vote_data(self, value, notify = True):
     """ Set vote data """
     marker = object()
     current_val = self.get_vote_data(marker)
     if value == current_val:
         return
     self.__vote_data__ = value
     if notify:
         objectEventNotify(ObjectUpdatedEvent(self))
コード例 #50
0
ファイル: vote.py プロジェクト: zhangqiang99/voteit.core
 def set_vote_data(self, value, notify=True):
     """ Set vote data """
     marker = object()
     current_val = self.get_vote_data(marker)
     if value == current_val:
         return
     self.__vote_data__ = value
     if notify:
         objectEventNotify(ObjectUpdatedEvent(self))
コード例 #51
0
ファイル: test_logs.py プロジェクト: zhangqiang99/voteit.core
    def test_content_updated(self):
        root = self._fixture()
        meeting = root['m']

        objectEventNotify(ObjectUpdatedEvent(meeting))

        adapter = self.config.registry.queryAdapter(meeting, ILogHandler)
        self.assertEqual(len(adapter.log_storage), 1)
        self.assertEqual(adapter.log_storage[0].tags, ('updated', ))
コード例 #52
0
ファイル: unread.py プロジェクト: zhangqiang99/voteit.core
 def reset_unread(self):
     try:
         del self.context.__unread_storage__
         objectEventNotify(
             ObjectUpdatedEvent(self.context,
                                indexes=('unread', ),
                                metadata=False))
     except AttributeError:  #If there is no __unread_storage__ we shouldn't do something
         pass
コード例 #53
0
 def __init__(self, *args, **kwargs):
     super(ZenEventD, self).__init__(*args, **kwargs)
     EventPipelineProcessor.SYNC_EVERY_EVENT = self.options.syncEveryEvent
     self._heartbeatSender = QueueHeartbeatSender('localhost',
                                                  'zeneventd',
                                                  self.options.maintenancecycle *3)
     self._maintenanceCycle = MaintenanceCycle(self.options.maintenancecycle,
                               self._heartbeatSender)
     objectEventNotify(DaemonCreatedEvent(self))
コード例 #54
0
 def __setitem__(self, name, value):
     if not name:
         raise KeyError('Empty key not allowed in directories')
     name = self._encode_name(name)
     if IFile.providedBy(value) or IDirectory.providedBy(value):
         if IDirectory.providedBy(value):
             value.backup = self.backup
         self.storage[name] = value
         objectEventNotify(FileAddedEvent(value))
         return
     raise ValueError('Unknown child node.')
コード例 #55
0
 def __init__(self, *args, **kwargs):
     super(ZenEventD, self).__init__(*args, **kwargs)
     EventPipelineProcessor.SYNC_EVERY_EVENT = self.options.syncEveryEvent
     EventPipelineProcessor.PROCESS_EVENT_TIMEOUT = self.options.process_event_timeout
     self._heartbeatSender = QueueHeartbeatSender(
         'localhost', 'zeneventd', self.options.heartbeatTimeout)
     self._maintenanceCycle = MaintenanceCycle(
         self.options.maintenancecycle, self._heartbeatSender)
     objectEventNotify(DaemonCreatedEvent(self))
     config = ZenEventDConfig(self.options)
     provideUtility(config, IDaemonConfig, 'zeneventd_config')
コード例 #56
0
ファイル: workflow.py プロジェクト: Jickelsen/Arche
 def do_transition(self, name, request = None, force = False):
     #Check permission, treat input as unsafe!
     if request is None:
         request = get_current_request()
     trans = self.transitions[name]
     if trans.from_state != self.state and force is False:
         raise ValueError("The transition '%s' cant go from state '%s'" % (trans.name, self.state))
     if not request.has_permission(trans.permission, self.context) and force is False:
         raise HTTPForbidden("Wrong permissions for this transition")
     objectEventNotify(WorkflowBeforeTransition(self.context, self, trans))
     self.state = trans.to_state
     objectEventNotify(WorkflowAfterTransition(self.context, self, trans))
     return trans
コード例 #57
0
 def handle_submit(self, converted):
     context = self.context
     request = self.request
     objectEventNotify(ObjectWillBeModifiedEvent(context))
     _normalize_websites(converted)
     # Handle the easy ones
     for name in self.simple_field_names:
         setattr(context, name, converted.get(name))
     # Handle the picture and clear the temporary filestore
     try:
         handle_photo_upload(context, converted)
     except Invalid, e:
         raise ValidationError(**e.error_dict)