Example #1
0
    def __init__(self):
        self.clear()
        request_finished.connect(self._request_finished_receiver)
        if 'reversion' in django_settings.INSTALLED_APPS:
            from reversion.signals import post_revision_commit

            post_revision_commit.connect(self._post_revision_commit)
Example #2
0
    def testRevisionSignals(self):
        pre_revision_receiver_called = []

        def pre_revision_receiver(**kwargs):
            self.assertEqual(kwargs["instances"], [self.test11])
            self.assertTrue(isinstance(kwargs["revision"], Revision))
            self.assertEqual(len(kwargs["versions"]), 1)
            pre_revision_receiver_called.append(True)

        post_revision_receiver_called = []

        def post_revision_receiver(**kwargs):
            self.assertEqual(kwargs["instances"], [self.test11])
            self.assertTrue(isinstance(kwargs["revision"], Revision))
            self.assertEqual(len(kwargs["versions"]), 1)
            post_revision_receiver_called.append(True)

        pre_revision_commit.connect(pre_revision_receiver)
        post_revision_commit.connect(post_revision_receiver)
        # Create a revision.
        with create_revision():
            self.test11.save()
        # Check the signals were called.
        self.assertTrue(pre_revision_receiver_called)
        self.assertTrue(post_revision_receiver_called)
Example #3
0
 def setup(self):
     from aristotle_mdr.models import _concept, Workgroup, ReviewRequest, concept_visibility_updated
     # post_save.connect(self.handle_concept_save, sender=_concept)
     post_revision_commit.connect(self.handle_concept_revision)
     pre_delete.connect(self.handle_concept_delete, sender=_concept)
     post_save.connect(self.update_visibility_review_request,
                       sender=ReviewRequest)
     m2m_changed.connect(self.update_visibility_review_request,
                         sender=ReviewRequest.concepts.through)
     concept_visibility_updated.connect(self.handle_concept_recache)
     super(AristotleSignalProcessor, self).setup()
Example #4
0
def setup_signals():
    Team = apps.get_model(app_label='team', model_name='Team')
    Step = apps.get_model(app_label='project', model_name='Step')
    UserTeamRole = apps.get_model(app_label='team', model_name='UserTeamRole')

    post_save.connect(post_save_step_handler, sender=Step)
    post_save.connect(post_save_team_handler, sender=Team)

    post_save.connect(post_save_user_team_role, sender=UserTeamRole)
    post_delete.connect(post_delete_user_team_role, sender=UserTeamRole)

    post_revision_commit.connect(post_save_team)
Example #5
0
    def __init__(self,
                 id=None,
                 parent_log=undefined,
                 related_objects=None,
                 slug=None,
                 extra_data=None,
                 start=None,
                 stop=None,
                 error_message=None,
                 time=None,
                 release=None):
        self.id = id or (uuid4() if self.logger_name else None)
        self.parent = SecurityLogger.loggers[
            -1] if SecurityLogger.loggers else None

        self.related_objects = set()
        if related_objects:
            self.add_related_objects(*related_objects)

        self.start = start
        self.stop = stop
        self.error_message = error_message
        self.release = release or settings.RELEASE

        self.slug = slug
        if self.parent:
            self.related_objects |= self.parent.related_objects
            if not self.slug:
                self.slug = self.parent.slug
        parent_with_id = self._get_parent_with_id()
        self.parent_log = (
            '{}|{}'.format(parent_with_id.logger_name, parent_with_id.id)
            if parent_with_id else
            None) if parent_log is undefined else parent_log

        self._extra_data = extra_data
        if self._extra_data is None:
            self._extra_data = self.parent.extra_data if self.parent else {}

        if self.store:
            SecurityLogger.loggers.append(self)

            if 'reversion' in django_settings.INSTALLED_APPS:
                from reversion.signals import post_revision_commit

                post_revision_commit.connect(self._post_revision_commit,
                                             weak=False)
        self.backend_logs = AttrDict()
        self.stream = None
Example #6
0
 def _create_revision(self):
     post_revision_commit.connect(self._handle_revision_commit, dispatch_uid='handle_revision_commit')
     with reversion.create_revision():
         reversion.set_comment(self.comment)
         reversion.set_user(self.user)
         # revision plugins and title for given language
         for plugin_instance in self.get_plugin_instances():
             reversion.add_to_revision(plugin_instance)
         reversion.add_to_revision(self.get_page_title())
     post_revision_commit.disconnect(dispatch_uid='handle_revision_commit')
     try:
         assert self._revision is not None
     except AssertionError:
         raise PageRevisionError(_(u'Revision creation failed'))
     return self._revision
