~stephen-stewart/ubuntu-webcatalog/update-global-header

« back to all changes in this revision

Viewing changes to src/webcatalog/management/commands/import_sca_apps.py

[r=james-w] Update logging dictConfig for use in deployments and add a specific logger for import_sca_apps.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
from __future__ import absolute_import
23
23
 
24
24
import json
 
25
import logging
25
26
import os
26
27
import urllib
27
28
from collections import defaultdict
42
43
__all__ = []
43
44
 
44
45
 
 
46
logger = logging.getLogger(__name__)
 
47
 
 
48
 
45
49
class Command(BaseCommand):
46
50
    help = "Import for-purchase applications from Software Center."
47
 
    verbosity = 0
48
51
 
49
52
    def handle(self, *args, **options):
50
53
        url = '%sapplications/any/ubuntu/any/any/' % settings.SCA_API_URL
 
54
        logger.info("Starting import of sca apps at {0}".format(url))
51
55
        # call api and get apps for purchase
52
56
        response = urllib.urlopen(url)
53
57
        if response.code != 200:
55
59
        app_list = json.loads(response.read())
56
60
        imported_apps = Application.objects.filter(
57
61
            imported_from_sca=True).values_list(
58
 
                'package_name',
59
 
                'distroseries__code_name')
 
62
            'package_name',
 
63
            'distroseries__code_name')
60
64
        existing_apps = defaultdict(list)
61
65
        for package_name, code_name in imported_apps:
62
66
            existing_apps[package_name].append(code_name)
71
75
                distroseries, created = DistroSeries.objects.get_or_create(
72
76
                    code_name=series_name)
73
77
                if created:
74
 
                    self.output(
 
78
                    logger.info(
75
79
                        "Created a DistroSeries record called '{0}'.\n".format(
76
80
                            series_name), 1)
77
81
                package_name = self.import_app_from_data(
91
95
            Application.objects.filter(
92
96
                package_name=package_name,
93
97
                distroseries__code_name__in=series).delete()
 
98
        logger.info("Finished import of {0} sca apps.".format(len(app_list)))
94
99
 
95
100
    def import_app_from_data(self, app_data, icon_data, distroseries):
96
101
        form = SCAApplicationForm.from_api_data(
100
105
            department_names = app_data.get('department', [])
101
106
            app.update_departments(department_names)
102
107
            self.add_icon_to_app(app, data=icon_data)
103
 
            self.output(u"{0} created.\n".format(app.name).encode('utf-8'), 1)
104
108
        return app.package_name
105
109
 
106
110
    def get_icon_data(self, app_data):
125
129
        finally:
126
130
            if os.path.exists(filename):
127
131
                os.unlink(filename)
128
 
 
129
 
    def output(self, message, level=None, flush=False):
130
 
        if hasattr(self, 'stdout'):
131
 
            if level is None or self.verbosity >= level:
132
 
                self.stdout.write(message)
133
 
            if flush:
134
 
                self.stdout.flush()