annotate roundup/admin.py @ 834:568eed5fb4fd

Optimize Class.find so that the propspec can contain a set of ids to match. This is used by indexer.search so it can do just one find for all the index matches. This was already confusing code, but for common terms (lots of index matches), it is enormously faster.
author Gordon B. McMillan <gmcm@users.sourceforge.net>
date Tue, 09 Jul 2002 21:53:38 +0000
parents 6d7a45c8464a
children 68cef2bb929d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 #! /usr/bin/env python
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # This module is free software, and you may redistribute it and/or modify
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 # under the same terms as Python, so long as this copyright message and
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # disclaimer are retained in their original form.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 # POSSIBILITY OF SUCH DAMAGE.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 #
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
19 # $Id: admin.py,v 1.16 2002-07-09 04:19:09 richard Exp $
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
20
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
21 import sys, os, getpass, getopt, re, UserDict, shlex, shutil
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
22 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
23 import csv
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24 except ImportError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25 csv = None
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
26 from roundup import date, hyperdb, roundupdb, init, password, token
773
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 763
diff changeset
27 from roundup import __version__ as roundup_version
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
28 import roundup.instance
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
29 from roundup.i18n import _
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31 class CommandDict(UserDict.UserDict):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 '''Simple dictionary that lets us do lookups using partial keys.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34 Original code submitted by Engelbert Gruber.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 _marker = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 def get(self, key, default=_marker):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 if self.data.has_key(key):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 return [(key, self.data[key])]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 keylist = self.data.keys()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 keylist.sort()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 for ki in keylist:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 if ki.startswith(key):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 l.append((ki, self.data[ki]))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 if not l and default is self._marker:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 raise KeyError, key
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 return l
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 class UsageError(ValueError):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 pass
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 class AdminTool:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 def __init__(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 self.commands = CommandDict()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
57 for k in AdminTool.__dict__.keys():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 if k[:3] == 'do_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59 self.commands[k[3:]] = getattr(self, k)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 self.help = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
61 for k in AdminTool.__dict__.keys():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62 if k[:5] == 'help_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 self.help[k[5:]] = getattr(self, k)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 self.instance_home = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
65 self.db = None
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 def get_class(self, classname):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 '''Get the class - raise an exception if it doesn't exist.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 try:
489
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
71 return self.db.getclass(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 raise UsageError, _('no such class "%(classname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74
649
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
75 def props_from_args(self, args):
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 props = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 for arg in args:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 if arg.find('=') == -1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 raise UsageError, _('argument "%(arg)s" not propname=value')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 key, value = arg.split('=')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 except ValueError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 raise UsageError, _('argument "%(arg)s" not propname=value')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 props[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85 return props
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
87 def usage(self, message=''):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
88 if message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 message = _('Problem: %(message)s)\n\n')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
90 print _('''%(message)sUsage: roundup-admin [-i instance home] [-u login] [-c] <command> <arguments>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 Help:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 roundup-admin -h
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 roundup-admin help -- this help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 roundup-admin help <command> -- command-specific help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 roundup-admin help all -- all available help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 Options:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
98 -i instance home -- specify the issue tracker "home directory" to administer
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 -u -- the user[:password] to use for commands
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 -c -- when outputting lists of data, just comma-separate them''')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
102
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 def help_commands(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
104 print _('Commands:'),
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 commands = ['']
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106 for command in self.commands.values():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 h = command.__doc__.split('\n')[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
108 commands.append(' '+h[7:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
109 commands.sort()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 commands.append(_('Commands may be abbreviated as long as the abbreviation matches only one'))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
111 commands.append(_('command, e.g. l == li == lis == list.'))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
112 print '\n'.join(commands)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 print
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 def help_commands_html(self, indent_re=re.compile(r'^(\s+)\S+')):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
116 commands = self.commands.values()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
117 def sortfun(a, b):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 return cmp(a.__name__, b.__name__)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 commands.sort(sortfun)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 for command in commands:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
121 h = command.__doc__.split('\n')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 name = command.__name__[3:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 usage = h[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 print _('''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125 <tr><td valign=top><strong>%(name)s</strong></td>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 <td><tt>%(usage)s</tt><p>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 <pre>''')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 indent = indent_re.match(h[3])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 if indent: indent = len(indent.group(1))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 for line in h[3:]:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
131 if indent:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 print line[indent:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 print line
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
135 print _('</pre></td></tr>\n')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 def help_all(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 print _('''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 All commands (except help) require an instance specifier. This is just the path
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 to the roundup instance you're working with. A roundup instance is where
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 roundup keeps the database and configuration file that defines an issue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 tracker. It may be thought of as the issue tracker's "home directory". It may
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 be specified in the environment variable ROUNDUP_INSTANCE or on the command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 line as "-i instance".
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 A designator is a classname and a nodeid concatenated, eg. bug1, user10, ...
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 Property values are represented as strings in command arguments and in the
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 printed results:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
150 . Strings are, well, strings.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 . Date values are printed in the full date format in the local time zone, and
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 accepted in the full format or any of the partial formats explained below.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 . Link values are printed as node designators. When given as an argument,
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 node designators and key strings are both accepted.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 . Multilink values are printed as lists of node designators joined by commas.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
156 When given as an argument, node designators and key strings are both
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157 accepted; an empty string, a single node, or a list of nodes joined by
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 commas is accepted.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
160 When property values must contain spaces, just surround the value with
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 quotes, either ' or ". A single space may also be backslash-quoted. If a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162 valuu must contain a quote character, it must be backslash-quoted or inside
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
163 quotes. Examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 hello world (2 tokens: hello, world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 "hello world" (1 token: hello world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 "Roch'e" Compaan (2 tokens: Roch'e Compaan)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 Roch\'e Compaan (2 tokens: Roch'e Compaan)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 address="1 2 3" (1 token: address=1 2 3)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 \\ (1 token: \)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 \n\r\t (1 token: a newline, carriage-return and tab)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 When multiple nodes are specified to the roundup get or roundup set
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 commands, the specified properties are retrieved or set on all the listed
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 nodes.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
175
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 When multiple results are returned by the roundup get or roundup find
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
177 commands, they are printed one per line (default) or joined by commas (with
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
178 the -c) option.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180 Where the command changes data, a login name/password is required. The
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181 login may be specified as either "name" or "name:password".
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182 . ROUNDUP_LOGIN environment variable
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
183 . the -u command-line option
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184 If either the name or password is not supplied, they are obtained from the
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
185 command-line.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187 Date format examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188 "2000-04-17.03:45" means <Date 2000-04-17.08:45:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189 "2000-04-17" means <Date 2000-04-17.00:00:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 "01-25" means <Date yyyy-01-25.00:00:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 "08-13.22:13" means <Date yyyy-08-14.03:13:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
192 "11-07.09:32:43" means <Date yyyy-11-07.14:32:43>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 "14:25" means <Date yyyy-mm-dd.19:25:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
194 "8:47:11" means <Date yyyy-mm-dd.13:47:11>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
195 "." means "right now"
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
196
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197 Command help:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198 ''')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
199 for name, command in self.commands.items():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
200 print _('%s:')%name
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
201 print _(' '), command.__doc__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 def do_help(self, args, nl_re=re.compile('[\r\n]'),
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 indent_re=re.compile(r'^(\s+)\S+')):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 '''Usage: help topic
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206 Give help about topic.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
207
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208 commands -- list commands
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209 <command> -- help specific to a command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210 initopts -- init command options
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211 all -- all available help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 '''
582
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
213 if len(args)>0:
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
214 topic = args[0]
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
215 else:
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
216 topic = 'help'
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
217
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
218
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 # try help_ methods
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 if self.help.has_key(topic):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 self.help[topic]()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
223
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
224 # try command docstrings
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
225 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
226 l = self.commands.get(topic)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
227 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
228 print _('Sorry, no help for "%(topic)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
229 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
230
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231 # display the help for each match, removing the docsring indent
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
232 for name, help in l:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
233 lines = nl_re.split(help.__doc__)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
234 print lines[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235 indent = indent_re.match(lines[1])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
236 if indent: indent = len(indent.group(1))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
237 for line in lines[1:]:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
238 if indent:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
239 print line[indent:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
241 print line
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
242 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
244 def help_initopts(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 import roundup.templates
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246 templates = roundup.templates.listTemplates()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 print _('Templates:'), ', '.join(templates)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
248 import roundup.backends
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 backends = roundup.backends.__all__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
250 print _('Back ends:'), ', '.join(backends)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
252
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
253 def do_install(self, instance_home, args):
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
254 '''Usage: install [template [backend [admin password]]]
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
255 Install a new Roundup instance.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
256
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
257 The command will prompt for the instance home directory (if not supplied
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
258 through INSTANCE_HOME or the -i option). The template, backend and admin
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
259 password may be specified on the command-line as arguments, in that
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260 order.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
262 The initialise command must be called after this command in order
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
263 to initialise the instance's database. You may edit the instance's
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
264 initial database contents before running that command by editing
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
265 the instance's dbinit.py module init() function.
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
266
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
267 See also initopts help.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
268 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
270 raise UsageError, _('Not enough arguments supplied')
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
271
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
272 # make sure the instance home can be created
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
273 parent = os.path.split(instance_home)[0]
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
274 if not os.path.exists(parent):
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
275 raise UsageError, _('Instance home parent directory "%(parent)s"'
698
a26afb64a947 minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents: 656
diff changeset
276 ' does not exist')%locals()
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
277
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
278 # select template
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279 import roundup.templates
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280 templates = roundup.templates.listTemplates()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281 template = len(args) > 1 and args[1] or ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
282 if template not in templates:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
283 print _('Templates:'), ', '.join(templates)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
284 while template not in templates:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
285 template = raw_input(_('Select template [classic]: ')).strip()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286 if not template:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287 template = 'classic'
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
288
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
289 # select hyperdb backend
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
290 import roundup.backends
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
291 backends = roundup.backends.__all__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
292 backend = len(args) > 2 and args[2] or ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
293 if backend not in backends:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
294 print _('Back ends:'), ', '.join(backends)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
295 while backend not in backends:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
296 backend = raw_input(_('Select backend [anydbm]: ')).strip()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
297 if not backend:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
298 backend = 'anydbm'
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
299
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
300 # install!
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
301 init.install(instance_home, template, backend)
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
302
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
303 print _('''
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
304 You should now edit the instance configuration file:
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
305 %(instance_config_file)s
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
306 ... at a minimum, you must set MAILHOST, MAIL_DOMAIN and ADMIN_EMAIL.
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
307
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
308 If you wish to modify the default schema, you should also edit the database
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
309 initialisation file:
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
310 %(database_config_file)s
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
311 ... see the documentation on customizing for more information.
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
312 ''')%{
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
313 'instance_config_file': os.path.join(instance_home, 'instance_config.py'),
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
314 'database_config_file': os.path.join(instance_home, 'dbinit.py')
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
315 }
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
316 return 0
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
317
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
318
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
319 def do_initialise(self, instance_home, args):
763
a85919c54f3a Removed prompt for admin email in initialisation.
Richard Jones <richard@users.sourceforge.net>
parents: 754
diff changeset
320 '''Usage: initialise [adminpw]
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
321 Initialise a new Roundup instance.
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
322
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
323 The administrator details will be set at this step.
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
324
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
325 Execute the instance's initialisation function dbinit.init()
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
326 '''
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
327 # password
751
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
328 if len(args) > 1:
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
329 adminpw = args[1]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
330 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
331 adminpw = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
332 confirm = 'x'
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
333 while adminpw != confirm:
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
334 adminpw = getpass.getpass(_('Admin Password: '))
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
335 confirm = getpass.getpass(_(' Confirm: '))
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
336
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
337 # make sure the instance home is installed
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
338 if not os.path.exists(instance_home):
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
339 raise UsageError, _('Instance home does not exist')%locals()
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
340 if not os.path.exists(os.path.join(instance_home, 'html')):
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
341 raise UsageError, _('Instance has not been installed')%locals()
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
342
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
343 # is there already a database?
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
344 if os.path.exists(os.path.join(instance_home, 'db')):
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
345 print _('WARNING: The database is already initialised!')
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
346 print _('If you re-initialise it, you will lose all the data!')
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
347 ok = raw_input(_('Erase it? Y/[N]: ')).strip()
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
348 if ok.lower() != 'y':
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
349 return 0
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
350
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
351 # nuke it
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
352 shutil.rmtree(os.path.join(instance_home, 'db'))
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
353
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
354 # GO
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
355 init.initialise(instance_home, adminpw)
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
356
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
357 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
358
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
359
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
360 def do_get(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
361 '''Usage: get property designator[,designator]*
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
362 Get the given property of one or more designator(s).
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
363
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
364 Retrieves the property value of the nodes specified by the designators.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
365 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
366 if len(args) < 2:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
367 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
368 propname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
369 designators = args[1].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
370 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
371 for designator in designators:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
372 # decode the node designator
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
373 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
374 classname, nodeid = roundupdb.splitDesignator(designator)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
375 except roundupdb.DesignatorError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
376 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
377
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
378 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
379 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
380 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
381 if self.comma_sep:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
382 l.append(cl.get(nodeid, propname))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
383 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
384 print cl.get(nodeid, propname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
385 except IndexError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
386 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
387 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
388 raise UsageError, _('no such %(classname)s property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
389 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
390 if self.comma_sep:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
391 print ','.join(l)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
392 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
393
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
394
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
395 def do_set(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
396 '''Usage: set designator[,designator]* propname=value ...
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
397 Set the given property of one or more designator(s).
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
398
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
399 Sets the property to the value for all designators given.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
400 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
401 if len(args) < 2:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
402 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
403 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
404
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
405 designators = args[0].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
406
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
407 # get the props from the args
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
408 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
409
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
410 # now do the set for all the nodes
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
411 for designator in designators:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
412 # decode the node designator
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
413 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
414 classname, nodeid = roundupdb.splitDesignator(designator)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
415 except roundupdb.DesignatorError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
416 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
417
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
418 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
419 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
420
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
421 properties = cl.getprops()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
422 for key, value in props.items():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
423 proptype = properties[key]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
424 if isinstance(proptype, hyperdb.String):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
425 continue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
426 elif isinstance(proptype, hyperdb.Password):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
427 props[key] = password.Password(value)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
428 elif isinstance(proptype, hyperdb.Date):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
429 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
430 props[key] = date.Date(value)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
431 except ValueError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
432 raise UsageError, '"%s": %s'%(value, message)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
433 elif isinstance(proptype, hyperdb.Interval):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
434 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
435 props[key] = date.Interval(value)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
436 except ValueError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
437 raise UsageError, '"%s": %s'%(value, message)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
438 elif isinstance(proptype, hyperdb.Link):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
439 props[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
440 elif isinstance(proptype, hyperdb.Multilink):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
441 props[key] = value.split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
442
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
443 # try the set
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
444 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
445 apply(cl.set, (nodeid, ), props)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
446 except (TypeError, IndexError, ValueError), message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
447 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
448 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
449
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
450 def do_find(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
451 '''Usage: find classname propname=value ...
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
452 Find the nodes of the given class with a given link property value.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
453
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
454 Find the nodes of the given class with a given link property value. The
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
455 value may be either the nodeid of the linked node, or its key value.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
456 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
457 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
458 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
459 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
460 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
461 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
462
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
463 # handle the propname=value argument
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
464 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
465
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
466 # if the value isn't a number, look up the linked class to get the
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
467 # number
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
468 for propname, value in props.items():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
469 num_re = re.compile('^\d+$')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
470 if not num_re.match(value):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
471 # get the property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
472 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
473 property = cl.properties[propname]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
474 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
475 raise UsageError, _('%(classname)s has no property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
476 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
477
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
478 # make sure it's a link
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
479 if (not isinstance(property, hyperdb.Link) and not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
480 isinstance(property, hyperdb.Multilink)):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
481 raise UsageError, _('You may only "find" link properties')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
482
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
483 # get the linked-to class and look up the key property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
484 link_class = self.db.getclass(property.classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
485 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
486 props[propname] = link_class.lookup(value)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
487 except TypeError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
488 raise UsageError, _('%(classname)s has no key property"')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
489 'classname': link_class.classname}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
490
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
491 # now do the find
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
492 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
493 if self.comma_sep:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
494 print ','.join(apply(cl.find, (), props))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
495 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
496 print apply(cl.find, (), props)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
497 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
498 raise UsageError, _('%(classname)s has no property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
499 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
500 except (ValueError, TypeError), message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
501 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
502 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
503
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
504 def do_specification(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
505 '''Usage: specification classname
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
506 Show the properties for a classname.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
507
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
508 This lists the properties for a given class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
509 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
510 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
511 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
512 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
513 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
514 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
515
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
516 # get the key property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
517 keyprop = cl.getkey()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
518 for key, value in cl.properties.items():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
519 if keyprop == key:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
520 print _('%(key)s: %(value)s (key property)')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
521 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
522 print _('%(key)s: %(value)s')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
523
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
524 def do_display(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
525 '''Usage: display designator
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
526 Show the property values for the given node.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
527
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
528 This lists the properties and their associated values for the given
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
529 node.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
530 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
531 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
532 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
533
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
534 # decode the node designator
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
535 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
536 classname, nodeid = roundupdb.splitDesignator(args[0])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
537 except roundupdb.DesignatorError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
538 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
539
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
540 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
541 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
542
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
543 # display the values
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
544 for key in cl.properties.keys():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
545 value = cl.get(nodeid, key)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
546 print _('%(key)s: %(value)s')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
547
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
548 def do_create(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
549 '''Usage: create classname property=value ...
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
550 Create a new entry of a given class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
551
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
552 This creates a new entry of the given class using the property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
553 name=value arguments provided on the command line after the "create"
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
554 command.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
555 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
556 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
557 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
558 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
559
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
560 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
561
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
562 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
563 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
564
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
565 # now do a create
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
566 props = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
567 properties = cl.getprops(protected = 0)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
568 if len(args) == 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
569 # ask for the properties
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
570 for key, value in properties.items():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
571 if key == 'id': continue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
572 name = value.__class__.__name__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
573 if isinstance(value , hyperdb.Password):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
574 again = None
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
575 while value != again:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
576 value = getpass.getpass(_('%(propname)s (Password): ')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
577 'propname': key.capitalize()})
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
578 again = getpass.getpass(_(' %(propname)s (Again): ')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
579 'propname': key.capitalize()})
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
580 if value != again: print _('Sorry, try again...')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
581 if value:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
582 props[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
583 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
584 value = raw_input(_('%(propname)s (%(proptype)s): ')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
585 'propname': key.capitalize(), 'proptype': name})
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
586 if value:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
587 props[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
588 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
589 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
590
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
591 # convert types
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
592 for propname, value in props.items():
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
593 # get the property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
594 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
595 proptype = properties[propname]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
596 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
597 raise UsageError, _('%(classname)s has no property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
598 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
599
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
600 if isinstance(proptype, hyperdb.Date):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
601 try:
529
1401596be460 [SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents: 500
diff changeset
602 props[propname] = date.Date(value)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
603 except ValueError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
604 raise UsageError, _('"%(value)s": %(message)s')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
605 elif isinstance(proptype, hyperdb.Interval):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
606 try:
529
1401596be460 [SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents: 500
diff changeset
607 props[propname] = date.Interval(value)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
608 except ValueError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
609 raise UsageError, _('"%(value)s": %(message)s')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
610 elif isinstance(proptype, hyperdb.Password):
529
1401596be460 [SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents: 500
diff changeset
611 props[propname] = password.Password(value)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
612 elif isinstance(proptype, hyperdb.Multilink):
529
1401596be460 [SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents: 500
diff changeset
613 props[propname] = value.split(',')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
614
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
615 # check for the key property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
616 propname = cl.getkey()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
617 if propname and not props.has_key(propname):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
618 raise UsageError, _('you must provide the "%(propname)s" '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
619 'property.')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
620
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
621 # do the actual create
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
622 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
623 print apply(cl.create, (), props)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
624 except (TypeError, IndexError, ValueError), message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
625 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
626 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
627
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
628 def do_list(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
629 '''Usage: list classname [property]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
630 List the instances of a class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
631
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
632 Lists all instances of the given class. If the property is not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
633 specified, the "label" property is used. The label property is tried
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
634 in order: the key, "name", "title" and then the first property,
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
635 alphabetically.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
636 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
637 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
638 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
639 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
640
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
641 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
642 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
643
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
644 # figure the property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
645 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
646 propname = args[1]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
647 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
648 propname = cl.labelprop()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
649
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
650 if self.comma_sep:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
651 print ','.join(cl.list())
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
652 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
653 for nodeid in cl.list():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
654 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
655 value = cl.get(nodeid, propname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
656 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
657 raise UsageError, _('%(classname)s has no property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
658 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
659 print _('%(nodeid)4s: %(value)s')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
660 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
661
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
662 def do_table(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
663 '''Usage: table classname [property[,property]*]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
664 List the instances of a class in tabular form.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
665
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
666 Lists all instances of the given class. If the properties are not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
667 specified, all properties are displayed. By default, the column widths
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
668 are the width of the property names. The width may be explicitly defined
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
669 by defining the property as "name:width". For example::
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
670 roundup> table priority id,name:10
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
671 Id Name
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
672 1 fatal-bug
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
673 2 bug
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
674 3 usability
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
675 4 feature
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
676 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
677 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
678 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
679 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
680
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
681 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
682 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
683
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
684 # figure the property names to display
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
685 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
686 prop_names = args[1].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
687 all_props = cl.getprops()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
688 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
689 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
690 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
691 propname, width = spec.split(':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
692 except (ValueError, TypeError):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
693 raise UsageError, _('"%(spec)s" not name:width')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
694 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
695 propname = spec
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
696 if not all_props.has_key(propname):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
697 raise UsageError, _('%(classname)s has no property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
698 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
699 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
700 prop_names = cl.getprops().keys()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
701
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
702 # now figure column widths
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
703 props = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
704 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
705 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
706 name, width = spec.split(':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
707 props.append((name, int(width)))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
708 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
709 props.append((spec, len(spec)))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
710
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
711 # now display the heading
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
712 print ' '.join([name.capitalize().ljust(width) for name,width in props])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
713
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
714 # and the table data
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
715 for nodeid in cl.list():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
716 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
717 for name, width in props:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
718 if name != 'id':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
719 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
720 value = str(cl.get(nodeid, name))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
721 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
722 # we already checked if the property is valid - a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
723 # KeyError here means the node just doesn't have a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
724 # value for it
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
725 value = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
726 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
727 value = str(nodeid)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
728 f = '%%-%ds'%width
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
729 l.append(f%value[:width])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
730 print ' '.join(l)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
731 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
732
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
733 def do_history(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
734 '''Usage: history designator
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
735 Show the history entries of a designator.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
736
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
737 Lists the journal entries for the node identified by the designator.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
738 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
739 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
740 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
741 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
742 classname, nodeid = roundupdb.splitDesignator(args[0])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
743 except roundupdb.DesignatorError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
744 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
745
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
746 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
747 print self.db.getclass(classname).history(nodeid)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
748 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
749 raise UsageError, _('no such class "%(classname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
750 except IndexError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
751 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
752 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
753
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
754 def do_commit(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
755 '''Usage: commit
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
756 Commit all changes made to the database.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
757
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
758 The changes made during an interactive session are not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
759 automatically written to the database - they must be committed
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
760 using this command.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
761
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
762 One-off commands on the command-line are automatically committed if
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
763 they are successful.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
764 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
765 self.db.commit()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
766 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
767
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
768 def do_rollback(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
769 '''Usage: rollback
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
770 Undo all changes that are pending commit to the database.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
771
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
772 The changes made during an interactive session are not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
773 automatically written to the database - they must be committed
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
774 manually. This command undoes all those changes, so a commit
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
775 immediately after would make no changes to the database.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
776 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
777 self.db.rollback()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
778 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
779
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
780 def do_retire(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
781 '''Usage: retire designator[,designator]*
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
782 Retire the node specified by designator.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
783
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
784 This action indicates that a particular node is not to be retrieved by
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
785 the list or find commands, and its key value may be re-used.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
786 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
787 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
788 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
789 designators = args[0].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
790 for designator in designators:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
791 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
792 classname, nodeid = roundupdb.splitDesignator(designator)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
793 except roundupdb.DesignatorError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
794 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
795 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
796 self.db.getclass(classname).retire(nodeid)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
797 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
798 raise UsageError, _('no such class "%(classname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
799 except IndexError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
800 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
801 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
802
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
803 def do_export(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
804 '''Usage: export class[,class] destination_dir
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
805 Export the database to tab-separated-value files.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
806
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
807 This action exports the current data from the database into
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
808 tab-separated-value files that are placed in the nominated destination
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
809 directory. The journals are not exported.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
810 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
811 if len(args) < 2:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
812 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
813 classes = args[0].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
814 dir = args[1]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
815
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
816 # use the csv parser if we can - it's faster
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
817 if csv is not None:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
818 p = csv.parser(field_sep=':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
819
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
820 # do all the classes specified
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
821 for classname in classes:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
822 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
823 f = open(os.path.join(dir, classname+'.csv'), 'w')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
824 f.write(':'.join(cl.properties.keys()) + '\n')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
825
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
826 # all nodes for this class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
827 properties = cl.properties.items()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
828 for nodeid in cl.list():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
829 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
830 for prop, proptype in properties:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
831 value = cl.get(nodeid, prop)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
832 # convert data where needed
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
833 if isinstance(proptype, hyperdb.Date):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
834 value = value.get_tuple()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
835 elif isinstance(proptype, hyperdb.Interval):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
836 value = value.get_tuple()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
837 elif isinstance(proptype, hyperdb.Password):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
838 value = str(value)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
839 l.append(repr(value))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
840
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
841 # now write
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
842 if csv is not None:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
843 f.write(p.join(l) + '\n')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
844 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
845 # escape the individual entries to they're valid CSV
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
846 m = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
847 for entry in l:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
848 if '"' in entry:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
849 entry = '""'.join(entry.split('"'))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
850 if ':' in entry:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
851 entry = '"%s"'%entry
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
852 m.append(entry)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
853 f.write(':'.join(m) + '\n')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
854 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
855
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
856 def do_import(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
857 '''Usage: import class file
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
858 Import the contents of the tab-separated-value file.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
859
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
860 The file must define the same properties as the class (including having
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
861 a "header" line with those property names.) The new nodes are added to
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
862 the existing database - if you want to create a new database using the
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
863 imported data, then create a new database (or, tediously, retire all
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
864 the old data.)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
865 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
866 if len(args) < 2:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
867 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
868 if csv is None:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
869 raise UsageError, \
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
870 _('Sorry, you need the csv module to use this function.\n'
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
871 'Get it from: http://www.object-craft.com.au/projects/csv/')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
872
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
873 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
874
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
875 # ensure that the properties and the CSV file headings match
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
876 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
877 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
878 f = open(args[1])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
879 p = csv.parser(field_sep=':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
880 file_props = p.parse(f.readline())
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
881 props = cl.properties.keys()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
882 m = file_props[:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
883 m.sort()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
884 props.sort()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
885 if m != props:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
886 raise UsageError, _('Import file doesn\'t define the same '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
887 'properties as "%(arg0)s".')%{'arg0': args[0]}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
888
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
889 # loop through the file and create a node for each entry
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
890 n = range(len(props))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
891 while 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
892 line = f.readline()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
893 if not line: break
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
894
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
895 # parse lines until we get a complete entry
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
896 while 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
897 l = p.parse(line)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
898 if l: break
626
300e17e7045c Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents: 582
diff changeset
899 line = f.readline()
300e17e7045c Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents: 582
diff changeset
900 if not line:
300e17e7045c Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents: 582
diff changeset
901 raise ValueError, "Unexpected EOF during CSV parse"
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
902
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
903 # make the new node's property map
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
904 d = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
905 for i in n:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
906 # Use eval to reverse the repr() used to output the CSV
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
907 value = eval(l[i])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
908 # Figure the property for this column
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
909 key = file_props[i]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
910 proptype = cl.properties[key]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
911 # Convert for property type
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
912 if isinstance(proptype, hyperdb.Date):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
913 value = date.Date(value)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
914 elif isinstance(proptype, hyperdb.Interval):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
915 value = date.Interval(value)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
916 elif isinstance(proptype, hyperdb.Password):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
917 pwd = password.Password()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
918 pwd.unpack(value)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
919 value = pwd
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
920 if value is not None:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
921 d[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
922
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
923 # and create the new node
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
924 apply(cl.create, (), d)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
925 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
926
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
927 def do_pack(self, args):
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
928 '''Usage: pack period | date
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
929
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
930 Remove journal entries older than a period of time specified or
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
931 before a certain date.
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
932
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
933 A period is specified using the suffixes "y", "m", and "d". The
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
934 suffix "w" (for "week") means 7 days.
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
935
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
936 "3y" means three years
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
937 "2y 1m" means two years and one month
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
938 "1m 25d" means one month and 25 days
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
939 "2w 3d" means two weeks and three days
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
940
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
941 Date format is "YYYY-MM-DD" eg:
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
942 2001-01-01
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
943
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
944 '''
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
945 if len(args) <> 1:
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
946 raise UsageError, _('Not enough arguments supplied')
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
947
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
948 # are we dealing with a period or a date
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
949 value = args[0]
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
950 date_re = re.compile(r'''
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
951 (?P<date>\d\d\d\d-\d\d?-\d\d?)? # yyyy-mm-dd
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
952 (?P<period>(\d+y\s*)?(\d+m\s*)?(\d+d\s*)?)?
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
953 ''', re.VERBOSE)
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
954 m = date_re.match(value)
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
955 if not m:
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
956 raise ValueError, _('Invalid format')
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
957 m = m.groupdict()
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
958 if m['period']:
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
959 # TODO: need to fix date module. one should be able to say
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
960 # pack_before = date.Date(". - %s"%value)
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
961 pack_before = date.Date(".") + date.Interval("- %s"%value)
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
962 elif m['date']:
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
963 pack_before = date.Date(value)
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
964 self.db.pack(pack_before)
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
965 return 0
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
966
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
967 def do_reindex(self, args):
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
968 '''Usage: reindex
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
969 Re-generate an instance's search indexes.
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
970
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
971 This will re-generate the search indexes for an instance. This will
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
972 typically happen automatically.
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
973 '''
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
974 self.db.indexer.force_reindex()
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
975 self.db.reindex()
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
976 return 0
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
977
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
978 def run_command(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
979 '''Run a single command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
980 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
981 command = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
982
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
983 # handle help now
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
984 if command == 'help':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
985 if len(args)>1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
986 self.do_help(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
987 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
988 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
989 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
990 if command == 'morehelp':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
991 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
992 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
993 self.help_all()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
994 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
995
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
996 # figure what the command is
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
997 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
998 functions = self.commands.get(command)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
999 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1000 # not a valid command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1001 print _('Unknown command "%(command)s" ("help commands" for a '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1002 'list)')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1003 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1004
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1005 # check for multiple matches
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1006 if len(functions) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1007 print _('Multiple commands match "%(command)s": %(list)s')%{'command':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1008 command, 'list': ', '.join([i[0] for i in functions])}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1009 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1010 command, function = functions[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1011
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1012 # make sure we have an instance_home
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1013 while not self.instance_home:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1014 self.instance_home = raw_input(_('Enter instance home: ')).strip()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1015
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1016 # before we open the db, we may be doing an install or init
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1017 if command == 'initialise':
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1018 try:
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1019 return self.do_initialise(self.instance_home, args)
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1020 except UsageError, message:
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1021 print _('Error: %(message)s')%locals()
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1022 return 1
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1023 elif command == 'install':
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1024 try:
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1025 return self.do_install(self.instance_home, args)
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1026 except UsageError, message:
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1027 print _('Error: %(message)s')%locals()
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1028 return 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1029
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1030 # get the instance
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1031 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1032 instance = roundup.instance.open(self.instance_home)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1033 except ValueError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1034 self.instance_home = ''
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1035 print _("Error: Couldn't open instance: %(message)s")%locals()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1036 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1037
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1038 # only open the database once!
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1039 if not self.db:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1040 self.db = instance.open('admin')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1041
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1042 # do the command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1043 ret = 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1044 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1045 ret = function(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1046 except UsageError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1047 print _('Error: %(message)s')%locals()
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1048 print
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1049 print function.__doc__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1050 ret = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1051 except:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1052 import traceback
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1053 traceback.print_exc()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1054 ret = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1055 return ret
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1056
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1057 def interactive(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1058 '''Run in an interactive mode
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1059 '''
773
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 763
diff changeset
1060 print _('Roundup %s ready for input.'%roundup_version)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1061 print _('Type "help" for help.')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1062 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1063 import readline
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1064 except ImportError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1065 print _('Note: command history and editing not available')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1066
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1067 while 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1068 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1069 command = raw_input(_('roundup> '))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1070 except EOFError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1071 print _('exit...')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1072 break
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1073 if not command: continue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1074 args = token.token_split(command)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1075 if not args: continue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1076 if args[0] in ('quit', 'exit'): break
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1077 self.run_command(args)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1078
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1079 # exit.. check for transactions
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1080 if self.db and self.db.transactions:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1081 commit = raw_input(_('There are unsaved changes. Commit them (y/N)? '))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1082 if commit and commit[0].lower() == 'y':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1083 self.db.commit()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1084 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1085
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1086 def main(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1087 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1088 opts, args = getopt.getopt(sys.argv[1:], 'i:u:hc')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1089 except getopt.GetoptError, e:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1090 self.usage(str(e))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1091 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1092
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1093 # handle command-line args
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1094 self.instance_home = os.environ.get('ROUNDUP_INSTANCE', '')
649
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
1095 # TODO: reinstate the user/password stuff (-u arg too)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1096 name = password = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1097 if os.environ.has_key('ROUNDUP_LOGIN'):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1098 l = os.environ['ROUNDUP_LOGIN'].split(':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1099 name = l[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1100 if len(l) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1101 password = l[1]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1102 self.comma_sep = 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1103 for opt, arg in opts:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1104 if opt == '-h':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1105 self.usage()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1106 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1107 if opt == '-i':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1108 self.instance_home = arg
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1109 if opt == '-c':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1110 self.comma_sep = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1111
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1112 # if no command - go interactive
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1113 ret = 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1114 if not args:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1115 self.interactive()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1116 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1117 ret = self.run_command(args)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1118 if self.db: self.db.commit()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1119 return ret
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1120
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1121
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1122 if __name__ == '__main__':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1123 tool = AdminTool()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1124 sys.exit(tool.main())
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1125
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1126 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1127 # $Log: not supported by cvs2svn $
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1128 # Revision 1.15 2002/06/17 23:14:44 richard
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1129 # . #569415 ] {version}
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1130 #
773
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 763
diff changeset
1131 # Revision 1.14 2002/06/11 06:41:50 richard
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 763
diff changeset
1132 # Removed prompt for admin email in initialisation.
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 763
diff changeset
1133 #
763
a85919c54f3a Removed prompt for admin email in initialisation.
Richard Jones <richard@users.sourceforge.net>
parents: 754
diff changeset
1134 # Revision 1.13 2002/05/30 23:58:14 richard
a85919c54f3a Removed prompt for admin email in initialisation.
Richard Jones <richard@users.sourceforge.net>
parents: 754
diff changeset
1135 # oops
a85919c54f3a Removed prompt for admin email in initialisation.
Richard Jones <richard@users.sourceforge.net>
parents: 754
diff changeset
1136 #
754
Richard Jones <richard@users.sourceforge.net>
parents: 751
diff changeset
1137 # Revision 1.12 2002/05/26 09:04:42 richard
Richard Jones <richard@users.sourceforge.net>
parents: 751
diff changeset
1138 # out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 751
diff changeset
1139 #
751
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
1140 # Revision 1.11 2002/05/23 01:14:20 richard
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
1141 # . split instance initialisation into two steps, allowing config changes
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
1142 # before the database is initialised.
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
1143 #
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1144 # Revision 1.10 2002/04/27 10:07:23 richard
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1145 # minor fix to error message
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1146 #
698
a26afb64a947 minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents: 656
diff changeset
1147 # Revision 1.9 2002/03/12 22:51:47 richard
a26afb64a947 minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents: 656
diff changeset
1148 # . #527416 ] roundup-admin uses undefined value
a26afb64a947 minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents: 656
diff changeset
1149 # . #527503 ] unfriendly init blowup when parent dir
a26afb64a947 minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents: 656
diff changeset
1150 # (also handles UsageError correctly now in init)
a26afb64a947 minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents: 656
diff changeset
1151 #
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1152 # Revision 1.8 2002/02/27 03:28:21 richard
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1153 # Ran it through pychecker, made fixes
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1154 #
649
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
1155 # Revision 1.7 2002/02/20 05:04:32 richard
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
1156 # Wasn't handling the cvs parser feeding properly.
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
1157 #
626
300e17e7045c Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents: 582
diff changeset
1158 # Revision 1.6 2002/01/23 07:27:19 grubert
300e17e7045c Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents: 582
diff changeset
1159 # . allow abbreviation of "help" in admin tool too.
300e17e7045c Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents: 582
diff changeset
1160 #
582
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
1161 # Revision 1.5 2002/01/21 16:33:19 rochecompaan
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
1162 # You can now use the roundup-admin tool to pack the database
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
1163 #
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1164 # Revision 1.4 2002/01/14 06:51:09 richard
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1165 # . #503164 ] create and passwords
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1166 #
529
1401596be460 [SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents: 500
diff changeset
1167 # Revision 1.3 2002/01/08 05:26:32 rochecompaan
1401596be460 [SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents: 500
diff changeset
1168 # Missing "self" in props_from_args
1401596be460 [SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents: 500
diff changeset
1169 #
500
3df718d48a5d Missing "self" in props_from_args
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 489
diff changeset
1170 # Revision 1.2 2002/01/07 10:41:44 richard
3df718d48a5d Missing "self" in props_from_args
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 489
diff changeset
1171 # #500140 ] AdminTool.get_class() returns nothing
3df718d48a5d Missing "self" in props_from_args
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 489
diff changeset
1172 #
489
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
1173 # Revision 1.1 2002/01/05 02:11:22 richard
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
1174 # I18N'ed roundup admin - and split the code off into a module so it can be used
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
1175 # elsewhere.
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
1176 # Big issue with this is the doc strings - that's the help. We're probably going to
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
1177 # have to switch to not use docstrings, which will suck a little :(
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
1178 #
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1179 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1180 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1181 # vim: set filetype=python ts=4 sw=4 et si

Roundup Issue Tracker: http://roundup-tracker.org/