def execute(self, args):
        model_cls = creatable_models.get(args.type)

        form = RawDataValidatingFactory(args.keywords,
                                        model_cls,
                                        marker=getattr(self.current_obj,
                                                       '__contains__', None))

        if form.errors:
            form.write_errors(to=self)
            return

        obj = form.create()

        vh = PreValidateHookMixin(obj)
        try:
            blocking_yield(vh.validate_hook(self.protocol.principal))
        except Exception:
            msg = 'Cancelled executing "%s" due to validate_hook failure' % self.name
            self.write('%s\n' % msg)
            log.msg(msg, system='set')
            return

        interaction = self.protocol.interaction
        if not interaction:
            auth = getUtility(IAuthentication, context=None)
            principal = auth.getPrincipal(None)
        else:
            principal = interaction.participations[0].principal

        obj.__owner__ = principal

        obj_id = self.current_obj.add(obj)

        self.write("%s\n" % obj_id)
示例#2
0
    def execute(self, args):
        model_cls = creatable_models.get(args.type)

        form = RawDataValidatingFactory(args.keywords, model_cls,
                                        marker=getattr(self.current_obj, '__contains__', None))

        if form.errors:
            form.write_errors(to=self)
            return

        obj = form.create()

        vh = PreValidateHookMixin(obj)
        try:
            blocking_yield(vh.validate_hook(self.protocol.principal))
        except Exception:
            msg = 'Cancelled executing "%s" due to validate_hook failure' % self.name
            self.write('%s\n' % msg)
            log.msg(msg, system='set')
            return

        interaction = self.protocol.interaction
        if not interaction:
            auth = getUtility(IAuthentication, context=None)
            principal = auth.getPrincipal(None)
        else:
            principal = interaction.participations[0].principal

        obj.__owner__ = principal

        obj_id = self.current_obj.add(obj)

        self.write("%s\n" % obj_id)
示例#3
0
    def execute(self, args):
        obj = (yield db.ro_transact(self.traverse)(args.path))
        if not obj:
            self.write("No such object: %s\n" % args.path)
            return

        vh = PreValidateHookMixin(obj)
        try:
            yield vh.validate_hook(self.protocol.principal)
        except Exception:
            msg = 'Canceled executing "set" due to validate_hook failure'
            self.write('%s\n' % msg)
            log.msg(msg, system='set')
            return

        @db.transact
        def apply():
            obj = self.traverse(args.path)
            raw_data = args.keywords

            if args.verbose:
                for key, value in raw_data.items():
                    self.write("Setting %s=%s\n" % (key, value))

            form = RawDataApplier(raw_data, obj)

            if not form.errors:
                form.apply()
            else:
                form.write_errors(to=self)

        yield apply()
    def execute(self, args):
        obj = (yield db.ro_transact(self.traverse)(args.path))
        if not obj:
            self.write("No such object: %s\n" % args.path)
            return

        vh = PreValidateHookMixin(obj)
        try:
            yield vh.validate_hook(self.protocol.principal)
        except Exception:
            msg = 'Canceled executing "set" due to validate_hook failure'
            self.write('%s\n' % msg)
            log.msg(msg, system='set')
            return

        @db.transact
        def apply():
            obj = self.traverse(args.path)
            raw_data = args.keywords

            if args.verbose:
                for key, value in raw_data.items():
                    self.write("Setting %s=%s\n" % (key, value))

            principals = map(lambda p: p.id, effective_principals(self.user))

            if 'admins' in principals:
                setattr(obj, '_admin_access', True)
            elif getattr(obj, '_admin_access', False):
                log.msg(
                    'WARNING: admin access in SetAttrCmd when accessed by non-admin (%s: %s)!'
                    % (self.user, principals),
                    system='set-cmd')

            try:
                form = RawDataApplier(raw_data, obj)

                if not form.errors:
                    form.apply()
                else:
                    form.write_errors(to=self)
            finally:
                if hasattr(obj, '_admin_access'):
                    delattr(obj, '_admin_access')

        yield apply()
示例#5
0
    def execute(self, args):
        obj = (yield db.ro_transact(self.traverse)(args.path))
        if not obj:
            self.write("No such object: %s\n" % args.path)
            return

        vh = PreValidateHookMixin(obj)
        try:
            yield vh.validate_hook(self.protocol.principal)
        except Exception:
            msg = 'Canceled executing "set" due to validate_hook failure'
            self.write('%s\n' % msg)
            log.msg(msg, system='set')
            return

        @db.transact
        def apply():
            obj = self.traverse(args.path)
            raw_data = args.keywords

            if args.verbose:
                for key, value in raw_data.items():
                    self.write("Setting %s=%s\n" % (key, value))

            principals = map(lambda p: p.id, effective_principals(self.user))

            if 'admins' in principals:
                setattr(obj, '_admin_access', True)
            elif getattr(obj, '_admin_access', False):
                log.msg('WARNING: admin access in SetAttrCmd when accessed by non-admin (%s: %s)!'
                        % (self.user, principals), system='set-cmd')

            try:
                form = RawDataApplier(raw_data, obj)

                if not form.errors:
                    form.apply()
                else:
                    form.write_errors(to=self)
            finally:
                if hasattr(obj, '_admin_access'):
                    delattr(obj, '_admin_access')

        yield apply()