import apt_inst
import apt_pkg
+import errno
import os
import re
from daklib.regexes import *
import daklib.packagelist
-class InvalidChangesException(Exception):
+class UploadException(Exception):
pass
-class InvalidBinaryException(Exception):
+class InvalidChangesException(UploadException):
pass
-class InvalidSourceException(Exception):
+class InvalidBinaryException(UploadException):
pass
-class InvalidHashException(Exception):
+class InvalidSourceException(UploadException):
+ pass
+
+class InvalidHashException(UploadException):
def __init__(self, filename, hash_name, expected, actual):
self.filename = filename
self.hash_name = hash_name
"might already be known to the archive software.") \
.format(self.hash_name, self.filename, self.expected, self.actual)
-class InvalidFilenameException(Exception):
+class InvalidFilenameException(UploadException):
def __init__(self, filename):
self.filename = filename
def __str__(self):
return "Invalid filename '{0}'.".format(self.filename)
+class FileDoesNotExist(UploadException):
+ def __init__(self, filename):
+ self.filename = filename
+ def __str__(self):
+ return "Refers to non-existing file '{0}'".format(self.filename)
+
class HashedFile(object):
"""file with checksums
"""
@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:
+ size = os.fstat(fh.fileno()).st_size
hashes = apt_pkg.Hashes(fh)
return cls(filename, size, hashes.md5, hashes.sha1, hashes.sha256, section, priority)
"""
path = os.path.join(directory, self.filename)
- size = os.stat(path).st_size
+ try:
+ with open(path) as fh:
+ size = os.fstat(fh.fileno()).st_size
+ hashes = apt_pkg.Hashes(fh)
+ except IOError as e:
+ if e.errno == errno.ENOENT:
+ raise FileDoesNotExist(self.filename)
+ raise
+
if size != self.size:
raise InvalidHashException(self.filename, 'size', self.size, size)
- with open(path) as fh:
- hashes = apt_pkg.Hashes(fh)
-
if hashes.md5 != self.md5sum:
raise InvalidHashException(self.filename, 'md5sum', self.md5sum, hashes.md5)
"""
return self._signed_file.valid
+ @property
+ def signature_timestamp(self):
+ return self._signed_file.signature_timestamp
+
+ @property
+ def contents_sha1(self):
+ return self._signed_file.contents_sha1
+
@property
def architectures(self):
"""list of architectures included in the upload