~fginther/ubuntu-ci-services-itself/bsb-source-detail

« back to all changes in this revision

Viewing changes to lander/bin/lander_service_wrapper.py

  • Committer: Francis Ginther
  • Date: 2014-03-03 20:15:29 UTC
  • mto: This revision was merged to the branch mainline in revision 301.
  • Revision ID: francis.ginther@canonical.com-20140303201529-e0l15x6rdwt6jtx0
Use sets for computing the binary package lists, test cleanup.

Show diffs side-by-side

added added

removed removed

Lines of Context:
180
180
 
181
181
def _get_binary_packages(ticket, request_parameters):
182
182
    # Start with the set of golden binary packages
183
 
    package_list = ticket.get_binaries()
 
183
    package_list = set(ticket.get_binaries())
184
184
 
185
185
    # Extract the list of added packages from the ticket request
186
 
    added_list = request_parameters.get('added_binaries', '')
187
 
    if added_list:
188
 
        for package_name in added_list.split(','):
189
 
            if package_name not in package_list:
190
 
                # Only add packages not already in the global list
191
 
                package_list.append(package_name)
 
186
    try:
 
187
        package_list = package_list | set(
 
188
            request_parameters.get('added_binaries', None).split(','))
 
189
    except AttributeError:
 
190
        # Expected when added_binaries is None.
 
191
        pass
192
192
 
193
193
    # Finally remove the list of removed binaries from the ticket request
194
 
    removed_list = request_parameters.get('removed_binaries', '')
195
 
    if removed_list:
196
 
        for package_name in removed_list.split(','):
197
 
            try:
198
 
                package_list.remove(package_name)
199
 
            except ValueError:
200
 
                # This is ok, multiple queued tickets could be trying
201
 
                # to remove the same binary.
202
 
                logger.info('Package to remove not found: '
203
 
                            '{}'.format(package_list))
204
 
 
205
 
    return package_list
 
194
    try:
 
195
        removed_list = set(
 
196
            request_parameters.get('removed_binaries', None).split(','))
 
197
        # Log a warning if any package in the removed_binaries is not in the
 
198
        # package_list. This is not an error because multiple queued tickets
 
199
        # may attempt to remove the same package. However, This could be an
 
200
        # indicator of a mis-typed package name.
 
201
        diff_list = removed_list - package_list
 
202
        if diff_list:
 
203
            logger.warning('Package(s) to remove not found: '
 
204
                           '{}'.format(list(diff_list)))
 
205
        package_list = package_list - removed_list
 
206
 
 
207
    except AttributeError:
 
208
        # Expected when removed_binaries is None.
 
209
        pass
 
210
 
 
211
    return list(package_list)
206
212
 
207
213
 
208
214
def _handle_image_builder(args):
245
251
    url = '%s/api/v1/ppa_copy/' % config['master']['ppa_assigner_url']
246
252
 
247
253
    request_parameters = config['master']['request_parameters']
248
 
    packages = request_parameters.get('added_binaries', '')
249
 
    if packages:
250
 
        packages = packages.split(',')
 
254
    try:
 
255
        packages = request_parameters.get('added_binaries', None).split(',')
 
256
    except AttributeError:
 
257
        # Expected when added_binaries is None.
 
258
        packages = []
251
259
 
252
260
    params = {
253
261
        'series': request_parameters['series'],