Example #1
0
 def test_key_incr(self, epoch_mock):
     epoch_mock.return_value = 123456
     cache_ns_key(self.namespace)  # Sets ns to 123456
     ns_key = cache_ns_key(self.namespace, increment=True)
     expected = '123457:ns:%s' % self.namespace
     eq_(ns_key, expected)
     eq_(cache_ns_key(self.namespace), expected)
Example #2
0
 def test_key_incr(self, epoch_mock):
     epoch_mock.return_value = 123456
     cache_ns_key(self.namespace)  # Sets ns to 123456
     ns_key = cache_ns_key(self.namespace, increment=True)
     expected = "123457:ns:%s" % self.namespace
     eq_(ns_key, expected)
     eq_(cache_ns_key(self.namespace), expected)
Example #3
0
 def get_key(cls, key=None, invalidate=False):
     namespace = 'riscore'
     if not key:  # Assuming we're invalidating the namespace.
         cache_ns_key(namespace, invalidate)
         return
     else:
         # Using cache_ns_key so each cache val is invalidated together.
         ns_key = cache_ns_key(namespace, invalidate)
         return '%s:%s' % (ns_key, key)
Example #4
0
 def get_key(cls, key=None, invalidate=False):
     namespace = 'riscore'
     if not key:  # Assuming we're invalidating the namespace.
         cache_ns_key(namespace, invalidate)
         return
     else:
         # Using cache_ns_key so each cache val is invalidated together.
         ns_key = cache_ns_key(namespace, invalidate)
         return '%s:%s' % (ns_key, key)
Example #5
0
def update_incompatible_appversions(data, **kw):
    """Updates the incompatible_versions table for this version."""
    log.info('Updating incompatible_versions for %s versions.' % len(data))

    addon_ids = set()

    for version_id in data:
        # This is here to handle both post_save and post_delete hooks.
        IncompatibleVersions.objects.filter(version=version_id).delete()

        try:
            version = Version.objects.get(pk=version_id)
        except Version.DoesNotExist:
            log.info('Version ID [%d] not found. Incompatible versions were '
                     'cleared.' % version_id)
            return

        addon_ids.add(version.addon_id)

        try:
            compat = CompatOverride.objects.get(addon=version.addon)
        except CompatOverride.DoesNotExist:
            log.info('Compat override for addon with version ID [%d] not '
                     'found. Incompatible versions were cleared.' % version_id)
            return

        app_ranges = []
        ranges = compat.collapsed_ranges()

        for range in ranges:
            if range.min == '0' and range.max == '*':
                # Wildcard range, add all app ranges
                app_ranges.extend(range.apps)
            elif not range.min_int or not range.max_int:
                if range.min == version.version:
                    app_ranges.extend(range.apps)
            else:
                if (int(range.min_int) <= version.version_int <=
                    int(range.max_int)):
                    app_ranges.extend(range.apps)

        for range in app_ranges:
            IncompatibleVersions.objects.create(version=version,
                                                app_id=range.app.id,
                                                min_app_version=range.min,
                                                max_app_version=range.max)
            log.info('Added incompatible version for version ID [%d]: '
                     'app:%d, %s -> %s' % (version_id, range.app.id, range.min,
                                           range.max))

    # Increment namespace cache of compat versions.
    for addon_id in addon_ids:
        cache_ns_key('d2c-versions:%s' % addon_id, increment=True)
Example #6
0
 def test_no_preexisting_key_incr(self, epoch_mock):
     epoch_mock.return_value = 123456
     eq_(cache_ns_key(self.namespace, increment=True), "123456:ns:%s" % self.namespace)
Example #7
0
def update_incompatible_appversions(data, **kw):
    """Updates the incompatible_versions table for this version."""
    log.info("Updating incompatible_versions for %s versions." % len(data))

    addon_ids = set()

    for version_id in data:
        # This is here to handle both post_save and post_delete hooks.
        IncompatibleVersions.objects.filter(version=version_id).delete()

        try:
            version = Version.objects.get(pk=version_id)
        except Version.DoesNotExist:
            log.info("Version ID [%d] not found. Incompatible versions were " "cleared." % version_id)
            return

        addon_ids.add(version.addon_id)

        try:
            compat = CompatOverride.objects.get(addon=version.addon)
        except CompatOverride.DoesNotExist:
            log.info(
                "Compat override for addon with version ID [%d] not "
                "found. Incompatible versions were cleared." % version_id
            )
            return

        app_ranges = []
        ranges = compat.collapsed_ranges()

        for range in ranges:
            if range.min == "0" and range.max == "*":
                # Wildcard range, add all app ranges
                app_ranges.extend(range.apps)
            else:
                # Since we can't rely on add-on version numbers, get the min
                # and max ID values and find versions whose ID is within those
                # ranges, being careful with wildcards.
                min_id = max_id = None

                if range.min == "0":
                    versions = (
                        Version.objects.filter(addon=version.addon_id).order_by("id").values_list("id", flat=True)[:1]
                    )
                    if versions:
                        min_id = versions[0]
                else:
                    try:
                        min_id = Version.objects.get(addon=version.addon_id, version=range.min).id
                    except Version.DoesNotExist:
                        pass

                if range.max == "*":
                    versions = (
                        Version.objects.filter(addon=version.addon_id).order_by("-id").values_list("id", flat=True)[:1]
                    )
                    if versions:
                        max_id = versions[0]
                else:
                    try:
                        max_id = Version.objects.get(addon=version.addon_id, version=range.max).id
                    except Version.DoesNotExist:
                        pass

                if min_id and max_id:
                    if min_id <= version.id <= max_id:
                        app_ranges.extend(range.apps)

        for app_range in app_ranges:
            IncompatibleVersions.objects.create(
                version=version, app_id=app_range.app.id, min_app_version=app_range.min, max_app_version=app_range.max
            )
            log.info(
                "Added incompatible version for version ID [%d]: "
                "app:%d, %s -> %s" % (version_id, app_range.app.id, app_range.min, app_range.max)
            )

    # Increment namespace cache of compat versions.
    for addon_id in addon_ids:
        cache_ns_key("d2c-versions:%s" % addon_id, increment=True)
