summaryrefslogtreecommitdiff
path: root/apt
diff options
context:
space:
mode:
Diffstat (limited to 'apt')
-rw-r--r--apt/auth.py3
-rw-r--r--apt/cache.py23
-rw-r--r--apt/package.py2
3 files changed, 27 insertions, 1 deletions
diff --git a/apt/auth.py b/apt/auth.py
index eff13b1a..c1b8da2a 100644
--- a/apt/auth.py
+++ b/apt/auth.py
@@ -78,7 +78,8 @@ def _call_apt_key_script(*args, **kwargs):
stderr=subprocess.PIPE)
content = kwargs.get("stdin", None)
- if isinstance(content, unicode):
+ # py2 needs this encoded, py3.3 will crash if it is
+ if isinstance(content, unicode) and sys.version_info[:2] < (3, 3):
content = content.encode("utf-8")
output, stderr = proc.communicate(content)
diff --git a/apt/cache.py b/apt/cache.py
index 86a788bb..9842cb2a 100644
--- a/apt/cache.py
+++ b/apt/cache.py
@@ -42,6 +42,9 @@ class FetchFailedException(IOError):
class LockFailedException(IOError):
"""Exception that is thrown when locking fails."""
+class CacheClosedException(Exception):
+ """Exception that is thrown when the cache is used after close()."""
+
class Cache(object):
"""Dictionary-like package cache.
@@ -139,6 +142,8 @@ class Cache(object):
"""
if progress is None:
progress = apt.progress.base.OpProgress()
+ # close old cache on (re)open
+ self.close()
self.op_progress = progress
self._run_callbacks("cache_pre_open")
@@ -172,6 +177,20 @@ class Cache(object):
progress.done()
self._run_callbacks("cache_post_open")
+ def close(self):
+ """ Close the package cache """
+ # explicitely free the FDs that _records has open
+ del self._records
+ self._records = None
+
+ def __enter__(self):
+ """ Enter the with statement """
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ """ Exit the with statement """
+ self.close()
+
def __getitem__(self, key):
""" look like a dictionary (get key) """
try:
@@ -238,6 +257,8 @@ class Cache(object):
@property
def required_download(self):
"""Get the size of the packages that are required to download."""
+ if self._records is None:
+ raise CacheClosedException("Cache object used after close() called")
pm = apt_pkg.PackageManager(self._depcache)
fetcher = apt_pkg.Acquire()
pm.get_archives(fetcher, self._list, self._records)
@@ -288,6 +309,8 @@ class Cache(object):
def _fetch_archives(self, fetcher, pm):
""" fetch the needed archives """
+ if self._records is None:
+ raise CacheClosedException("Cache object used after close() called")
# get lock
lockfile = apt_pkg.config.find_dir("Dir::Cache::Archives") + "lock"
diff --git a/apt/package.py b/apt/package.py
index 51da95f8..dbaab320 100644
--- a/apt/package.py
+++ b/apt/package.py
@@ -137,6 +137,7 @@ class Origin(object):
component - The component (eg. main)
label - The Label, as set in the Release file
origin - The Origin, as set in the Release file
+ codename - The Codename, as set in the Release file
site - The hostname of the site.
trusted - Boolean value whether this is trustworthy.
"""
@@ -146,6 +147,7 @@ class Origin(object):
self.component = packagefile.component
self.label = packagefile.label
self.origin = packagefile.origin
+ self.codename = packagefile.codename
self.site = packagefile.site
self.not_automatic = packagefile.not_automatic
# check the trust