from .writer import GitWriter from tftp.backend import IBackend from tftp.errors import Unsupported, AccessViolation from tftp.util import deferred from twisted.python.context import get from twisted.python.filepath import FilePath, InsecurePath from zope import interface class GitBackend(object): interface.implements(IBackend) def __init__(self, base_path): self.base_path = base_path self.base = FilePath(base_path) @deferred def get_reader(self, file_name): raise Unsupported("Reading not supported") @deferred def get_writer(self, file_name): try: target_path = self.base.descendant(file_name.split("/")) except InsecurePath, e: raise AccessViolation("Insecure path: %s" % e) return GitWriter(target_path, self.base_path, get('remote'))