def _handle_addon()

in src/olympia/landfill/management/commands/fetch_prod_addons.py [0:0]


    def _handle_addon(self, addon_data):
        version = addon_data['current_version']
        file_data = version['file']

        try:
            file_kw = {
                'hash': file_data['hash'],
                'status': amo.STATUS_CHOICES_API_LOOKUP[file_data['status']],
                'size': file_data['size'],
                'is_mozilla_signed_extension': (
                    file_data['is_mozilla_signed_extension']
                ),
                'strict_compatibility': (version['is_strict_compatibility_enabled']),
            }
        except (KeyError, IndexError):
            file_kw = {}

        # TODO:
        # * license
        # * ratings
        # * previews
        # * android compat & category data

        if Addon.objects.filter(slug=addon_data['slug']).exists():
            print('Skipping %s (slug already exists)' % addon_data['slug'])
            return

        if (
            addon_data['guid']
            and Addon.objects.filter(guid=addon_data['guid']).exists()
        ):
            print('Skipping %s (guid already exists)' % addon_data['guid'])
            return

        users = []

        for user in addon_data['authors']:
            try:
                users.append(UserProfile.objects.get(username=user['name']))
            except UserProfile.DoesNotExist:
                email = 'fake-prod-data-%s@mozilla.com' % str(uuid.uuid4().hex)
                users.append(user_factory(username=user['name'], email=email))

        addon_type = amo.ADDON_SEARCH_SLUGS[addon_data['type']]

        if 'firefox' in addon_data['categories']:
            category = addon_data['categories']['firefox'][0]
        else:
            category = None

        if category not in CATEGORIES[addon_type]:
            category = None
            print('Category %s' % category, 'not found')
        else:
            category = CATEGORIES[addon_type][category]

        print('Creating add-on %s' % addon_data['slug'])

        compatibility = version['compatibility']

        if compatibility and 'firefox' in compatibility:
            version_kw = {
                'min_app_version': version['compatibility']['firefox']['min'],
                'max_app_version': version['compatibility']['firefox']['max'],
            }
        else:
            version_kw = {}

        with atomic():
            addon_factory(
                users=users,
                average_daily_users=addon_data['average_daily_users'],
                category=category,
                type=addon_type,
                guid=addon_data['guid'],
                slug=addon_data['slug'],
                name=addon_data['name'],
                summary=addon_data['summary'],
                description=addon_data['description'],
                file_kw=file_kw,
                version_kw=version_kw,
                weekly_downloads=addon_data.get('weekly_downloads', 0),
                default_locale=addon_data['default_locale'],
                tags=addon_data['tags'],
            )