[csw-devel] SF.net SVN: gar:[4448] csw/mgar/pkg/pyzor/trunk
idogan23 at users.sourceforge.net
idogan23 at users.sourceforge.net
Thu Apr 23 17:34:14 CEST 2009
Revision: 4448
http://gar.svn.sourceforge.net/gar/?rev=4448&view=rev
Author: idogan23
Date: 2009-04-23 15:34:14 +0000 (Thu, 23 Apr 2009)
Log Message:
-----------
pyzor: added patches to address several issues
Modified Paths:
--------------
csw/mgar/pkg/pyzor/trunk/Makefile
csw/mgar/pkg/pyzor/trunk/checksums
Added Paths:
-----------
csw/mgar/pkg/pyzor/trunk/files/client.py.diff
csw/mgar/pkg/pyzor/trunk/files/pyzor.diff
csw/mgar/pkg/pyzor/trunk/files/pyzord.diff
Modified: csw/mgar/pkg/pyzor/trunk/Makefile
===================================================================
--- csw/mgar/pkg/pyzor/trunk/Makefile 2009-04-23 14:10:50 UTC (rev 4447)
+++ csw/mgar/pkg/pyzor/trunk/Makefile 2009-04-23 15:34:14 UTC (rev 4448)
@@ -11,6 +11,10 @@
MASTER_SITES = http://www.pyzor.org/
DISTFILES = $(GARNAME)-$(GARVERSION).tar.bz2
+PATCHFILES = client.py.diff
+PATCHFILES += pyzor.diff
+PATCHFILES += pyzord.diff
+
# We define upstream file regex so we can be notifed of new upstream software release
UFILES_REGEX = $(GARNAME)-(\d+(?:\.\d+)*).tar.gz
Modified: csw/mgar/pkg/pyzor/trunk/checksums
===================================================================
--- csw/mgar/pkg/pyzor/trunk/checksums 2009-04-23 14:10:50 UTC (rev 4447)
+++ csw/mgar/pkg/pyzor/trunk/checksums 2009-04-23 15:34:14 UTC (rev 4448)
@@ -1 +1,4 @@
+d933f0cc0013222f457cbe91ac400c75 download/client.py.diff
ee7afe4cc9d419bce5f29250a01c4374 download/pyzor-0.4.0.tar.bz2
+7cf7db0609c5fcbca08e93d4521a964c download/pyzor.diff
+b9d3960264af0633c8f784c36577920b download/pyzord.diff
Added: csw/mgar/pkg/pyzor/trunk/files/client.py.diff
===================================================================
--- csw/mgar/pkg/pyzor/trunk/files/client.py.diff (rev 0)
+++ csw/mgar/pkg/pyzor/trunk/files/client.py.diff 2009-04-23 15:34:14 UTC (rev 4448)
@@ -0,0 +1,490 @@
+diff --speed-large-files --minimal -Nru pyzor-0.4.0.orig/lib/pyzor/client.py pyzor-0.4.0/lib/pyzor/client.py
+--- pyzor-0.4.0.orig/lib/pyzor/client.py 2002-09-08 22:37:15.000000000 +0200
++++ pyzor-0.4.0/lib/pyzor/client.py 2009-04-23 16:48:08.485649396 +0200
+@@ -8,11 +8,21 @@
+ import getopt
+ import tempfile
+ import mimetools
++import multifile
+ import sha
+
+ import pyzor
+ from pyzor import *
+
++import warnings
++
++def fxn():
++ warnings.warn("deprecated", DeprecationWarning)
++
++with warnings.catch_warnings():
++ warnings.simplefilter("ignore")
++ fxn()
++
+ __author__ = pyzor.__author__
+ __version__ = pyzor.__version__
+ __revision__ = "$Id: client.py,v 1.41 2002/09/08 20:37:15 ftobin Exp $"
+@@ -58,11 +68,6 @@
+ self.send(msg, address)
+ return self.read_response(msg.get_thread())
+
+- def shutdown(self, address):
+- msg = ShutdownRequest()
+- self.send(msg, address)
+- return self.read_response(msg.get_thread())
+-
+ def build_socket(self):
+ self.socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+
+@@ -132,39 +137,50 @@
+
+ def run(self):
+ debug = 0
+- (options, args) = getopt.getopt(sys.argv[1:], 'dh:', ['homedir='])
+- if len(args) < 1:
+- self.usage()
+-
+ specified_homedir = None
++ options = None
++ log = None
++
++ try:
++ (options, args) = getopt.getopt(sys.argv[1:], 'd', ['homedir=', 'log'])
++ except getopt.GetoptError:
++ self.usage()
++
++ if len(args) < 1:
++ self.usage()
+
+ for (o, v) in options:
+ if o == '-d':
+ debug = 1
+- elif o == '-h':
+- self.usage()
+ elif o == '--homedir':
+ specified_homedir = v
++ elif o == '--log':
++ log = 1
+
+ self.output = Output(debug=debug)
+-
+ homedir = pyzor.get_homedir(specified_homedir)
+-
++
++ if log:
++ sys.stderr = open(homedir + "/pyzor.log", 'a')
++ sys.stderr.write("\npyzor[" + repr (os.getpid()) + "]:\n")
++
+ config = pyzor.Config(homedir)
+ config.add_section('client')
+
+- defaults = {'ServersFile': 'servers',
++ defaults = {'ServersFile': 'servers',
+ 'DiscoverServersURL': ServerList.inform_url,
+- 'AccountsFile' : 'accounts',
++ 'AccountsFile': 'accounts',
++ 'Timeout': str(Client.timeout),
+ }
+
+ for k, v in defaults.items():
+ config.set('client', k, v)
+-
++
+ config.read(os.path.join(homedir, 'config'))
+
+ servers_fn = config.get_filename('client', 'ServersFile')
+-
++ Client.timeout = config.getint('client', 'Timeout')
++
+ if not os.path.exists(homedir):
+ os.mkdir(homedir)
+
+@@ -197,10 +213,13 @@
+ def usage(self, s=None):
+ if s is not None:
+ sys.stderr.write("%s\n" % s)
+- sys.stderr.write("""usage: %s [-d] [--homedir dir] command [cmd_opts]
++ sys.stderr.write("""
++usage: %s [-d] [--homedir dir] command [cmd_opts]
+ command is one of: check, report, discover, ping, digest, predigest,
+- genkey, shutdown
++ genkey
++
+ Data is read on standard input (stdin).
++
+ """
+ % sys.argv[0])
+ sys.exit(2)
+@@ -208,9 +227,9 @@
+
+
+ def ping(self, args):
+- getopt.getopt(args[1:], '')
+-
+- if len(args) > 1:
++ try:
++ getopt.getopt(args[1:], '')
++ except getopt.GetoptError:
+ self.usage("%s does not take any non-option arguments" % args[0])
+
+ runner = ClientRunner(self.client.ping)
+@@ -221,30 +240,23 @@
+ return runner.all_ok
+
+
+- def shutdown(self, args):
+- (opts, args2) = getopt.getopt(args[1:], '')
+-
+- if len(args2) > 1:
++ def info(self, args):
++ try:
++ (options, args2) = getopt.getopt(args[1:], '', ['mbox'])
++ except getopt.GetoptError:
+ self.usage("%s does not take any non-option arguments" % args[0])
+
+- runner = ClientRunner(self.client.shutdown)
+-
+- for arg in args2:
+- server = Address.from_str(arg)
+- runner.run(server, (server,))
+-
+- return runner.all_ok
+-
++ do_mbox = 'msg'
+
+- def info(self, args):
+- getopt.getopt(args[1:], '')
+-
+- if len(args) > 1:
+- self.usage("%s does not take any non-option arguments" % args[0])
++ for (o, v) in options:
++ if o == '--mbox':
++ do_mbox = 'mbox'
+
+ runner = InfoClientRunner(self.client.info)
+
+- for digest in FileDigester(sys.stdin, self.digest_spec):
++ for digest in get_input_handler(sys.stdin, self.digest_spec, do_mbox):
++ if digest is None:
++ continue
+ for server in self.servers:
+ response = runner.run(server, (digest, server))
+
+@@ -252,34 +264,45 @@
+
+
+ def check(self, args):
+- getopt.getopt(args[1:], '')
+-
+- if len(args) > 1:
++ try:
++ (options, args2) = getopt.getopt(args[1:], '', ['mbox'])
++ except getopt.GetoptError:
+ self.usage("%s does not take any non-option arguments" % args[0])
+
++ do_mbox = 'msg'
++
++ for (o, v) in options:
++ if o == '--mbox':
++ do_mbox = 'mbox'
++
+ runner = CheckClientRunner(self.client.check)
+
+- for digest in FileDigester(sys.stdin, self.digest_spec):
++ for digest in get_input_handler(sys.stdin, self.digest_spec, do_mbox):
++ if digest is None:
++ continue
+ for server in self.servers:
+- response = runner.run(server, (digest, server))
++ runner.run(server, (digest, server))
+
+ return (runner.found_hit and not runner.whitelisted)
+
+
+ def report(self, args):
+- (options, args2) = getopt.getopt(args[1:], '', ['mbox'])
+- do_mbox = False
+-
+- if len(args2) > 1:
++ try:
++ (options, args2) = getopt.getopt(args[1:], '', ['mbox'])
++ except getopt.GetoptError:
+ self.usage("%s does not take any non-option arguments" % args[0])
+
++ do_mbox = 'msg'
++
+ for (o, v) in options:
+ if o == '--mbox':
+- do_mbox = True
++ do_mbox = 'mbox'
+
+ all_ok = True
+
+- for digest in FileDigester(sys.stdin, self.digest_spec, do_mbox):
++ for digest in get_input_handler(sys.stdin, self.digest_spec, do_mbox):
++ if digest is None:
++ continue
+ if not self.send_digest(digest, self.digest_spec,
+ self.client.report):
+ all_ok = False
+@@ -302,20 +325,22 @@
+
+
+ def whitelist(self, args):
+- (options, args2) = getopt.getopt(args[1:], '', ['mbox'])
+-
+- if len(args2) > 1:
++ try:
++ (options, args2) = getopt.getopt(args[1:], '', ['mbox'])
++ except getopt.GetoptError:
+ self.usage("%s does not take any non-option arguments" % args[0])
+
+- do_mbox = False
++ do_mbox = 'msg'
+
+ for (o, v) in options:
+ if o == '--mbox':
+- do_mbox = True
++ do_mbox = 'mbox'
+
+ all_ok = True
+
+- for digest in FileDigester(sys.stdin, self.digest_spec, do_mbox):
++ for digest in get_input_handler(sys.stdin, self.digest_spec, do_mbox):
++ if digest is None:
++ continue
+ if not self.send_digest(digest, self.digest_spec,
+ self.client.whitelist):
+ all_ok = False
+@@ -324,32 +349,34 @@
+
+
+ def digest(self, args):
+- (options, args2) = getopt.getopt(args[1:], '', ['mbox'])
+-
+- if len(args2) > 1:
++ try:
++ (options, args2) = getopt.getopt(args[1:], '', ['mbox'])
++ except getopt.GetoptError:
+ self.usage("%s does not take any non-option arguments" % args[0])
+
+-
+- do_mbox = False
++ do_mbox = 'msg'
+
+ for (o, v) in options:
+ if o == '--mbox':
+- do_mbox = True
++ do_mbox = 'mbox'
+
+- for digest in FileDigester(sys.stdin, self.digest_spec, do_mbox):
++ for digest in get_input_handler(sys.stdin, self.digest_spec, do_mbox):
++ if digest is None:
++ continue
+ sys.stdout.write("%s\n" % digest)
+
+ return True
+
+
+ def print_digested(self, args):
+- getopt.getopt(args[1:], '')
+-
+- if len(args) > 1:
++ try:
++ getopt.getopt(args[1:], '')
++ except getopt.GetoptError:
+ self.usage("%s does not take any non-option arguments" % args[0])
+
++ do_mbox = 'msg'
+ def loop():
+- for digest in FileDigester(sys.stdin, self.digest_spec):
++ for digest in get_input_handler(sys.stdin, self.digest_spec, do_mbox):
+ pass
+
+ modglobal_apply(globals(), {'DataDigester': PrintingDataDigester},
+@@ -358,9 +385,9 @@
+ return True
+
+ def genkey(self, args):
+- getopt.getopt(args[1:], '')
+-
+- if len(args) > 1:
++ try:
++ getopt.getopt(args[1:], '')
++ except getopt.GetoptError:
+ self.usage("%s does not take any non-option arguments" % args[0])
+
+ import getpass
+@@ -414,7 +441,6 @@
+ 'report': report,
+ 'ping' : ping,
+ 'genkey': genkey,
+- 'shutdown': shutdown,
+ 'info': info,
+ 'whitelist': whitelist,
+ 'digest': digest,
+@@ -466,7 +492,7 @@
+
+ (fp, offsets) = self.get_line_offsets(fp)
+
+- # did we get an empty file?
++ # did we get an empty (parsed output)file?
+ if len(offsets) == 0:
+ return
+
+@@ -608,30 +634,36 @@
+
+
+
+-class FileDigester(BasicIterator):
+- __slots__ = ['digester']
+-
+- def __init__(self, fp, spec, mbox=False):
+- self.digester = iter(get_file_digester(fp, spec, mbox))
+- self.output = pyzor.Output()
+-
+- def next(self):
+- digest = self.digester.next()
+- self.output.debug("calculated digest: %s" % digest)
+- return digest
+-
+-
+-
+-def get_file_digester(fp, spec, mbox, seekable=False):
++def get_input_handler(fp, spec, style='msg', seekable=False):
+ """Return an object that can be iterated over
+ to get all the digests from fp according to spec.
+ mbox is a boolean"""
+- if mbox:
++ if style == 'msg':
++ return filter(lambda x: x is not None,
++ (DataDigester(rfc822BodyCleaner(fp),
++ spec, seekable).get_digest(),)
++ )
++
++ elif style =='mbox':
+ return MailboxDigester(fp, spec)
+
+- return (DataDigester(rfc822BodyCleaner(fp),
+- spec, seekable).get_digest(),)
++ elif style == 'digests':
++ return JustDigestsIterator(fp)
++
++ raise ValueError, "unknown input style"
++
++
++class JustDigestsIterator(BasicIterator):
++ __slots__ = ['fp']
++
++ def __init__(self, fp):
++ self.fp = fp
+
++ def next(self):
++ l = fp.readline()
++ if not l:
++ raise StopIteration
++ return l.rstrip()
+
+
+ class MailboxDigester(BasicIterator):
+@@ -645,7 +677,12 @@
+ self.seekable = seekable
+
+ def next(self):
+- next_msg = self.mbox.next()
++ try:
++ next_msg = self.mbox.next()
++ except IOError:
++ print "Error: Please feed mailbox files in on stdin, i.e."
++ print " pyzor digest --mbox < my_mbox_file"
++ next_msg = None
+ if next_msg is None:
+ raise StopIteration
+ return DataDigester(next_msg, self.digest_spec,
+@@ -662,39 +699,69 @@
+ self.multifile = None
+ self.curfile = None
+
++ # Check if we got a mail or not. Set type to binary if there is no 'From:' header and
++ # type text/plain with encoding 7bit. 7bit is passed trough anyway so nobody cares.
++ if (not msg.has_key("From") and self.type == 'text' and msg.subtype == 'plain' and msg.getencoding() == '7bit'):
++ self.type = 'binary';
++
++ if self.type is '':
++ self.type = 'text';
++
+ if self.type == 'text':
+ encoding = msg.getencoding()
+- if encoding == '7bit':
+- self.curfile = msg.fp
+- else:
+- self.curfile = tempfile.TemporaryFile()
+- mimetools.decode(msg.fp, self.curfile, encoding)
+- self.curfile.seek(0)
+-
++ self.curfile = msg.fp
++ if encoding != '7bit':
++ # fix bad encoding name
++ if encoding == '8bits':
++ encoding = '8bit'
++ try:
++ newcurfile = tempfile.TemporaryFile()
++ mimetools.decode(msg.fp, newcurfile, encoding)
++ newcurfile.seek(0)
++ self.curfile = newcurfile
++ except:
++ # ignore encoding on errors, pass msg as is
++ pass
++
+ elif self.type == 'multipart':
+ import multifile
+ self.multifile = multifile.MultiFile(msg.fp, seekable=False)
+ self.multifile.push(msg.getparam('boundary'))
+- self.multifile.next()
+- self.curfile = self.__class__(self.multifile)
+-
++ try:
++ self.multifile.next()
++ self.curfile = self.__class__(self.multifile)
++ except:
++ #
++ # Catch multipart decoding errors
++ #
++ fp.seek(0)
++ self.curfile = fp
++ self.type = 'binary'
+
+ if self.type == 'text' or self.type == 'multipart':
+ assert self.curfile is not None
++ elif self.type == 'binary':
++ try:
++ fp.seek(0)
++ except:
++ pass
++ self.curfile = fp
+ else:
+ assert self.curfile is None
+
+
+ def readline(self):
+ l = ''
+- if self.type in ('text', 'multipart'):
+- l = self.curfile.readline()
+-
+- if self.type == 'multipart' and not l and self.multifile.next():
+- self.curfile = self.__class__(self.multifile)
+- # recursion. Could get messy if
+- # we get a bunch of empty multifile parts
+- l = self.readline()
++ try:
++ if self.type in ('text', 'multipart', 'binary'):
++ l = self.curfile.readline()
++ if self.type == 'multipart' and not l and self.multifile.next():
++ self.curfile = self.__class__(self.multifile)
++ # recursion. Could get messy if
++ # we get a bunch of empty multifile parts
++ l = self.readline()
++ except (TypeError, multifile.Error):
++ pass
+ return l
+
+
Added: csw/mgar/pkg/pyzor/trunk/files/pyzor.diff
===================================================================
--- csw/mgar/pkg/pyzor/trunk/files/pyzor.diff (rev 0)
+++ csw/mgar/pkg/pyzor/trunk/files/pyzor.diff 2009-04-23 15:34:14 UTC (rev 4448)
@@ -0,0 +1,9 @@
+diff --speed-large-files --minimal -Nru pyzor-0.4.0.orig/scripts/pyzor pyzor-0.4.0/scripts/pyzor
+--- pyzor-0.4.0.orig/scripts/pyzor 2002-06-09 01:24:20.000000000 +0200
++++ pyzor-0.4.0/scripts/pyzor 2009-04-23 17:24:58.103657953 +0200
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python2
++#!/usr/bin/python2 -Wignore::DeprecationWarning
+
+ import pyzor.client
+ pyzor.client.run()
Added: csw/mgar/pkg/pyzor/trunk/files/pyzord.diff
===================================================================
--- csw/mgar/pkg/pyzor/trunk/files/pyzord.diff (rev 0)
+++ csw/mgar/pkg/pyzor/trunk/files/pyzord.diff 2009-04-23 15:34:14 UTC (rev 4448)
@@ -0,0 +1,9 @@
+diff --speed-large-files --minimal -Nru pyzor-0.4.0.orig/scripts/pyzord pyzor-0.4.0/scripts/pyzord
+--- pyzor-0.4.0.orig/scripts/pyzord 2002-09-08 05:33:44.000000000 +0200
++++ pyzor-0.4.0/scripts/pyzord 2009-04-23 17:30:57.922301138 +0200
+@@ -1,4 +1,4 @@
+-#!/usr/bin/python2
++#!/usr/bin/python2 -Wignore::DeprecationWarning
+
+ import os
+ import os.path
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
More information about the devel
mailing list