from errno import ENOENT, EEXIST, EACCES
import shutil
-from singleton import Singleton
from config import Config
from utils import fubar
###############################################################################
-class Holding(Singleton):
+class Holding(object):
+ __shared_state = {}
+
def __init__(self, *args, **kwargs):
- super(Holding, self).__init__(*args, **kwargs)
+ self.__dict__ = self.__shared_state
- def _startup(self):
- self.in_holding = {}
- self.holding_dir = Config()["Dir::Queue::Holding"]
+ if not getattr(self, 'initialised', False):
+ self.initialised = True
+
+ self.in_holding = {}
+ self.holding_dir = Config()["Dir::Holding"]
+ # ftptrainees haven't access to holding, use a temp directory instead
+ if not os.access(self.holding_dir, os.W_OK):
+ self.holding_dir = Config()["Dir::TempPath"]
+
+ def chdir_to_holding(self):
+ os.chdir(self.holding_dir)
def copy_to_holding(self, filename):
base_filename = os.path.basename(filename)
dest = os.path.join(self.holding_dir, base_filename)
try:
- fd = os.open(dest, os.O_RDWR | os.O_CREAT | os.O_EXCL, 0640)
+ fd = os.open(dest, os.O_RDWR | os.O_CREAT | os.O_EXCL, 0o640)
os.close(fd)
- except OSError, e:
+ except OSError as e:
# Shouldn't happen, but will if, for example, someone lists a
# file twice in the .changes.
if e.errno == EEXIST:
try:
shutil.copy(filename, dest)
- except IOError, e:
+ except IOError as e:
# In either case (ENOENT or EACCES) we want to remove the
# O_CREAT | O_EXCLed ghost file, so add the file to the list
# of 'in holding' even if it's not the real file.