[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[dak/master] daklib/upload.py: add from_file classmethods



Allow to create HashedFile, Binary and Source objects from existing files.
This will be used to directly import binary and source packages into an
archive.
---
 daklib/upload.py |   37 +++++++++++++++++++++++++++++++++++++
 1 files changed, 37 insertions(+), 0 deletions(-)

diff --git a/daklib/upload.py b/daklib/upload.py
index dcd008a..3d63c71 100644
--- a/daklib/upload.py
+++ b/daklib/upload.py
@@ -92,6 +92,33 @@ class HashedFile(object):
         @type: str of C{None}
         """
 
+    @classmethod
+    def from_file(cls, directory, filename, section=None, priority=None):
+        """create with values for an existing file
+
+        Create a C{HashedFile} object that refers to an already existing file.
+
+        @type  directory: str
+        @param directory: directory the file is located in
+
+        @type  filename: str
+        @param filename: filename
+
+        @type  section: str or C{None}
+        @param section: optional section as given in .changes files
+
+        @type  priority: str or C{None}
+        @param priority: optional priority as given in .changes files
+
+        @rtype:  L{HashedFile}
+        @return: C{HashedFile} object for the given file
+        """
+        path = os.path.join(directory, filename)
+        size = os.stat(path).st_size
+        with open(path, 'r') as fh:
+            hashes = apt_pkg.Hashes(fh)
+        return cls(filename, size, hashes.md5, hashes.sha1, hashes.sha256, section, priority)
+
     def check(self, directory):
         """Validate hashes
 
@@ -387,6 +414,11 @@ class Binary(object):
         @type: dict-like
         """
 
+    @classmethod
+    def from_file(cls, directory, filename):
+        hashed_file = HashedFile.from_file(directory, filename)
+        return cls(directory, hashed_file)
+
     @property
     def source(self):
         """get tuple with source package name and version
@@ -453,6 +485,11 @@ class Source(object):
 
         self._files = None
 
+    @classmethod
+    def from_file(cls, directory, filename, keyrings, require_signature=True):
+        hashed_file = HashedFile.from_file(directory, filename)
+        return cls(directory, [hashed_file], keyrings, require_signature)
+
     @property
     def files(self):
         """dict mapping filenames to L{HashedFile} objects for additional source files
-- 
1.7.2.5



Reply to: