[Zodb-checkins] SVN: ZODB/trunk/src/scripts/zodbload.py Merge rev
29532 from 3.3 branch.
Tim Peters
tim.one at comcast.net
Thu Mar 17 14:11:13 EST 2005
Log message for revision 29533:
Merge rev 29532 from 3.3 branch.
Merge checkin made from a wrong project:
r29511 | gotcha | 2005-03-16 11:01:21 -0500 (Wed, 16 Mar 2005) | 1 line
Changed paths:
M /Zope/trunk/utilities/ZODBTools/zodbload.py
port features from 2.7
Changed:
U ZODB/trunk/src/scripts/zodbload.py
-=-
Modified: ZODB/trunk/src/scripts/zodbload.py
===================================================================
--- ZODB/trunk/src/scripts/zodbload.py 2005-03-17 19:09:44 UTC (rev 29532)
+++ ZODB/trunk/src/scripts/zodbload.py 2005-03-17 19:11:11 UTC (rev 29533)
@@ -89,6 +89,30 @@
Specify the mailbox for getting input data.
+ There is a (lame) syntax for providing options within the
+ filename. The filename may be followed by up to 3 integers,
+ min, max, and start:
+
+ -mbox 'foo.mbox 0 100 10000'
+
+ The messages from min to max will be read from the mailbox.
+ They will be assigned message numbers starting with start.
+ So, in the example above, we read the first hundred messages
+ and assign thgem message numbers starting with 10001.
+
+ The maxmum can be given as a negative number, in which case, it
+ specifies the number of messages to read.
+
+ The start defaults to the minimum. The following two options:
+
+ -mbox 'foo.mbox 300 400 300'
+
+ and
+
+ -mbox 'foo.mbox 300 -100'
+
+ are equivalent
+
$Id$
"""
@@ -126,11 +150,28 @@
def __init__(self, filename):
if ' ' in filename:
- filename, min, max = filename.split()
+ filename = filename.split()
+ if len(filename) < 4:
+ filename += [0, 0, -1][-(4-len(filename)):]
+ filename, min, max, start = filename
min = int(min)
max = int(max)
+ start = int(start)
+
+ if start < 0:
+ start = min
+
+ if max < 0:
+ # negative max is treated as a count
+ self._max = start - max
+ elif max > 0:
+ self._max = start + max - min
+ else:
+ self._max = 0
+
else:
- min = max = 0
+ self._max = 0
+ min = start = 0
if filename.endswith('.bz2'):
f = os.popen("bunzip2 <"+filename, 'r')
@@ -140,7 +181,7 @@
self._mbox = mb = mailbox.UnixMailbox(f)
- self.number = min
+ self.number = start
while min:
mb.next()
min -= 1
@@ -291,10 +332,20 @@
run1(tid, Zope2.DB, factory, job, args)
-def index(connection, messages, catalog):
+def index(connection, messages, catalog, max):
app = connection.root()['Application']
for message in messages:
mail = mailfolder(app, message.mbox, message.number)
+
+ if max:
+ # Cheat and use folder implementation secrets
+ # to avoid having to read the old data
+ _objects = mail._objects
+ if len(_objects) >= max:
+ for d in _objects[:len(_objects)-max+1]:
+ del mail.__dict__[d['id']]
+ mail._objects = _objects[len(_objects)-max+1:]
+
docid = 'm'+str(message.number)
mail.manage_addDTMLDocument(docid, file=message.body)
@@ -330,13 +381,13 @@
catalog = 1
prefix = 'index'
- def __init__(self, mbox, number=1):
+ def __init__(self, mbox, number=1, max=0):
self.__name__ = "%s%s_%s" % (self.prefix, number, mbox.__name__)
- self.mbox, self.number = mbox, int(number)
+ self.mbox, self.number, self.max = mbox, int(number), int(max)
def create(self):
messages = [self.mbox.next() for i in range(self.number)]
- return index, (messages, self.catalog)
+ return index, (messages, self.catalog, self.max)
class InsertJob(IndexJob):
@@ -730,6 +781,9 @@
if options["mbox"]:
mboxes[options["mbox"]] = MBox(options["mbox"])
+ # Perform a ZConfig-based Zope initialization:
+ zetup(os.path.join(lib_python, '..', '..', 'etc', 'zope.conf'))
+
if options.has_key('setup'):
setup(lib_python)
else:
@@ -770,5 +824,19 @@
run(jobs)
+def zetup(configfile_name):
+ from Zope.Startup.options import ZopeOptions
+ from Zope.Startup import handlers as h
+ from App import config
+ opts = ZopeOptions()
+ opts.configfile = configfile_name
+ opts.realize(args=[])
+ h.handleConfig(opts.configroot, opts.confighandlers)
+ config.setConfiguration(opts.configroot)
+ from Zope.Startup import dropPrivileges
+ dropPrivileges(opts.configroot)
+
+
+
if __name__ == '__main__':
main()
More information about the Zodb-checkins
mailing list