Example #7
0
    def save_model(self, request, obj, form, change):
        """
        In case new_version button is ticked, the new revision is created;
        in case that new_version button IS NOT ticked, there is no new
        revision created, only the data in Probe table in db is updated.
        """
        sh = SharedInfo()

        if obj and sh.getgroup():
            obj.group = sh.getgroup().name
            sh.delgroup()
        elif not obj and sh.getgroup():
            obj.group = sh.getgroup()
            sh.delgroup()
        if request.user.has_perm('poem.groupown_probe') \
                or request.user.is_superuser:
            obj.user = request.user.username
            if form.cleaned_data['new_version'] and change or not change:
                obj.save()
                if form.cleaned_data['update_metric']:
                    post_revision_commit.connect(update_metric)
                return
            elif not form.cleaned_data['new_version'] and change:
                version = Version.objects.get_for_object(obj)
                pk = version[0].object_id
                pk0 = version[0].id
                data = json.loads(Version.objects.get(pk=pk0).serialized_data)
                new_serialized_field = {
                    'name': form.cleaned_data['name'],
                    'version': form.cleaned_data['version'],
                    'description': form.cleaned_data['description'],
                    'comment': form.cleaned_data['comment'],
                    'repository': form.cleaned_data['repository'],
                    'docurl': form.cleaned_data['docurl'],
                    'group': obj.group,
                    'user': obj.user
                }
                data[0]['fields'] = new_serialized_field
                Version.objects.filter(pk=pk0).update(
                    serialized_data=json.dumps(data))
                Probe.objects.filter(pk=pk).update(**new_serialized_field)
        else:
            raise PermissionDenied()
Example #8
0
    def testRevisionSignals(self):
        pre_revision_receiver_called = []

        def pre_revision_receiver(**kwargs):
            self.assertEqual(kwargs["instances"], [self.test11])
            self.assertTrue(isinstance(kwargs["revision"], Revision))
            self.assertEqual(len(kwargs["versions"]), 1)
            pre_revision_receiver_called.append(True)
        post_revision_receiver_called = []

        def post_revision_receiver(**kwargs):
            self.assertEqual(kwargs["instances"], [self.test11])
            self.assertTrue(isinstance(kwargs["revision"], Revision))
            self.assertEqual(len(kwargs["versions"]), 1)
            post_revision_receiver_called.append(True)
        pre_revision_commit.connect(pre_revision_receiver)
        post_revision_commit.connect(post_revision_receiver)
        # Create a revision.
        with create_revision():
            self.test11.save()
        # Check the signals were called.
        self.assertTrue(pre_revision_receiver_called)
        self.assertTrue(post_revision_receiver_called)
Example #9
0
    for version in versions:
        instance = version.object
        model = instance.__class__

        if not auditlog.is_enabled(model):
            continue

        tag = auditlog.model_tag(model)

        action = f"{tag}:save"

        with auditlog.Context() as ctx:
            ctx.log(action, log_object=instance)


post_revision_commit.connect(auditlog_on_save)


@receiver(post_delete)
def auditlog_on_delete(sender, **kwargs):
    """
    auditlog object deletions
    """

    if not reversion.is_registered(sender):
        return

    if not auditlog.is_enabled(sender):
        return

    tag = auditlog.model_tag(sender)
Example #10
0
File: rever.py Project: vrdel/poem
from django.contrib.contenttypes.models import ContentType


class ExtRevision(models.Model):
    class Meta:
        app_label = 'poem'

    version = models.CharField(max_length=128, null=False, help_text='Version')
    probeid = models.BigIntegerField()
    revision = models.OneToOneField(Revision, on_delete=models.CASCADE)


def on_revision_commit(revision, sender, signal, versions, **kwargs):
    if len(versions) == 1:
        version = versions[0]
    ct = ContentType.objects.get_for_id(version.content_type_id)
    model_changed = ct.model_class()
    instance = ct.get_object_for_this_type(id=int(version.object_id))
    if (len(versions) == 1 and isinstance(instance, Probe)):
        ExtRevision.objects.create(probeid=instance.id,
                                   version=instance.version,
                                   revision=revision)
        instance.datetime = revision.date_created
        instance.save()
    # delete extra revision that plugin creates with empty comment
    if revision.id and not revision.comment:
        revision.delete()


