Skip to content

Commit

Permalink
Merge pull request #1624 from diox/remove-obsolete-addon-device-type
Browse files Browse the repository at this point in the history
Remove obsolete AddonDeviceType model / table / constants
  • Loading branch information
diox committed Feb 8, 2016
2 parents 36fc26a + 4dc508b commit e6a6fd5
Show file tree
Hide file tree
Showing 6 changed files with 8 additions and 120 deletions.
18 changes: 0 additions & 18 deletions src/olympia/addons/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -1490,24 +1490,6 @@ def check_ownership(self, request, require_owner, require_author,
dispatch_uid='addon_translations')


class AddonDeviceType(ModelBase):
addon = models.ForeignKey(Addon, db_constraint=False)
device_type = models.PositiveIntegerField(
default=amo.DEVICE_DESKTOP, choices=do_dictsort(amo.DEVICE_TYPES),
db_index=True)

class Meta:
db_table = 'addons_devicetypes'
unique_together = ('addon', 'device_type')

def __unicode__(self):
return u'%s: %s' % (self.addon.name, self.device.name)

@property
def device(self):
return amo.DEVICE_TYPES[self.device_type]


@receiver(signals.version_changed, dispatch_uid='version_changed')
def version_changed(sender, **kw):
from . import tasks
Expand Down
10 changes: 3 additions & 7 deletions src/olympia/addons/tests/test_models.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,12 @@
from olympia.amo.helpers import absolutify, user_media_url
from olympia.amo.signals import _connect, _disconnect
from olympia.addons.models import (
Addon, AddonCategory, AddonDependency, AddonDeviceType,
AddonUser, AppSupport, BlacklistedGuid,
BlacklistedSlug, Category, Charity, CompatOverride, CompatOverrideRange,
FrozenAddon, IncompatibleVersions, Persona, Preview,
Addon, AddonCategory, AddonDependency, AddonUser, AppSupport,
BlacklistedGuid, BlacklistedSlug, Category, Charity, CompatOverride,
CompatOverrideRange, FrozenAddon, IncompatibleVersions, Persona, Preview,
track_addon_status_change)
from olympia.applications.models import AppVersion
from olympia.bandwagon.models import Collection
from olympia.constants.applications import DEVICE_TYPES
from olympia.devhub.models import ActivityLog, AddonLog, RssKey, SubmitStep
from olympia.editors.models import EscalationQueue
from olympia.files.models import File
Expand Down Expand Up @@ -1531,8 +1529,6 @@ def test_cascades(self):
category=Category.objects.create(type=amo.ADDON_EXTENSION))
AddonDependency.objects.create(
addon=addon, dependent_addon=addon)
AddonDeviceType.objects.create(
addon=addon, device_type=DEVICE_TYPES.keys()[0])
AddonUser.objects.create(
addon=addon, user=UserProfile.objects.create())
AppSupport.objects.create(addon=addon, app=1)
Expand Down
34 changes: 0 additions & 34 deletions src/olympia/constants/applications.py
Original file line number Diff line number Diff line change
Expand Up @@ -149,40 +149,6 @@ class UNKNOWN_APP(App):
pretty = _(u'Unknown')


class DEVICE_DESKTOP(object):
id = 1
name = _(u'Desktop')
class_name = 'desktop'
api_name = 'desktop'


class DEVICE_MOBILE(object):
id = 2
name = _(u'Firefox Mobile')
class_name = 'android-mobile'
api_name = 'android-mobile'


class DEVICE_TABLET(object):
id = 3
name = _(u'Firefox Tablet')
class_name = 'android-tablet'
api_name = 'android-tablet'


class DEVICE_GAIA(object):
id = 4
name = _(u'Firefox OS')
class_name = 'firefoxos'
api_name = 'firefoxos'


DEVICE_TYPE_LIST = [DEVICE_DESKTOP, DEVICE_MOBILE, DEVICE_TABLET, DEVICE_GAIA]
DEVICE_TYPES = dict((d.id, d) for d in DEVICE_TYPE_LIST)
REVERSE_DEVICE_LOOKUP = dict((d.id, d.api_name) for d in DEVICE_TYPE_LIST)
DEVICE_LOOKUP = dict((d.api_name, d) for d in DEVICE_TYPE_LIST)


# UAs will attempt to match in this order.
APP_DETECT = (ANDROID, MOBILE, THUNDERBIRD, SEAMONKEY, FIREFOX)
APP_USAGE = _apps = (FIREFOX, THUNDERBIRD, ANDROID, MOBILE, SEAMONKEY)
Expand Down
47 changes: 2 additions & 45 deletions src/olympia/migrations/503-gaia-device-type.py
Original file line number Diff line number Diff line change
@@ -1,49 +1,6 @@
#!/usr/bin/env python

from celeryutils import task

from django.core.exceptions import ObjectDoesNotExist
from django.db.models import Count

from olympia import amo
from addons.models import AddonDeviceType as ADT
from amo.decorators import write
from amo.utils import chunked


@task
@write
def _task(**kw):
# Remove any dupes. `UNIQUE` constraint introduced in migration 504.
dupes = (ADT.objects.values_list('addon', 'device_type')
.annotate(c=Count('id')).filter(c__gt=1))
for addon, device_type, total in dupes:
devices = ADT.objects.filter(addon_id=addon, device_type=device_type)
for d in devices[:total - 1]:
d.delete()

# Remove stale device types.
devices = ADT.objects.all()
for chunk in chunked(devices, 50):
for device in chunk:
try:
device.addon
except ObjectDoesNotExist:
device.delete()

# `DEVICE_MOBILE` -> `DEVICE_MOBILE` and `DEVICE_GAIA`.
devices = ADT.objects.filter(device_type=amo.DEVICE_MOBILE.id)

for chunk in chunked(devices, 50):
for device in chunk:
if amo.DEVICE_GAIA in device.addon.device_types:
continue
device.id = None
device.device_type = amo.DEVICE_GAIA.id
device.save()
device.addon.save()


def run():
"""Mark mobile-compatible apps as compatible for Firefox OS as well."""
_task()
# Obsolete Marketplace migration that relied on a model since removed.
pass
18 changes: 2 additions & 16 deletions src/olympia/migrations/620-add-mobile-profile.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,3 @@
from olympia import amo
from mkt.webapps.models import AppFeatures, Webapp


def run():
"""Update feature profiles for mobile-only apps requiring qHD."""
apps = (Webapp.objects
.filter(addondevicetype__device_type__in=[amo.DEVICE_MOBILE.id,
amo.DEVICE_GAIA.id])
.exclude(addondevicetype__device_type__in=[amo.DEVICE_TABLET.id,
amo.DEVICE_DESKTOP.id]))
for app in apps:
for version in app.versions.all():
af, _ = AppFeatures.objects.get_or_create(version=version)
af.update(has_qhd=True)
print('Marked mobile-only app "%s" (version %s) as '
'requiring a qHD device' % (app, version))
# Obsolete Marketplace migration that relied on a model since removed.
pass
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
DROP TABLE IF EXISTS `addons_devicetypes`;

0 comments on commit e6a6fd5

Please sign in to comment.