[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r20449: {projects} Towards multifile downloads, fixed some issues as well (in projects/gettor: . gettor)
Author: kaner
Date: 2009-08-31 15:16:10 -0400 (Mon, 31 Aug 2009)
New Revision: 20449
Modified:
projects/gettor/GetTor.py
projects/gettor/gettor/blacklist.py
projects/gettor/gettor/packages.py
projects/gettor/gettor/requests.py
projects/gettor/gettor/responses.py
Log:
Towards multifile downloads, fixed some issues as well
Modified: projects/gettor/GetTor.py
===================================================================
--- projects/gettor/GetTor.py 2009-08-31 02:48:21 UTC (rev 20448)
+++ projects/gettor/GetTor.py 2009-08-31 19:16:10 UTC (rev 20449)
@@ -71,6 +71,16 @@
# Global logger
log = None
+# XXX Move this into a utils class or something
+def createDir(path):
+ try:
+ log.info("Creating directory %s.." % path)
+ os.makedirs(path)
+ except OSError, e:
+ log.error("Failed to create directory %s: %s" % (path, e))
+ return False
+ return True
+
# Switch language to 'newlocale'. Return default if language is not supported.
def switchLocale(newlocale, localedir):
trans = gettext.translation("gettor",
@@ -92,7 +102,7 @@
log.error("Error in msgfmt execution: %s" % ret)
return False
except OSError, e:
- log.erro("Comilation failed: " % e)
+ log.error("Comilation failed: " % e)
return False
return True
@@ -104,31 +114,39 @@
log.error("Bad arg.")
return False
if not os.path.isdir(localeSrcdir):
- log.error("Not a directory: " % localeSrcdir)
- return False
+ log.info("Not a directory: %s" % localeSrcdir)
+ if not createDir(localeSrcdir):
+ log.error(_("Giving up on %s" % localeSrcdir))
+ return False
localeDir = config.getLocaleDir()
if not os.path.isdir(localeDir):
- log.error("Sorry, %s is not a directory." % localeDir)
- return False
+ log.info("Not a directory: %s" % localeDir)
+ if not createDir(localeDir):
+ log.error(_("Giving up on %s" % localeDir))
+ return False
for root, dirs, files in os.walk(localeSrcdir):
- # Python lacks 'depth' featue for os.walk()
+ # Python lacks 'depth' feature for os.walk()
if root != localeSrcdir:
continue
for dir in dirs:
hasDirs = True
if dir.startswith("."):
continue
+ # We ignore the templates dir for now
+ if dir.startswith("templates"):
+ continue
try:
- poFile = os.path.join(root, dir) + "/gettor_" + dir + ".po"
+ poFile = os.path.join(root, dir) + "/gettor.po"
# Construct target dir
targetDir = localeDir + "/" + dir + "/LC_MESSAGES"
- if os.path.isdir(targetDir):
- if installMo(poFile, targetDir) == False:
- log.error("Installing .mo files failed.")
+ if not os.path.isdir(targetDir):
+ log.info("Not a directory: %s" % targetDir)
+ if not createDir(targetDir):
+ log.error(_("Giving up on %s" % targetDir))
return False
- else:
- log.error("Not a directory: %s" % targetDir)
+ if installMo(poFile, targetDir) == False:
+ log.error("Installing .mo files failed.")
return False
except Exception:
log.error("Error accessing translation files.")
@@ -282,8 +300,10 @@
distDir = conf.getDistDir()
if not os.path.isdir(distDir):
- log.error(_("Sorry, %s is not a directory.") % distDir)
- return False
+ log.info(_("Sorry, %s is not a directory.") % distDir)
+ if not createDir(distDir):
+ log.error(_("Giving up on %s", distDir))
+ return False
try:
packs = gettor.packages.gettorPackages(options.mirror, conf)
except IOError:
Modified: projects/gettor/gettor/blacklist.py
===================================================================
--- projects/gettor/gettor/blacklist.py 2009-08-31 02:48:21 UTC (rev 20448)
+++ projects/gettor/gettor/blacklist.py 2009-08-31 19:16:10 UTC (rev 20449)
@@ -16,12 +16,23 @@
stateDir = conf.getStateDir()
blStateDir = conf.getBlStateDir()
+# XXX
+def createDir(path):
+ try:
+ log.info("Creating directory %s.." % path)
+ os.makedirs(path)
+ except OSError, e:
+ log.error("Failed to create directory %s: %s" % (path, e))
+ return False
+ return True
+
class BWList:
def __init__(self, listdir):
self.listDir = listdir
if not os.path.isdir(self.listDir):
- # XXX Change this to something more appropriate
- raise IOError("Bad dir: %s" % self.listDir)
+ if not createDir(self.listDir):
+ # XXX Change this to something more appropriate
+ raise IOError("Bad dir: %s" % self.listDir)
def lookupListEntry(self, address):
"""Check to see if we have a list entry for the given address."""
Modified: projects/gettor/gettor/packages.py
===================================================================
--- projects/gettor/gettor/packages.py 2009-08-31 02:48:21 UTC (rev 20448)
+++ projects/gettor/gettor/packages.py 2009-08-31 19:16:10 UTC (rev 20449)
@@ -22,14 +22,24 @@
log = gettor.gtlog.getLogger()
+# XXX
+def createDir(path):
+ try:
+ log.info("Creating directory %s.." % path)
+ os.makedirs(path)
+ except OSError, e:
+ log.error("Failed to create directory %s: %s" % (path, e))
+ return False
+ return True
+
class gettorPackages:
-
- packageRegex = { "windows-bundle": "vidalia-bundle-.*.exe$",
- "panther-bundle": "vidalia-bundle-.*-ppc.dmg$",
- "macosx-universal-bundle": "vidalia-bundle-.*-universal.dmg$",
- "source-bundle": "tor-.*.tar.gz",
- "tor-browser-bundle": "tor-browser-.*_en-US.exe",
- "tor-im-browser-bundle": "tor-im-browser-.*_en-US.exe",
+ # "bundle name": ("single file regex", "split file regex")
+ packageRegex = { "windows-bundle": ("vidalia-bundle-.*.exe$", "vidalia-bundle-.*_split$"),
+ "panther-bundle": ("vidalia-bundle-.*-ppc.dmg$", "vidalia-bundle-.*-ppc_split$"),
+ "macosx-universal-bundle": ("vidalia-bundle-.*-universal.dmg$", "vidalia-bundle-.*-universal_split$"),
+ "source-bundle": ("tor-.*.tar.gz$", "none"),
+ "tor-browser-bundle": ("tor-browser-.*_en-US.exe$", "tor-browser-.*_en-US_split$"),
+ "tor-im-browser-bundle": ("tor-im-browser-.*_en-US.exe$", "tor-im-browser-.*_en-US_split$"),
# Mike won't sign Torbutton; He doesn't get gettor support
#"torbutton": "torbutton-current.xpi$",
}
@@ -41,14 +51,16 @@
try:
entry = os.stat(self.distDir)
except OSError, e:
- log.error("Bad dist dir %s: %s" % (self.distDir, e))
- raise IOError
+ if not createDir(self.Distdir):
+ log.error("Bad dist dir %s: %s" % (self.distDir, e))
+ raise IOError
self.packDir = config.getPackDir()
try:
entry = os.stat(self.packDir)
except OSError, e:
- log.error("Bad pack dir %s: %s" % (self.packDir, e))
- raise IOError
+ if not createDir(self.packDir):
+ log.error("Bad pack dir %s: %s" % (self.packDir, e))
+ raise IOError
self.rsync = ["rsync"]
self.rsync.append("-a")
# Don't download dotdirs
@@ -77,8 +89,34 @@
def buildPackages(self):
for filename in os.listdir(self.distDir):
- for (pack, regex) in self.packageRegex.items():
- if re.compile(regex).match(filename):
+ for (pack, (regex_single, regex_split)) in self.packageRegex.items():
+ # Splitfile hacks. XXX: Refactor
+ if re.compile(regex_split).match(filename):
+ packSplitDir = None
+ try:
+ packSplitDir = self.packDir + "/" + pack + ".split"
+ if not os.access(packSplitDir, os.R_OK):
+ os.mkdir(packSplitDir)
+ except OSError, e:
+ log.error(_("Could not create dir %s: %s" % (packSplitDir, e)))
+ # Loop through split dir, look if every partXX.ZZZ has a matching signature,
+ # pack them together in a .z
+ splitdir = self.distDir + "/" + filename
+ for splitfile in os.listdir(splitdir):
+ if re.compile(".*split.part.*").match(splitfile):
+ ascfile = splitdir + "/signatures/" + splitfile + ".asc"
+ file = splitdir + "/" + splitfile
+ zipFileName = packSplitDir + "/" + splitfile + ".z"
+ if os.access(ascfile, os.R_OK) and os.access(file, os.R_OK):
+ print "ok: ", zipFileName
+ zip = zipfile.ZipFile(zipFileName, "w")
+ zip.write(splitdir + "/" + splitfile, os.path.basename(file))
+ zip.write(ascfile, os.path.basename(ascfile))
+ zip.close()
+ else:
+ log.error(_("Uhm, no signature for %s found" % splitfile))
+ return False
+ if re.compile(regex_single).match(filename):
file = self.distDir + "/" + filename
ascfile = file + ".asc"
zipFileName = self.packDir + "/" + pack + ".z"
Modified: projects/gettor/gettor/requests.py
===================================================================
--- projects/gettor/gettor/requests.py 2009-08-31 02:48:21 UTC (rev 20448)
+++ projects/gettor/gettor/requests.py 2009-08-31 19:16:10 UTC (rev 20449)
@@ -51,6 +51,8 @@
self.replytoAddress = self.parsedMessage["from"]
# If no package name could be recognized, use 'None'
self.returnPackage = None
+ self.splitDelivery = False
+ # Parse line by line
for line in email.Iterators.body_line_iterator(self.parsedMessage):
# Remove comments
if line.startswith(">"):
@@ -60,6 +62,12 @@
if match:
self.returnPackage = package
log.info(_("User requested package %s") % self.returnPackage)
+ # If we find 'split' somewhere in the mail, we assume that the user wants
+ # a split delivery
+ match = re.match(".*split.*", line)
+ if match:
+ log.info(_("User requested a split delivery"))
+ self.splitDelivery = True
self.replyLocale = None
pattern = re.compile("^Lang:\s+(.*)$")
@@ -94,6 +102,9 @@
def getLocale(self):
return self.replyLocale
+ def getSplitDelivery(self):
+ return self.splitDelivery
+
if __name__ == "__main__" :
""" Give us an email to understand what we think of it. """
packageList = {
Modified: projects/gettor/gettor/responses.py
===================================================================
--- projects/gettor/gettor/responses.py 2009-08-31 02:48:21 UTC (rev 20448)
+++ projects/gettor/gettor/responses.py 2009-08-31 19:16:10 UTC (rev 20449)
@@ -181,14 +181,17 @@
return status
- def constructMessage(self, messageText, ourAddress, recipient, fileName=None):
+ def sendSplitPackage(self, source, destination, filename):
+ def sendPackage(
+
+ def constructMessage(self, messageText, ourAddress, recipient, fileName=None, subj=_('Re: Your "gettor" request')):
""" Construct a multi-part mime message, including only the first part
with plaintext."""
message = StringIO.StringIO()
mime = MimeWriter.MimeWriter(message)
mime.addheader('MIME-Version', '1.0')
- mime.addheader('Subject', _('Re: Your "gettor" request'))
+ mime.addheader('Subject', subj)
mime.addheader('To', recipient)
mime.addheader('From', ourAddress)
mime.startmultipartbody('mixed')