post_revision_commit.connect(on_revision_commit)
Example #11
0
if 'security.reversion_log' in django_settings.INSTALLED_APPS:
    if 'reversion' not in django_settings.INSTALLED_APPS:
        raise ImproperlyConfigured('For reversion log is necessary install "django-reversion"')

    # Supports two version of reversion library
    try:
        from reversion.signals import post_revision_commit

        def create_revision_request_log(sender, revision, versions, **kwargs):
            from security.reversion_log.models import InputRequestRevision

            connection = get_connection()
            if getattr(connection, 'input_logged_request', False):
                InputRequestRevision.objects.create(logged_request=connection.input_logged_request, revision=revision)

        post_revision_commit.connect(create_revision_request_log)
    except ImportError:
        pass


class LogMiddleware(MiddlewareMixin):

    response_redirect_class = http.HttpResponsePermanentRedirect

    def process_request(self, request):
        connection = get_connection()

        view = get_view_from_request_or_none(request)
        if (get_ip(request) not in settings.LOG_REQUEST_IGNORE_IP 
               and request.path not in settings.LOG_REQUEST_IGNORE_URL_PATHS
               and not getattr(view, 'log_exempt', False)):
 def setup(self):
     from aristotle_mdr.models import _concept, Workgroup
     # post_save.connect(self.handle_concept_save, sender=_concept)
     post_revision_commit.connect(self.handle_concept_revision)
     pre_delete.connect(self.handle_concept_delete, sender=_concept)
     super(AristotleSignalProcessor, self).setup()
Example #13
0
 def __enter__(self):
     self.action = {}
     self.revision = {}
     post_revision_commit.connect(self.post_revision_commit)
     return self
Example #14
0
 def __enter__(self):
     self.action = {}
     self.revision = {}
     post_revision_commit.connect(self.post_revision_commit)
     return self
Example #15
0
from django.db.models.signals import post_save, pre_delete
from django.dispatch.dispatcher import receiver
from reversion.revisions import create_revision
from reversion.signals import post_revision_commit, pre_revision_commit

from cmj.sigad.models import Documento, Revisao, CMSMixin


def save_revision_documents(sender, **kwargs):

    versions = list(kwargs.get('versions', []))

    if not versions:
        return

    for version in versions:
        if CMSMixin in type.mro(type(version.object)):
            with create_revision(False):
                Revisao.gerar_revisao(
                    version.object, version.revision.user)

post_revision_commit.connect(save_revision_documents, sender=create_revision)


@receiver(pre_delete, sender=Documento, dispatch_uid='documento_delete_signal')
def log_deleted_documento(sender, instance, using, **kwargs):
    print('passou log_deleted_documento pk = %s, parent = %s' % (
        instance.pk,
        instance.parent.pk if instance.parent else ''))
Example #16
0
 def setup(self):
     from aristotle_mdr.models import _concept, Workgroup
     # post_save.connect(self.handle_concept_save, sender=_concept)
     post_revision_commit.connect(self.handle_concept_revision)
     pre_delete.connect(self.handle_concept_delete, sender=_concept)
     super(AristotleSignalProcessor, self).setup()
Example #17
0
from django.db.models.signals import pre_delete
from django.dispatch.dispatcher import receiver
from reversion.revisions import create_revision
from reversion.signals import post_revision_commit

from cmj.sigad.models import Documento, Revisao, CMSMixin


def save_revision_documents(sender, **kwargs):

    versions = list(kwargs.get('versions', []))

    if not versions:
        return

    for version in versions:
        if CMSMixin in type.mro(type(version.object)):
            with create_revision(False):
                Revisao.gerar_revisao(version.object, version.revision.user)


post_revision_commit.connect(save_revision_documents, sender=create_revision)


@receiver(pre_delete, sender=Documento, dispatch_uid='documento_delete_signal')
def log_deleted_documento(sender, instance, using, **kwargs):
    print('passou log_deleted_documento pk = %s, parent = %s' %
          (instance.pk, instance.parent.pk if instance.parent else ''))