~barry/ubuntu-system-image/citrain302

« back to all changes in this revision

Viewing changes to systemimage/bindings.py

  • Committer: CI bot
  • Date: 2014-07-23 23:07:29 UTC
  • mfrom: (232.1.6 citrain231)
  • Revision ID: ps-jenkins@lists.canonical.com-20140723230729-efe2ckz8xxqdt5uu
* New upstream release.
  - LP: #1207860 - Support factory resets.  system-image-cli
    --factory-reset and a new D-Bus API method FactoryReset() are added.
  - LP: #1262256 - Data file checksums are passed to
    ubuntu-download-manager where available.
  - LP: #1286542 - Certain duplicate destinations are allowed, if they
    have matching source urls and checksums.
  - LP: #1301995 - When system-image-{cli,dbus} is run as non-root, use
    a fallback location for the log file if the system log file isn't
    writable.
  - LP: #1251291 - system-image-cli --list-channels lists all the
    available channels, including aliases.
  - LP: #1279028 - system-image-cli --no-reboot downloads all files and
    prepares for recovery, but does not actually issue a reboot.
  - LP: #1249347 - system-image-cli --switch <channel> is a convenient
    alias for system-image-cli -b 0 -c <channel>.
  - LP: #1294273 - Added --show-settings, --get, --set, and --del
    options for viewing, changing, and setting all the internal database
    settings.
  - LP: #1271684 - Improve memory usage when verifying file checksums.
    Given by Michael Vogt.
  - LP: #1274131 - In the UpdatePaused signal, return a percentage value
    that's closer to reality than hardcoding it to 0.
  - LP: #1280169 - New D-Bus API method .Information() which is like
    .Info() except that it returns extended information details, as a
    mapping of strings to strings.  These details include a
    last_check_date which is the ISO 8601 timestamp of the last time an
    UpdateAvailableStatus signal was sent.
  - LP: #1339157 - Set the GSM flag in ubuntu-download-manager based on
    the current s-i download setting.
  - LP: #1340882 - The system-image-dbus(8) manpage now describes the
    full D-Bus API.
  - LP: #1273354 - Fix the D-Bus mock service so that the downloading
    flag for UpdateAvailableStatus will correctly return true when
    checking twice under manual downloads.
  - LP: #1342183 - Pay down some tech-debt.
* d/watch, d/upstream/signing-key.asc: Added Barry's GPG signing key so
  that uscan will verify the signature of the download.
* d/control: Updated Build-Depends.
* d/rules:
  - Updated, and add --buildsystem=pybuild.
  - Fix 'nocheck' test short-circuiting.
* d/tests:
  - control: Update dependencies and restrictions.  The smoketest test
    should not include the system-image-dev package, for a more
    realistic simulation of the installed enviroment.
  - dryrun: New schroot-compatible limited test suite.  The existing
    smoketest test requires isolation-container so isn't compatible with
    schroot.
  - smoketest-noreboot: Added full update test, with no reboot.
* New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
 
19
19
__all__ = [
20
20
    'DBusClient',
 
21
    'UASRecord',
21
22
    ]
22
23
 
23
24
 
24
25
import dbus
25
26
import logging
26
27
 
 
28
from collections import namedtuple
27
29
from systemimage.reactor import Reactor
28
30
 
29
31
log = logging.getLogger('systemimage')
30
32
 
31
33
 
 
34
# Use a namedtuple for more convenient argument unpacking.
 
35
UASRecord = namedtuple('UASRecord',
 
36
    'is_available downloading available_version update_size '
 
37
    'last_update_date error_reason')
 
38
 
 
39
 
32
40
class DBusClient(Reactor):
33
41
    """Python bindings to be used as a DBus client."""
34
42
 
43
51
        self.is_available = False
44
52
        self.downloaded = False
45
53
 
46
 
    def _do_UpdateAvailableStatus(
47
 
            self, signal, path,
48
 
            is_available, downloading, available_version, update_size,
49
 
            last_update_date,
50
 
            #descriptions,
51
 
            error_reason):
52
 
        if error_reason != '':
 
54
    def _do_UpdateAvailableStatus(self, signal, path, *args):
 
55
        payload = UASRecord(*args)
 
56
        if payload.error_reason != '':
53
57
            # Cancel the download, set the failed flag and log the reason.
54
 
            log.error('CheckForUpdate returned an error: {}', error_reason)
 
58
            log.error('CheckForUpdate returned an error: {}',
 
59
                      payload.error_reason)
55
60
            self.failed = True
56
61
            self.quit()
57
62
            return
58
 
        if not is_available:
 
63
        if not payload.is_available:
59
64
            log.info('No update available')
60
65
            self.quit()
61
66
            return
62
 
        if not downloading:
 
67
        if not payload.downloading:
63
68
            # We should be in auto download mode, so why aren't we downloading
64
69
            # the update?  Do it manually.
65
70
            log.info('Update available, downloading manually')