Mercurial > p > roundup > code
annotate roundup/admin.py @ 939:c67297b55a34
moving towards full database export
| author | Richard Jones <richard@users.sourceforge.net> |
|---|---|
| date | Fri, 16 Aug 2002 04:26:42 +0000 |
| parents | f3e978888cb8 |
| children | f615fbd02c18 |
| 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 # |
|
939
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
19 # $Id: admin.py,v 1.22 2002-08-16 04:26:42 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 |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
252 def do_install(self, instance_home, args): |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
253 '''Usage: install [template [backend [admin password]]] |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
254 Install a new Roundup instance. |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
255 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
256 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
|
257 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
|
258 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
|
259 order. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
260 |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
261 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
|
262 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
|
263 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
|
264 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
|
265 |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
266 See also initopts help. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
267 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
268 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
269 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
|
270 |
|
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
271 # 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
|
272 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
|
273 if not os.path.exists(parent): |
|
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
274 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
|
275 ' does not exist')%locals() |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
276 |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
277 # select template |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
278 import roundup.templates |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
279 templates = roundup.templates.listTemplates() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
280 template = len(args) > 1 and args[1] or '' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
281 if template not in templates: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
282 print _('Templates:'), ', '.join(templates) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
283 while template not in templates: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
284 template = raw_input(_('Select template [classic]: ')).strip() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
285 if not template: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
286 template = 'classic' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
287 |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
288 # select hyperdb backend |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
289 import roundup.backends |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
290 backends = roundup.backends.__all__ |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
291 backend = len(args) > 2 and args[2] or '' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
292 if backend not in backends: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
293 print _('Back ends:'), ', '.join(backends) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
294 while backend not in backends: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
295 backend = raw_input(_('Select backend [anydbm]: ')).strip() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
296 if not backend: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
297 backend = 'anydbm' |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
298 |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
299 # install! |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
300 init.install(instance_home, template, backend) |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
301 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
302 print _(''' |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
303 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
|
304 %(instance_config_file)s |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
305 ... 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
|
306 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
307 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
|
308 initialisation file: |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
309 %(database_config_file)s |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
310 ... 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
|
311 ''')%{ |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
312 '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
|
313 '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
|
314 } |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
315 return 0 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
316 |
|
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 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
|
319 '''Usage: initialise [adminpw] |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
320 Initialise a new Roundup instance. |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
321 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
322 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
|
323 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
324 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
|
325 ''' |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
326 # password |
|
751
92abd71ec19b
out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents:
738
diff
changeset
|
327 if len(args) > 1: |
|
92abd71ec19b
out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents:
738
diff
changeset
|
328 adminpw = args[1] |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
329 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
330 adminpw = '' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
331 confirm = 'x' |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
332 while adminpw != confirm: |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
333 adminpw = getpass.getpass(_('Admin Password: ')) |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
334 confirm = getpass.getpass(_(' Confirm: ')) |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
335 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
336 # make sure the instance home is installed |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
337 if not os.path.exists(instance_home): |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
338 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
|
339 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
|
340 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
|
341 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
342 # is there already a database? |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
343 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
|
344 print _('WARNING: The database is already initialised!') |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
345 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
|
346 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
|
347 if ok.lower() != 'y': |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
348 return 0 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
349 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
350 # nuke it |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
351 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
|
352 |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
353 # GO |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
354 init.initialise(instance_home, adminpw) |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
355 |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
356 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
357 |
|
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 def do_get(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
360 '''Usage: get property designator[,designator]* |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
361 Get the given property of one or more designator(s). |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
362 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
363 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
|
364 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
365 if len(args) < 2: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
366 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
367 propname = args[0] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
368 designators = args[1].split(',') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
369 l = [] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
370 for designator in designators: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
371 # decode the node designator |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
372 try: |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
373 classname, nodeid = hyperdb.splitDesignator(designator) |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
374 except hyperdb.DesignatorError, message: |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
375 raise UsageError, message |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
376 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
377 # get the class |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
378 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
379 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
380 if self.comma_sep: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
381 l.append(cl.get(nodeid, propname)) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
382 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
383 print cl.get(nodeid, propname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
384 except IndexError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
385 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
386 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
387 raise UsageError, _('no such %(classname)s property ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
388 '"%(propname)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
389 if self.comma_sep: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
390 print ','.join(l) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
391 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
392 |
|
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 def do_set(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
395 '''Usage: set designator[,designator]* propname=value ... |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
396 Set the given property of one or more designator(s). |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
397 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
398 Sets the property to the value for all designators given. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
399 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
400 if len(args) < 2: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
401 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
402 from roundup import hyperdb |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
403 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
404 designators = args[0].split(',') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
405 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
406 # get the props from the args |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
407 props = self.props_from_args(args[1:]) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
408 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
409 # now do the set for all the nodes |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
410 for designator in designators: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
411 # decode the node designator |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
412 try: |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
413 classname, nodeid = hyperdb.splitDesignator(designator) |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
414 except hyperdb.DesignatorError, message: |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
415 raise UsageError, message |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
416 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
417 # get the class |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
418 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
419 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
420 properties = cl.getprops() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
421 for key, value in props.items(): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
422 proptype = properties[key] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
423 if isinstance(proptype, hyperdb.String): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
424 continue |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
425 elif isinstance(proptype, hyperdb.Password): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
426 props[key] = password.Password(value) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
427 elif isinstance(proptype, hyperdb.Date): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
428 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
429 props[key] = date.Date(value) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
430 except ValueError, message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
431 raise UsageError, '"%s": %s'%(value, message) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
432 elif isinstance(proptype, hyperdb.Interval): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
433 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
434 props[key] = date.Interval(value) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
435 except ValueError, message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
436 raise UsageError, '"%s": %s'%(value, message) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
437 elif isinstance(proptype, hyperdb.Link): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
438 props[key] = value |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
439 elif isinstance(proptype, hyperdb.Multilink): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
440 props[key] = value.split(',') |
|
880
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
441 elif isinstance(proptype, hyperdb.Boolean): |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
442 props[key] = value.lower() in ('yes', 'true', 'on', '1') |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
443 elif isinstance(proptype, hyperdb.Number): |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
444 props[key] = int(value) |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
445 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
446 # try the set |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
447 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
448 apply(cl.set, (nodeid, ), props) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
449 except (TypeError, IndexError, ValueError), message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
450 raise UsageError, message |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
451 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
452 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
453 def do_find(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
454 '''Usage: find classname propname=value ... |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
455 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
|
456 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
457 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
|
458 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
|
459 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
460 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
461 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
462 classname = args[0] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
463 # get the class |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
464 cl = self.get_class(classname) |
|
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 # handle the propname=value argument |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
467 props = self.props_from_args(args[1:]) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
468 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
469 # 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
|
470 # number |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
471 for propname, value in props.items(): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
472 num_re = re.compile('^\d+$') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
473 if not num_re.match(value): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
474 # get the property |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
475 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
476 property = cl.properties[propname] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
477 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
478 raise UsageError, _('%(classname)s has no property ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
479 '"%(propname)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
480 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
481 # make sure it's a link |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
482 if (not isinstance(property, hyperdb.Link) and not |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
483 isinstance(property, hyperdb.Multilink)): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
484 raise UsageError, _('You may only "find" link properties') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
485 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
486 # 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
|
487 link_class = self.db.getclass(property.classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
488 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
489 props[propname] = link_class.lookup(value) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
490 except TypeError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
491 raise UsageError, _('%(classname)s has no key property"')%{ |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
492 'classname': link_class.classname} |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
493 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
494 # now do the find |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
495 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
496 if self.comma_sep: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
497 print ','.join(apply(cl.find, (), props)) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
498 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
499 print apply(cl.find, (), props) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
500 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
501 raise UsageError, _('%(classname)s has no property ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
502 '"%(propname)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
503 except (ValueError, TypeError), message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
504 raise UsageError, message |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
505 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
506 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
507 def do_specification(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
508 '''Usage: specification classname |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
509 Show the properties for a classname. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
510 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
511 This lists the properties for a given class. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
512 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
513 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
514 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
515 classname = args[0] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
516 # get the class |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
517 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
518 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
519 # get the key property |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
520 keyprop = cl.getkey() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
521 for key, value in cl.properties.items(): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
522 if keyprop == key: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
523 print _('%(key)s: %(value)s (key property)')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
524 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
525 print _('%(key)s: %(value)s')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
526 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
527 def do_display(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
528 '''Usage: display designator |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
529 Show the property values for the given 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 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
|
532 node. |
|
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 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
535 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
536 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
537 # decode the node designator |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
538 try: |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
539 classname, nodeid = hyperdb.splitDesignator(args[0]) |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
540 except hyperdb.DesignatorError, message: |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
541 raise UsageError, message |
|
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 # get the class |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
544 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
545 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
546 # display the values |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
547 for key in cl.properties.keys(): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
548 value = cl.get(nodeid, key) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
549 print _('%(key)s: %(value)s')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
550 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
551 def do_create(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
552 '''Usage: create classname property=value ... |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
553 Create a new entry of a given class. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
554 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
555 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
|
556 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
|
557 command. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
558 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
559 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
560 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
561 from roundup import hyperdb |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
562 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
563 classname = args[0] |
|
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 # get the class |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
566 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
567 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
568 # now do a create |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
569 props = {} |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
570 properties = cl.getprops(protected = 0) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
571 if len(args) == 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
572 # ask for the properties |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
573 for key, value in properties.items(): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
574 if key == 'id': continue |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
575 name = value.__class__.__name__ |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
576 if isinstance(value , hyperdb.Password): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
577 again = None |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
578 while value != again: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
579 value = getpass.getpass(_('%(propname)s (Password): ')%{ |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
580 'propname': key.capitalize()}) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
581 again = getpass.getpass(_(' %(propname)s (Again): ')%{ |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
582 'propname': key.capitalize()}) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
583 if value != again: print _('Sorry, try again...') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
584 if value: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
585 props[key] = value |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
586 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
587 value = raw_input(_('%(propname)s (%(proptype)s): ')%{ |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
588 'propname': key.capitalize(), 'proptype': name}) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
589 if value: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
590 props[key] = value |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
591 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
592 props = self.props_from_args(args[1:]) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
593 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
594 # convert types |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
595 for propname, value in props.items(): |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
596 # get the property |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
597 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
598 proptype = properties[propname] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
599 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
600 raise UsageError, _('%(classname)s has no property ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
601 '"%(propname)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
602 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
603 if isinstance(proptype, hyperdb.Date): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
604 try: |
|
529
1401596be460
[SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents:
500
diff
changeset
|
605 props[propname] = date.Date(value) |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
606 except ValueError, message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
607 raise UsageError, _('"%(value)s": %(message)s')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
608 elif isinstance(proptype, hyperdb.Interval): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
609 try: |
|
529
1401596be460
[SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents:
500
diff
changeset
|
610 props[propname] = date.Interval(value) |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
611 except ValueError, message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
612 raise UsageError, _('"%(value)s": %(message)s')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
613 elif isinstance(proptype, hyperdb.Password): |
|
529
1401596be460
[SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents:
500
diff
changeset
|
614 props[propname] = password.Password(value) |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
615 elif isinstance(proptype, hyperdb.Multilink): |
|
529
1401596be460
[SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents:
500
diff
changeset
|
616 props[propname] = value.split(',') |
|
880
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
617 elif isinstance(proptype, hyperdb.Boolean): |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
618 props[propname] = value.lower() in ('yes', 'true', 'on', '1') |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
619 elif isinstance(proptype, hyperdb.Number): |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
620 props[propname] = int(value) |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
621 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
622 # check for the key property |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
623 propname = cl.getkey() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
624 if propname and not props.has_key(propname): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
625 raise UsageError, _('you must provide the "%(propname)s" ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
626 'property.')%locals() |
|
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 # do the actual create |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
629 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
630 print apply(cl.create, (), props) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
631 except (TypeError, IndexError, ValueError), message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
632 raise UsageError, message |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
633 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
634 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
635 def do_list(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
636 '''Usage: list classname [property] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
637 List the instances of a class. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
638 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
639 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
|
640 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
|
641 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
|
642 alphabetically. |
|
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 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
645 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
646 classname = args[0] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
647 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
648 # get the class |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
649 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
650 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
651 # figure the property |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
652 if len(args) > 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
653 propname = args[1] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
654 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
655 propname = cl.labelprop() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
656 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
657 if self.comma_sep: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
658 print ','.join(cl.list()) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
659 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
660 for nodeid in cl.list(): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
661 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
662 value = cl.get(nodeid, propname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
663 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
664 raise UsageError, _('%(classname)s has no property ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
665 '"%(propname)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
666 print _('%(nodeid)4s: %(value)s')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
667 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
668 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
669 def do_table(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
670 '''Usage: table classname [property[,property]*] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
671 List the instances of a class in tabular form. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
672 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
673 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
|
674 specified, all properties are displayed. By default, the column widths |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
675 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
|
676 by defining the property as "name:width". For example:: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
677 roundup> table priority id,name:10 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
678 Id Name |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
679 1 fatal-bug |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
680 2 bug |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
681 3 usability |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
682 4 feature |
|
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 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
685 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
686 classname = args[0] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
687 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
688 # get the class |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
689 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
690 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
691 # figure the property names to display |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
692 if len(args) > 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
693 prop_names = args[1].split(',') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
694 all_props = cl.getprops() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
695 for spec in prop_names: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
696 if ':' in spec: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
697 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
698 propname, width = spec.split(':') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
699 except (ValueError, TypeError): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
700 raise UsageError, _('"%(spec)s" not name:width')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
701 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
702 propname = spec |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
703 if not all_props.has_key(propname): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
704 raise UsageError, _('%(classname)s has no property ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
705 '"%(propname)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
706 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
707 prop_names = cl.getprops().keys() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
708 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
709 # now figure column widths |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
710 props = [] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
711 for spec in prop_names: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
712 if ':' in spec: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
713 name, width = spec.split(':') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
714 props.append((name, int(width))) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
715 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
716 props.append((spec, len(spec))) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
717 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
718 # now display the heading |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
719 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
|
720 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
721 # and the table data |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
722 for nodeid in cl.list(): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
723 l = [] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
724 for name, width in props: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
725 if name != 'id': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
726 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
727 value = str(cl.get(nodeid, name)) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
728 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
729 # we already checked if the property is valid - a |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
730 # KeyError here means the node just doesn't have a |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
731 # value for it |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
732 value = '' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
733 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
734 value = str(nodeid) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
735 f = '%%-%ds'%width |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
736 l.append(f%value[:width]) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
737 print ' '.join(l) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
738 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
739 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
740 def do_history(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
741 '''Usage: history designator |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
742 Show the history entries of a designator. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
743 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
744 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
|
745 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
746 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
747 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
748 try: |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
749 classname, nodeid = hyperdb.splitDesignator(args[0]) |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
750 except hyperdb.DesignatorError, message: |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
751 raise UsageError, message |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
752 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
753 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
754 print self.db.getclass(classname).history(nodeid) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
755 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
756 raise UsageError, _('no such class "%(classname)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
757 except IndexError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
758 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
759 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
760 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
761 def do_commit(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
762 '''Usage: commit |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
763 Commit all changes made to the database. |
|
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 The changes made during an interactive session are not |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
766 automatically written to the database - they must be committed |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
767 using this command. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
768 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
769 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
|
770 they are successful. |
|
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 self.db.commit() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
773 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
774 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
775 def do_rollback(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
776 '''Usage: rollback |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
777 Undo all changes that are pending commit to the database. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
778 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
779 The changes made during an interactive session are not |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
780 automatically written to the database - they must be committed |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
781 manually. This command undoes all those changes, so a commit |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
782 immediately after would make no changes to the database. |
|
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 self.db.rollback() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
785 return 0 |
|
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 def do_retire(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
788 '''Usage: retire designator[,designator]* |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
789 Retire the node specified by designator. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
790 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
791 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
|
792 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
|
793 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
794 if len(args) < 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
795 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
796 designators = args[0].split(',') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
797 for designator in designators: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
798 try: |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
799 classname, nodeid = hyperdb.splitDesignator(designator) |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
800 except hyperdb.DesignatorError, message: |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
801 raise UsageError, message |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
802 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
803 self.db.getclass(classname).retire(nodeid) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
804 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
805 raise UsageError, _('no such class "%(classname)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
806 except IndexError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
807 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
808 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
809 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
810 def do_export(self, args): |
|
939
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
811 '''Usage: export [class[,class]] destination_dir |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
812 Export the database to tab-separated-value files. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
813 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
814 This action exports the current data from the database into |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
815 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
|
816 directory. The journals are not exported. |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
817 ''' |
|
939
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
818 # grab the directory to export to |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
819 if len(args) < 1: |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
820 raise UsageError, _('Not enough arguments supplied') |
|
939
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
821 dir = args[-1] |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
822 |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
823 # get the list of classes to export |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
824 if len(args) == 2: |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
825 classes = args[0].split(',') |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
826 else: |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
827 classes = self.db.classes.keys() |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
828 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
829 # use the csv parser if we can - it's faster |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
830 if csv is not None: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
831 p = csv.parser(field_sep=':') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
832 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
833 # do all the classes specified |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
834 for classname in classes: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
835 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
836 f = open(os.path.join(dir, classname+'.csv'), 'w') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
837 f.write(':'.join(cl.properties.keys()) + '\n') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
838 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
839 # all nodes for this class |
|
939
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
840 properties = cl.getprops() |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
841 for nodeid in cl.list(): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
842 l = [] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
843 for prop, proptype in properties: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
844 value = cl.get(nodeid, prop) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
845 # convert data where needed |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
846 if isinstance(proptype, hyperdb.Date): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
847 value = value.get_tuple() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
848 elif isinstance(proptype, hyperdb.Interval): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
849 value = value.get_tuple() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
850 elif isinstance(proptype, hyperdb.Password): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
851 value = str(value) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
852 l.append(repr(value)) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
853 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
854 # now write |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
855 if csv is not None: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
856 f.write(p.join(l) + '\n') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
857 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
858 # escape the individual entries to they're valid CSV |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
859 m = [] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
860 for entry in l: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
861 if '"' in entry: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
862 entry = '""'.join(entry.split('"')) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
863 if ':' in entry: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
864 entry = '"%s"'%entry |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
865 m.append(entry) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
866 f.write(':'.join(m) + '\n') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
867 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
868 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
869 def do_import(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
870 '''Usage: import class file |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
871 Import the contents of the tab-separated-value file. |
|
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 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
|
874 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
|
875 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
|
876 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
|
877 the old data.) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
878 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
879 if len(args) < 2: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
880 raise UsageError, _('Not enough arguments supplied') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
881 if csv is None: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
882 raise UsageError, \ |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
883 _('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
|
884 '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
|
885 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
886 from roundup import hyperdb |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
887 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
888 # ensure that the properties and the CSV file headings match |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
889 classname = args[0] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
890 cl = self.get_class(classname) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
891 f = open(args[1]) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
892 p = csv.parser(field_sep=':') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
893 file_props = p.parse(f.readline()) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
894 props = cl.properties.keys() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
895 m = file_props[:] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
896 m.sort() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
897 props.sort() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
898 if m != props: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
899 raise UsageError, _('Import file doesn\'t define the same ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
900 'properties as "%(arg0)s".')%{'arg0': args[0]} |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
901 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
902 # 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
|
903 n = range(len(props)) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
904 while 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
905 line = f.readline() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
906 if not line: break |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
907 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
908 # parse lines until we get a complete entry |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
909 while 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
910 l = p.parse(line) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
911 if l: break |
|
626
300e17e7045c
Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents:
582
diff
changeset
|
912 line = f.readline() |
|
300e17e7045c
Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents:
582
diff
changeset
|
913 if not line: |
|
300e17e7045c
Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents:
582
diff
changeset
|
914 raise ValueError, "Unexpected EOF during CSV parse" |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
915 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
916 # make the new node's property map |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
917 d = {} |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
918 for i in n: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
919 # 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
|
920 value = eval(l[i]) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
921 # Figure the property for this column |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
922 key = file_props[i] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
923 proptype = cl.properties[key] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
924 # Convert for property type |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
925 if isinstance(proptype, hyperdb.Date): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
926 value = date.Date(value) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
927 elif isinstance(proptype, hyperdb.Interval): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
928 value = date.Interval(value) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
929 elif isinstance(proptype, hyperdb.Password): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
930 pwd = password.Password() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
931 pwd.unpack(value) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
932 value = pwd |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
933 if value is not None: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
934 d[key] = value |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
935 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
936 # and create the new node |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
937 apply(cl.create, (), d) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
938 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
939 |
|
562
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
940 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
|
941 '''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
|
942 |
|
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
943 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
|
944 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
|
945 |
|
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
946 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
|
947 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
|
948 |
|
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
949 "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
|
950 "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
|
951 "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
|
952 "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
|
953 |
|
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
954 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
|
955 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
|
956 |
|
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
957 ''' |
|
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 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
|
959 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
|
960 |
|
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
961 # 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
|
962 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
|
963 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
|
964 (?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
|
965 (?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
|
966 ''', 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
|
967 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
|
968 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
|
969 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
|
970 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
|
971 if m['period']: |
|
861
68cef2bb929d
fixed the date module so that Date(". - 2d") works
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
972 pack_before = date.Date(". - %s"%value) |
|
562
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
973 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
|
974 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
|
975 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
|
976 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
|
977 |
|
826
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
978 def do_reindex(self, args): |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
979 '''Usage: reindex |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
980 Re-generate an instance's search indexes. |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
981 |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
982 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
|
983 typically happen automatically. |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
984 ''' |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
985 self.db.indexer.force_reindex() |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
986 self.db.reindex() |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
987 return 0 |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
988 |
|
928
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
989 def do_security(self, args): |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
990 '''Usage: security [Role name] |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
991 Display the Permissions available to one or all Roles. |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
992 ''' |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
993 if len(args) == 1: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
994 role = args[0] |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
995 try: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
996 roles = [(args[0], self.db.security.role[args[0]])] |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
997 except KeyError: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
998 print _('No such Role "%(role)s"')%locals() |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
999 return 1 |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1000 else: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1001 roles = self.db.security.role.items() |
|
929
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1002 role = self.db.config.NEW_WEB_USER_ROLES |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1003 if ',' in role: |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1004 print _('New Web users get the Roles "%(role)s"')%locals() |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1005 else: |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1006 print _('New Web users get the Role "%(role)s"')%locals() |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1007 role = self.db.config.NEW_EMAIL_USER_ROLES |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1008 if ',' in role: |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1009 print _('New Email users get the Roles "%(role)s"')%locals() |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1010 else: |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1011 print _('New Email users get the Role "%(role)s"')%locals() |
|
928
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1012 roles.sort() |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1013 for rolename, role in roles: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1014 print _('Role "%(name)s":')%role.__dict__ |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1015 for permission in role.permissions: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1016 if permission.klass: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1017 print _(' %(description)s (%(name)s for "%(klass)s" ' |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1018 'only)')%permission.__dict__ |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1019 else: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1020 print _(' %(description)s (%(name)s)')%permission.__dict__ |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1021 return 0 |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1022 |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1023 def run_command(self, args): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1024 '''Run a single command |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1025 ''' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1026 command = args[0] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1027 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1028 # handle help now |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1029 if command == 'help': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1030 if len(args)>1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1031 self.do_help(args[1:]) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1032 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1033 self.do_help(['help']) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1034 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1035 if command == 'morehelp': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1036 self.do_help(['help']) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1037 self.help_commands() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1038 self.help_all() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1039 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1040 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1041 # figure what the command is |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1042 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1043 functions = self.commands.get(command) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1044 except KeyError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1045 # not a valid command |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1046 print _('Unknown command "%(command)s" ("help commands" for a ' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1047 'list)')%locals() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1048 return 1 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1049 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1050 # check for multiple matches |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1051 if len(functions) > 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1052 print _('Multiple commands match "%(command)s": %(list)s')%{'command': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1053 command, 'list': ', '.join([i[0] for i in functions])} |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1054 return 1 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1055 command, function = functions[0] |
|
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 # make sure we have an instance_home |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1058 while not self.instance_home: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1059 self.instance_home = raw_input(_('Enter instance home: ')).strip() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1060 |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
1061 # 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
|
1062 if command == 'initialise': |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
1063 try: |
|
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
1064 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
|
1065 except UsageError, message: |
|
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
1066 print _('Error: %(message)s')%locals() |
|
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
1067 return 1 |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
1068 elif command == 'install': |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
1069 try: |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
1070 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
|
1071 except UsageError, message: |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
1072 print _('Error: %(message)s')%locals() |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
1073 return 1 |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1074 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1075 # get the instance |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1076 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1077 instance = roundup.instance.open(self.instance_home) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1078 except ValueError, message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1079 self.instance_home = '' |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
1080 print _("Error: Couldn't open instance: %(message)s")%locals() |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1081 return 1 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1082 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1083 # only open the database once! |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1084 if not self.db: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1085 self.db = instance.open('admin') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1086 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1087 # do the command |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1088 ret = 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1089 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1090 ret = function(args[1:]) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1091 except UsageError, message: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1092 print _('Error: %(message)s')%locals() |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
1093 print |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1094 print function.__doc__ |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1095 ret = 1 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1096 except: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1097 import traceback |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1098 traceback.print_exc() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1099 ret = 1 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1100 return ret |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1101 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1102 def interactive(self): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1103 '''Run in an interactive mode |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1104 ''' |
|
773
6e6c63a57df9
[SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents:
763
diff
changeset
|
1105 print _('Roundup %s ready for input.'%roundup_version) |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1106 print _('Type "help" for help.') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1107 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1108 import readline |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1109 except ImportError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1110 print _('Note: command history and editing not available') |
|
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 while 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1113 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1114 command = raw_input(_('roundup> ')) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1115 except EOFError: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1116 print _('exit...') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1117 break |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1118 if not command: continue |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1119 args = token.token_split(command) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1120 if not args: continue |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1121 if args[0] in ('quit', 'exit'): break |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1122 self.run_command(args) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1123 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1124 # exit.. check for transactions |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1125 if self.db and self.db.transactions: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1126 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
|
1127 if commit and commit[0].lower() == 'y': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1128 self.db.commit() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1129 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1130 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1131 def main(self): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1132 try: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1133 opts, args = getopt.getopt(sys.argv[1:], 'i:u:hc') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1134 except getopt.GetoptError, e: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1135 self.usage(str(e)) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1136 return 1 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1137 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1138 # handle command-line args |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1139 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
|
1140 # TODO: reinstate the user/password stuff (-u arg too) |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1141 name = password = '' |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1142 if os.environ.has_key('ROUNDUP_LOGIN'): |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1143 l = os.environ['ROUNDUP_LOGIN'].split(':') |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1144 name = l[0] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1145 if len(l) > 1: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1146 password = l[1] |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1147 self.comma_sep = 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1148 for opt, arg in opts: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1149 if opt == '-h': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1150 self.usage() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1151 return 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1152 if opt == '-i': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1153 self.instance_home = arg |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1154 if opt == '-c': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1155 self.comma_sep = 1 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1156 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1157 # if no command - go interactive |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1158 ret = 0 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1159 if not args: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1160 self.interactive() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1161 else: |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1162 ret = self.run_command(args) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1163 if self.db: self.db.commit() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1164 return ret |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1165 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1166 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1167 if __name__ == '__main__': |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1168 tool = AdminTool() |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1169 sys.exit(tool.main()) |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1170 |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1171 # |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1172 # $Log: not supported by cvs2svn $ |
|
939
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
1173 # Revision 1.21 2002/08/01 01:07:37 richard |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
1174 # include info about new user roles |
|
c67297b55a34
moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents:
929
diff
changeset
|
1175 # |
|
929
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1176 # Revision 1.20 2002/08/01 00:56:22 richard |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1177 # Added the web access and email access permissions, so people can restrict |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1178 # access to users who register through the email interface (for example). |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1179 # Also added "security" command to the roundup-admin interface to display the |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1180 # Role/Permission config for an instance. |
|
f3e978888cb8
include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents:
928
diff
changeset
|
1181 # |
|
928
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1182 # Revision 1.19 2002/07/25 07:14:05 richard |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1183 # Bugger it. Here's the current shape of the new security implementation. |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1184 # Still to do: |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1185 # . call the security funcs from cgi and mailgw |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1186 # . change shipped templates to include correct initialisation and remove |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1187 # the old config vars |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1188 # ... that seems like a lot. The bulk of the work has been done though. Honest :) |
|
23c9d4f86380
Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents:
902
diff
changeset
|
1189 # |
|
902
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
1190 # Revision 1.18 2002/07/18 11:17:30 gmcm |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
1191 # Add Number and Boolean types to hyperdb. |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
1192 # Add conversion cases to web, mail & admin interfaces. |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
1193 # Add storage/serialization cases to back_anydbm & back_metakit. |
|
b0d3d3535998
Bugger it. Here's the current shape of the new security implementation.
Richard Jones <richard@users.sourceforge.net>
parents:
880
diff
changeset
|
1194 # |
|
880
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
1195 # Revision 1.17 2002/07/14 06:05:50 richard |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
1196 # . fixed the date module so that Date(". - 2d") works |
|
de3da99a7c02
Add Number and Boolean types to hyperdb.
Gordon B. McMillan <gmcm@users.sourceforge.net>
parents:
861
diff
changeset
|
1197 # |
|
861
68cef2bb929d
fixed the date module so that Date(". - 2d") works
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
1198 # Revision 1.16 2002/07/09 04:19:09 richard |
|
68cef2bb929d
fixed the date module so that Date(". - 2d") works
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
1199 # Added reindex command to roundup-admin. |
|
68cef2bb929d
fixed the date module so that Date(". - 2d") works
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
1200 # Fixed reindex on first access. |
|
68cef2bb929d
fixed the date module so that Date(". - 2d") works
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
1201 # Also fixed reindexing of entries that change. |
|
68cef2bb929d
fixed the date module so that Date(". - 2d") works
Richard Jones <richard@users.sourceforge.net>
parents:
826
diff
changeset
|
1202 # |
|
826
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
1203 # 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
|
1204 # . #569415 ] {version} |
|
6d7a45c8464a
Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents:
773
diff
changeset
|
1205 # |
|
773
6e6c63a57df9
[SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents:
763
diff
changeset
|
1206 # Revision 1.14 2002/06/11 06:41:50 richard |
|
6e6c63a57df9
[SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents:
763
diff
changeset
|
1207 # Removed prompt for admin email in initialisation. |
|
6e6c63a57df9
[SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents:
763
diff
changeset
|
1208 # |
|
763
a85919c54f3a
Removed prompt for admin email in initialisation.
Richard Jones <richard@users.sourceforge.net>
parents:
754
diff
changeset
|
1209 # 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
|
1210 # oops |
|
a85919c54f3a
Removed prompt for admin email in initialisation.
Richard Jones <richard@users.sourceforge.net>
parents:
754
diff
changeset
|
1211 # |
| 754 | 1212 # Revision 1.12 2002/05/26 09:04:42 richard |
| 1213 # out by one in the init args | |
| 1214 # | |
|
751
92abd71ec19b
out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents:
738
diff
changeset
|
1215 # 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
|
1216 # . 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
|
1217 # before the database is initialised. |
|
92abd71ec19b
out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents:
738
diff
changeset
|
1218 # |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
1219 # 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
|
1220 # minor fix to error message |
|
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
698
diff
changeset
|
1221 # |
|
698
a26afb64a947
minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents:
656
diff
changeset
|
1222 # 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
|
1223 # . #527416 ] roundup-admin uses undefined value |
|
a26afb64a947
minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents:
656
diff
changeset
|
1224 # . #527503 ] unfriendly init blowup when parent dir |
|
a26afb64a947
minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents:
656
diff
changeset
|
1225 # (also handles UsageError correctly now in init) |
|
a26afb64a947
minor fix to error message
Richard Jones <richard@users.sourceforge.net>
parents:
656
diff
changeset
|
1226 # |
|
656
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
1227 # 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
|
1228 # Ran it through pychecker, made fixes |
|
eae9b69a0115
[SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents:
649
diff
changeset
|
1229 # |
|
649
29f7e41ee437
Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents:
626
diff
changeset
|
1230 # 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
|
1231 # 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
|
1232 # |
|
626
300e17e7045c
Wasn't handling the cvs parser feeding properly.
Richard Jones <richard@users.sourceforge.net>
parents:
582
diff
changeset
|
1233 # 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
|
1234 # . 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
|
1235 # |
|
582
2fc4f8942a59
allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents:
562
diff
changeset
|
1236 # 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
|
1237 # 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
|
1238 # |
|
562
62febbd7ffec
You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
529
diff
changeset
|
1239 # 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
|
1240 # . #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
|
1241 # |
|
529
1401596be460
[SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents:
500
diff
changeset
|
1242 # 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
|
1243 # Missing "self" in props_from_args |
|
1401596be460
[SF#503164] create and passwords
Richard Jones <richard@users.sourceforge.net>
parents:
500
diff
changeset
|
1244 # |
|
500
3df718d48a5d
Missing "self" in props_from_args
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
489
diff
changeset
|
1245 # 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
|
1246 # #500140 ] AdminTool.get_class() returns nothing |
|
3df718d48a5d
Missing "self" in props_from_args
Roche Compaan <rochecompaan@users.sourceforge.net>
parents:
489
diff
changeset
|
1247 # |
|
489
5db2dad23f09
[SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents:
484
diff
changeset
|
1248 # 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
|
1249 # 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
|
1250 # elsewhere. |
|
5db2dad23f09
[SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents:
484
diff
changeset
|
1251 # 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
|
1252 # 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
|
1253 # |
|
484
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1254 # |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1255 # |
|
b35f229dd049
I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
1256 # vim: set filetype=python ts=4 sw=4 et si |
