Exemplo n.º 1
0
def _callback_handler(model, updated):

    # delete
    to_delete = None
    if updated.delete_ids is not None:
        to_delete = model.objects.filter(
            pk__in=updated.delete_ids)
    if updated.delete_qs is not None:
        to_delete = (
            updated.delete_qs
            if to_delete is None
            else to_delete | updated.delete_qs)
    if to_delete is not None:
        delete.send(
            model,
            objects=to_delete)

    # create
    if updated.create is not None:
        create.send(
            model,
            objects=updated.create)

    # update
    should_update = (
        updated.update_objects is not None
        or updated.updates is not None)
    if should_update:
        update.send(
            model,
            objects=updated.update_objects,
            updates=updated.updates,
            update_fields=updated.update_fields)
Exemplo n.º 2
0
    def update(self, keys=None):
        parents = list(self.parents.values_list("id", flat=True))
        revisions = self.get_revisions(parents, keys=keys)
        missing_revisions = []
        existing_ids = []
        revision_map = {
            '%s-%s' % (x['object_id'], x['key']): x['id']
            for x in revisions.values("id", "object_id", "key")}
        for parent in parents:
            for key in keys or [""]:
                id = '%s-%s' % (parent, key)
                if id in revision_map:
                    existing_ids.append(revision_map[id])
                else:
                    missing_revisions.append(dict(
                        object_id=parent,
                        key=key))

        new_revision = self.new_revision
        update.send(
            Revision,
            updates={
                id: dict(value=new_revision)
                for id in existing_ids})
        if missing_revisions:
            create.send(
                Revision,
                objects=list(
                    self.create_missing_revisions(
                        missing_revisions, new_revision)))
Exemplo n.º 3
0
 def update(self, keys=None):
     parents = list(self.parents.values_list("id", flat=True))
     revisions = self.get_revisions(parents, keys=keys)
     missing_revisions = []
     existing_ids = []
     revision_map = {
         '%s-%s' % (x['object_id'], x['key']): x['id']
         for x in revisions.values("id", "object_id", "key")}
     for parent in parents:
         for key in keys or [""]:
             id = '%s-%s' % (parent, key)
             if id in revision_map:
                 existing_ids.append(revision_map[id])
             else:
                 missing_revisions.append(dict(
                     object_id=parent,
                     key=key))
     new_revision = self.new_revision
     updates = {
         id: dict(value=new_revision)
         for id in existing_ids}
     if updates:
         update.send(
             Revision,
             updates=updates)
     if missing_revisions:
         create.send(
             Revision,
             objects=list(
                 self.create_missing_revisions(
                     missing_revisions, new_revision)))
Exemplo n.º 4
0
 def set(self, keys=None, value=None):
     """get a revision from db or set one if not set"""
     self.revision_context.filter(key__in=keys).delete()
     if value:
         revisions = []
         for k in keys:
             revisions.append(
                 Revision(content_type_id=self.content_type_id,
                          object_id=self.context.pk,
                          key=k,
                          value=value))
         create.send(Revision, objects=revisions)
Exemplo n.º 5
0
 def update(self, **kwargs):
     store_data = self.get_store_data(**kwargs)
     data_changed = set(
         filter(None, [
             self.set_data(k, store_data[k])
             for k in self.filter_fields(**kwargs)
         ]))
     # set the checks
     if "checks" in store_data:
         self.set_check_data(store_data)
     if not self.data.pk:
         create.send(self.data.__class__, instance=self.data)
         self.model.data = self.data
     elif data_changed:
         self.save_data(fields=data_changed)
Exemplo n.º 6
0
 def set(self, keys=None, value=None):
     """get a revision from db or set one if not set"""
     self.revision_context.filter(key__in=keys).delete()
     if value:
         revisions = []
         for k in keys:
             revisions.append(
                 Revision(
                     content_type_id=self.content_type_id,
                     object_id=self.context.pk,
                     key=k,
                     value=value))
         create.send(
             Revision,
             objects=revisions)