Example #8
0
def update_incompatible_appversions(data, **kw):
    """Updates the incompatible_versions table for this version."""
    log.info('Updating incompatible_versions for %s versions.' % len(data))

    addon_ids = set()

    for version_id in data:
        # This is here to handle both post_save and post_delete hooks.
        IncompatibleVersions.objects.filter(version=version_id).delete()

        try:
            version = Version.objects.get(pk=version_id)
        except Version.DoesNotExist:
            log.info('Version ID [%d] not found. Incompatible versions were '
                     'cleared.' % version_id)
            return

        addon_ids.add(version.addon_id)

        try:
            compat = CompatOverride.objects.get(addon=version.addon)
        except CompatOverride.DoesNotExist:
            log.info('Compat override for addon with version ID [%d] not '
                     'found. Incompatible versions were cleared.' % version_id)
            return

        app_ranges = []
        ranges = compat.collapsed_ranges()

        for range in ranges:
            if range.min == '0' and range.max == '*':
                # Wildcard range, add all app ranges
                app_ranges.extend(range.apps)
            else:
                # Since we can't rely on add-on version numbers, get the min
                # and max ID values and find versions whose ID is within those
                # ranges, being careful with wildcards.
                min_id = max_id = None

                if range.min == '0':
                    versions = (Version.objects.filter(
                        addon=version.addon_id).order_by('id').values_list(
                            'id', flat=True)[:1])
                    if versions:
                        min_id = versions[0]
                else:
                    try:
                        min_id = Version.objects.get(addon=version.addon_id,
                                                     version=range.min).id
                    except Version.DoesNotExist:
                        pass

                if range.max == '*':
                    versions = (Version.objects.filter(
                        addon=version.addon_id).order_by('-id').values_list(
                            'id', flat=True)[:1])
                    if versions:
                        max_id = versions[0]
                else:
                    try:
                        max_id = Version.objects.get(addon=version.addon_id,
                                                     version=range.max).id
                    except Version.DoesNotExist:
                        pass

                if min_id and max_id:
                    if min_id <= version.id <= max_id:
                        app_ranges.extend(range.apps)

        for app_range in app_ranges:
            IncompatibleVersions.objects.create(version=version,
                                                app_id=app_range.app.id,
                                                min_app_version=app_range.min,
                                                max_app_version=app_range.max)
            log.info(
                'Added incompatible version for version ID [%d]: '
                'app:%d, %s -> %s' %
                (version_id, app_range.app.id, app_range.min, app_range.max))

    # Increment namespace cache of compat versions.
    for addon_id in addon_ids:
        cache_ns_key('d2c-versions:%s' % addon_id, increment=True)
Example #9
0
 def test_no_preexisting_key(self, epoch_mock):
     epoch_mock.return_value = 123456
     eq_(cache_ns_key(self.namespace), '123456:ns:%s' % self.namespace)
Example #10
0
 def test_no_preexisting_key_incr(self, epoch_mock):
     epoch_mock.return_value = 123456
     eq_(cache_ns_key(self.namespace, increment=True),
         '123456:ns:%s' % self.namespace)
Example #11
0
 def test_key_incr(self):
     cache_ns_key(self.namespace)  # Sets ns to 0
     ns_key = cache_ns_key(self.namespace, increment=True)
     expected = '1:ns:%s' % self.namespace
     eq_(ns_key, expected)
     eq_(cache_ns_key(self.namespace), expected)
Example #12
0
 def test_no_preexisting_key_incr(self):
     eq_(cache_ns_key(self.namespace, increment=True),
         '0:ns:%s' % self.namespace)
Example #13
0
 def test_no_preexisting_key(self):
     eq_(cache_ns_key(self.namespace), '0:ns:%s' % self.namespace)