HashedFile: Raise FileDoesNotExist if referring to a non-existing file

A custom exception is nicer to handle in the caller.
上级 731d594c
...@@ -31,7 +31,7 @@ from daklib.regexes import * ...@@ -31,7 +31,7 @@ from daklib.regexes import *
from daklib.textutils import fix_maintainer, ParseMaintError from daklib.textutils import fix_maintainer, ParseMaintError
import daklib.lintian as lintian import daklib.lintian as lintian
import daklib.utils as utils import daklib.utils as utils
from daklib.upload import InvalidHashException import daklib.upload
import apt_inst import apt_inst
import apt_pkg import apt_pkg
...@@ -160,13 +160,11 @@ class SignatureAndHashesCheck(Check): ...@@ -160,13 +160,11 @@ class SignatureAndHashesCheck(Check):
try: try:
for f in files: for f in files:
f.check(upload.directory) f.check(upload.directory)
except IOError as e: except daklib.upload.FileDoesNotExist as e:
if e.errno == errno.ENOENT: raise Reject('{0}: {1}\n'
raise Reject('{0} refers to non-existing file: {1}\n' 'Perhaps you need to include the file in your upload?'
'Perhaps you need to include it in your upload?' .format(filename, unicode(e)))
.format(filename, os.path.basename(e.filename))) except daklib.upload.UploadException as e:
raise
except InvalidHashException as e:
raise Reject('{0}: {1}'.format(filename, unicode(e))) raise Reject('{0}: {1}'.format(filename, unicode(e)))
class ChangesCheck(Check): class ChangesCheck(Check):
......
...@@ -63,6 +63,12 @@ class InvalidFilenameException(UploadException): ...@@ -63,6 +63,12 @@ class InvalidFilenameException(UploadException):
def __str__(self): def __str__(self):
return "Invalid filename '{0}'.".format(self.filename) 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): class HashedFile(object):
"""file with checksums """file with checksums
""" """
...@@ -124,8 +130,8 @@ class HashedFile(object): ...@@ -124,8 +130,8 @@ class HashedFile(object):
@return: C{HashedFile} object for the given file @return: C{HashedFile} object for the given file
""" """
path = os.path.join(directory, filename) path = os.path.join(directory, filename)
size = os.stat(path).st_size
with open(path, 'r') as fh: with open(path, 'r') as fh:
size = os.fstat(fh.fileno()).st_size
hashes = apt_pkg.Hashes(fh) hashes = apt_pkg.Hashes(fh)
return cls(filename, size, hashes.md5, hashes.sha1, hashes.sha256, section, priority) return cls(filename, size, hashes.md5, hashes.sha1, hashes.sha256, section, priority)
...@@ -141,13 +147,18 @@ class HashedFile(object): ...@@ -141,13 +147,18 @@ class HashedFile(object):
""" """
path = os.path.join(directory, self.filename) 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: if size != self.size:
raise InvalidHashException(self.filename, 'size', self.size, size) raise InvalidHashException(self.filename, 'size', self.size, size)
with open(path) as fh:
hashes = apt_pkg.Hashes(fh)
if hashes.md5 != self.md5sum: if hashes.md5 != self.md5sum:
raise InvalidHashException(self.filename, 'md5sum', self.md5sum, hashes.md5) raise InvalidHashException(self.filename, 'md5sum', self.md5sum, hashes.md5)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册