Exemplo n.º 7
0
 def set_check_data(self, store_data=None):
     checks = {}
     existing_checks = self.model.check_data.values_list(
         "pk", "category", "name", "count")
     for pk, category, name, count in existing_checks:
         checks[(category, name)] = (pk, count)
     to_update = []
     to_add = []
     for check in store_data["checks"]:
         category = check["category"]
         name = check["name"]
         count = check["count"]
         check_exists = (
             checks.get((category, name)))
         if not check_exists:
             to_add.append(check)
             continue
         elif checks[(category, name)][1] != count:
             to_update.append((checks[(category, name)][0], dict(count=count)))
         del checks[(category, name)]
     check_data = None
     for category, name in checks.keys():
         if check_data is None:
             check_data = self.model.check_data.filter(
                 category=category, name=name)
         else:
             check_data = check_data | self.model.check_data.filter(
                 category=category, name=name)
     if checks:
         delete.send(check_data.model, objects=check_data)
     if to_update:
         to_update = dict(to_update)
         update.send(
             self.model.check_data.model,
             updates=to_update)
     if not to_add:
         return
     create.send(
         self.model.check_data.model,
         objects=[
             self.check_data_field.related_model(
                 **{self.related_name: self.model,
                    "category": check["category"],
                    "name": check["name"],
                    "count": check["count"]})
             for check in to_add])
Exemplo n.º 8
0
 def set_check_data(self, store_data=None):
     checks = {}
     existing_checks = self.model.check_data.values_list(
         "pk", "category", "name", "count")
     for pk, category, name, count in existing_checks:
         checks[(category, name)] = (pk, count)
     to_update = []
     to_add = []
     for check in store_data["checks"]:
         category = check["category"]
         name = check["name"]
         count = check["count"]
         check_exists = (
             checks.get((category, name)))
         if not check_exists:
             to_add.append(check)
             continue
         elif checks[(category, name)][1] != count:
             to_update.append((checks[(category, name)][0], dict(count=count)))
         del checks[(category, name)]
     check_data = None
     for category, name in checks.keys():
         if check_data is None:
             check_data = self.model.check_data.filter(
                 category=category, name=name)
         else:
             check_data = check_data | self.model.check_data.filter(
                 category=category, name=name)
     if checks:
         delete.send(check_data.model, objects=check_data)
     if to_update:
         to_update = dict(to_update)
         update.send(
             self.model.check_data.model,
             updates=to_update)
     if not to_add:
         return
     create.send(
         self.model.check_data.model,
         objects=[
             self.check_data_field.related_model(
                 **{self.related_name: self.model,
                    "category": check["category"],
                    "name": check["name"],
                    "count": check["count"]})
             for check in to_add])
Exemplo n.º 9
0
 def update(self, **kwargs):
     store_data = self.get_store_data(**kwargs)
     data_changed = set(
         filter(
             None,
             [self.set_data(k, store_data[k])
              for k
              in self.filter_fields(**kwargs)]))
     # set the checks
     if "checks" in store_data:
         self.set_check_data(store_data)
     if not self.data.pk:
         create.send(
             self.data.__class__,
             instance=self.data)
         self.model.data = self.data
     elif data_changed:
         self.save_data(fields=data_changed)
Exemplo n.º 10
0
def _create_data_events(unit):
    create_instances = [
        StoreChecksData(
            store=unit.store,
            name="check-foo-%s" % i,
            count=i * 23)
        for i in range(0, 3)]
    for instance in create_instances:
        # add instances - these shouldnt appear in bulk operation
        create.send(
            StoreChecksData,
            instance=instance)
    create_objects = [
        StoreChecksData(
            store=unit.store,
            name="check-bar-%s" % i,
            count=i * 23)
        for i in range(0, 3)]
    create_more_objects = [
        StoreChecksData(
            store=unit.store,
            name="check-baz-%s" % i,
            count=i * 23)
        for i in range(0, 3)]
    # add 2 lots of objects
    create.send(
        StoreChecksData,
        objects=create_objects)
    create.send(
        StoreChecksData,
        objects=create_more_objects)
    return create_instances + create_objects + create_more_objects
Exemplo n.º 11
0
def _create_qc_events(unit):
    create_instances = [
        QualityCheck(
            name=("Foo%s" % i), category=2, unit=unit)
        for i in range(0, 3)]
    for instance in create_instances:
        create.send(
            QualityCheck,
            instance=instance)
    create_objects = [
        QualityCheck(
            name=("Bar%s" % i),
            category=2,
            unit=unit)
        for i in range(0, 3)]
    create_more_objects = [
        QualityCheck(
            name=("Baz%s" % i),
            category=2,
            unit=unit)
        for i in range(0, 3)]
    create.send(
        QualityCheck,
        objects=create_objects)
    create.send(
        QualityCheck,
        objects=create_more_objects)
    return create_instances + create_objects + create_more_objects
Exemplo n.º 12
0
Arquivo: utils.py Projeto: arky/pootle
    def clone_checks(self, source_store, target_store):
        """Clone checks from source store to target store."""
        fields = ('unit__unitid_hash', 'category', 'name',
                  'false_positive', 'message')
        checks = QualityCheck.objects.filter(
            unit__store=source_store,
            unit__state__gt=OBSOLETE,
        ).values(*fields)
        unitid_hashes = [x['unit__unitid_hash'] for x in checks]
        units = target_store.units.filter(unitid_hash__in=unitid_hashes)
        unit_map = {
            x['unitid_hash']: x['id']
            for x in units.values('id', 'unitid_hash')}

        cloned_checks = []
        for check in checks:
            cloned_checks.append(QualityCheck(
                unit_id=unit_map[check['unit__unitid_hash']],
                category=check['category'],
                name=check['name'],
                false_positive=check['false_positive'],
                message=check['message']))
        create.send(QualityCheck, objects=cloned_checks)
Exemplo n.º 13
0
Arquivo: utils.py Projeto: arky/pootle
    def update_checks(self):
        """Compare self.original_checks to the Units calculated QualityCheck failures.

        Removes members of self.original_checks as they have been compared.
        """
        updated = False
        new_checks = []
        for name in self.check_failures.iterkeys():
            if name in self.original_checks:
                # if the check is valid remove from the list and continue
                del self.original_checks[name]
                continue
            # the check didnt exist previously - so create it
            new_checks.append(
                self.checks_qs.model(
                    unit_id=self.unit.id,
                    name=name,
                    message=self.check_failures[name]['message'],
                    category=self.check_failures[name]['category']))
            updated = True
        if new_checks:
            create.send(self.checks_qs.model, objects=new_checks)
        return updated
Exemplo n.º 14
0
    def clone_checks(self, source_store, target_store):
        """Clone checks from source store to target store."""
        fields = ('unit__unitid_hash', 'category', 'name',
                  'false_positive', 'message')
        checks = QualityCheck.objects.filter(
            unit__store=source_store,
            unit__state__gt=OBSOLETE,
        ).values(*fields)
        unitid_hashes = [x['unit__unitid_hash'] for x in checks]
        units = target_store.units.filter(unitid_hash__in=unitid_hashes)
        unit_map = {
            x['unitid_hash']: x['id']
            for x in units.values('id', 'unitid_hash')}

        cloned_checks = []
        for check in checks:
            cloned_checks.append(QualityCheck(
                unit_id=unit_map[check['unit__unitid_hash']],
                category=check['category'],
                name=check['name'],
                false_positive=check['false_positive'],
                message=check['message']))
        create.send(QualityCheck, objects=cloned_checks)
Exemplo n.º 15
0
    def update_checks(self):
        """Compare self.original_checks to the Units calculated QualityCheck failures.

        Removes members of self.original_checks as they have been compared.
        """
        updated = False
        new_checks = []
        for name in self.check_failures.iterkeys():
            if name in self.original_checks:
                # if the check is valid remove from the list and continue
                del self.original_checks[name]
                continue
            # the check didnt exist previously - so create it
            new_checks.append(
                self.checks_qs.model(
                    unit_id=self.unit.id,
                    name=name,
                    message=self.check_failures[name]['message'],
                    category=self.check_failures[name]['category']))
            updated = True
        if new_checks:
            create.send(self.checks_qs.model, objects=new_checks)
        return updated
Exemplo n.º 16
0
 def create_scores(self, scores):
     created = list(self.new_scores(scores))
     create.send(self.score_model, objects=created)
     return created
Exemplo n.º 17
0
 def create_scores(self, scores):
     created = list(self.new_scores(scores))
     create.send(
         self.score_model,
         objects=created)
     return created