]> err.no Git - dak/commitdiff
daklib/upload.py: add from_file classmethods
authorAnsgar Burchardt <ansgar@debian.org>
Wed, 7 Nov 2012 13:47:22 +0000 (14:47 +0100)
committerAnsgar Burchardt <ansgar@debian.org>
Wed, 7 Nov 2012 13:47:22 +0000 (14:47 +0100)
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

index dcd008aae5e28aa1e81aea1240eb823c24ee488d..3d63c71e5345eec9d5c6535216a5effd5da4200b 100644 (file)
@@ -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