annotate roundup/admin.py @ 2806:845e87d5e3ba

translator objects now have the following search path: - selected locale messages in the tracker locale dir - selected locale messages in the system locale dir - english messages in the tracker locale dir - english messages in the system locale dir automatically compile .mo files if needed (found .po file and .mo is missing or .po mtime is greater that .mo mtime) removed support for python < 2.0. gettext module is now required. get_translation: removed 'domain' argument, added 'tracker_home' argument
author Alexander Smishlajev <a1s@users.sourceforge.net>
date Sat, 23 Oct 2004 14:03:34 +0000
parents fcd76e1e97af
children adec352e2ce0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1 #! /usr/bin/env python
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # This module is free software, and you may redistribute it and/or modify
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
5 # under the same terms as Python, so long as this copyright message and
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
6 # disclaimer are retained in their original form.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
7 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
10 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 # POSSIBILITY OF SUCH DAMAGE.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
12 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
16 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
17 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
18 #
2793
fcd76e1e97af open CSV files in "universal newline" mode
Richard Jones <richard@users.sourceforge.net>
parents: 2787
diff changeset
19 # $Id: admin.py,v 1.83 2004-10-20 04:45:01 richard Exp $
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
20
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
21 '''Administration commands for maintaining Roundup trackers.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
22 '''
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
23 __docformat__ = 'restructuredtext'
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
24
1634
e5e00d3a3fe2 better string splitting
Richard Jones <richard@users.sourceforge.net>
parents: 1593
diff changeset
25 import sys, os, getpass, getopt, re, UserDict, shutil, rfc822
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
26 from roundup import date, hyperdb, roundupdb, init, password, token, rcsv
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
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
29 from roundup.configuration import CoreConfig
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 from roundup.i18n import _
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
31
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 class CommandDict(UserDict.UserDict):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
33 '''Simple dictionary that lets us do lookups using partial keys.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
34
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
35 Original code submitted by Engelbert Gruber.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
36 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 _marker = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
38 def get(self, key, default=_marker):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
39 if self.data.has_key(key):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
40 return [(key, self.data[key])]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
41 keylist = self.data.keys()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
42 keylist.sort()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
43 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44 for ki in keylist:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 if ki.startswith(key):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
46 l.append((ki, self.data[ki]))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 if not l and default is self._marker:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 raise KeyError, key
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
49 return l
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
51 class UsageError(ValueError):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 pass
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 class AdminTool:
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
55 ''' A collection of methods used in maintaining Roundup trackers.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
57 Typically these methods are accessed through the roundup-admin
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
58 script. The main() method provided on this class gives the main
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
59 loop for the roundup-admin script.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
60
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
61 Actions are defined by do_*() methods, with help for the action
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
62 given in the method docstring.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
63
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
64 Additional help may be supplied by help_*() methods.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
65 '''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
66 def __init__(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
67 self.commands = CommandDict()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
68 for k in AdminTool.__dict__.keys():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
69 if k[:3] == 'do_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
70 self.commands[k[3:]] = getattr(self, k)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
71 self.help = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 for k in AdminTool.__dict__.keys():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 if k[:5] == 'help_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 self.help[k[5:]] = getattr(self, k)
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
75 self.tracker_home = ''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 self.db = None
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 def get_class(self, classname):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 '''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
80 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
81 try:
489
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
82 return self.db.getclass(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
83 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
84 raise UsageError, _('no such class "%(classname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85
649
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
86 def props_from_args(self, args):
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
87 ''' Produce a dictionary of prop: value from the args list.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
88
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
89 The args list is specified as ``prop=value prop=value ...``.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
90 '''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 props = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 for arg in args:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 if arg.find('=') == -1:
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
94 raise UsageError, _('argument "%(arg)s" not propname=value'
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
95 )%locals()
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
96 l = arg.split('=')
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
97 if len(l) < 2:
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
98 raise UsageError, _('argument "%(arg)s" not propname=value'
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
99 )%locals()
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
100 key, value = l[0], '='.join(l[1:])
1108
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
101 if value:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
102 props[key] = value
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
103 else:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
104 props[key] = None
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
105 return props
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
106
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
107 def usage(self, message=''):
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
108 ''' Display a simple usage message.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
109 '''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
110 if message:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
111 message = _('Problem: %(message)s\n\n')%locals()
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
112 print _('''%(message)sUsage: roundup-admin [options] [<command> <arguments>]
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
113
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
114 Options:
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
115 -i instance home -- specify the issue tracker "home directory" to administer
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
116 -u -- the user[:password] to use for commands
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
117 -d -- print full designators not just class id numbers
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
118 -c -- when outputting lists of data, comma-separate them.
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
119 Same as '-S ","'.
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
120 -S <string> -- when outputting lists of data, string-separate them
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
121 -s -- when outputting lists of data, space-separate them.
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
122 Same as '-S " "'.
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
123
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
124 Only one of -s, -c or -S can be specified.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
125
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 Help:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 roundup-admin -h
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
128 roundup-admin help -- this help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
129 roundup-admin help <command> -- command-specific help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 roundup-admin help all -- all available help
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
131 ''')%locals()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
132 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
133
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
134 def help_commands(self):
2313
8d5c95c33447 precis wasn't a typo
Richard Jones <richard@users.sourceforge.net>
parents: 2307
diff changeset
135 ''' List the commands available with their help summary.
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
136 '''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 print _('Commands:'),
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 commands = ['']
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 for command in self.commands.values():
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
140 h = _(command.__doc__).split('\n')[0]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
141 commands.append(' '+h[7:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 commands.sort()
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
143 commands.append(_(
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
144 """Commands may be abbreviated as long as the abbreviation
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
145 matches only one command, e.g. l == li == lis == list."""))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
146 print '\n'.join(commands)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147 print
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
149 def help_commands_html(self, indent_re=re.compile(r'^(\s+)\S+')):
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
150 ''' Produce an HTML command list.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
151 '''
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
152 commands = self.commands.values()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 def sortfun(a, b):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 return cmp(a.__name__, b.__name__)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
155 commands.sort(sortfun)
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
156 for command in commands:
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
157 h = _(command.__doc__).split('\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 name = command.__name__[3:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
159 usage = h[0]
2566
dd2b9f5a104c don't translate strings that never need translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2504
diff changeset
160 print '''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
161 <tr><td valign=top><strong>%(name)s</strong></td>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
162 <td><tt>%(usage)s</tt><p>
2566
dd2b9f5a104c don't translate strings that never need translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2504
diff changeset
163 <pre>''' % locals()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
164 indent = indent_re.match(h[3])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 if indent: indent = len(indent.group(1))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 for line in h[3:]:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 if indent:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 print line[indent:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 print line
2566
dd2b9f5a104c don't translate strings that never need translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2504
diff changeset
171 print '</pre></td></tr>\n'
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 def help_all(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 print _('''
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
175 All commands (except help) require a tracker specifier. This is just
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
176 the path to the roundup tracker you're working with. A roundup tracker
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
177 is where roundup keeps the database and configuration file that defines
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
178 an issue tracker. It may be thought of as the issue tracker's "home
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
179 directory". It may be specified in the environment variable TRACKER_HOME
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
180 or on the command line as "-i tracker".
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
181
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
182 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
183
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
184 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
185 printed results:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
186 . Strings are, well, strings.
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
187 . Date values are printed in the full date format in the local time zone,
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
188 and accepted in the full format or any of the partial formats explained
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
189 below.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 . 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
191 node designators and key strings are both accepted.
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
192 . Multilink values are printed as lists of node designators joined
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
193 by commas. When given as an argument, node designators and key
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
194 strings are both accepted; an empty string, a single node, or a list
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
195 of nodes joined by commas is accepted.
484
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 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
198 quotes, either ' or ". A single space may also be backslash-quoted. If a
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
199 value must contain a quote character, it must be backslash-quoted or inside
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
200 quotes. Examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
201 hello world (2 tokens: hello, world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 "hello world" (1 token: hello world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 "Roch'e" Compaan (2 tokens: Roch'e Compaan)
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
204 Roch\\'e Compaan (2 tokens: Roch'e Compaan)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 address="1 2 3" (1 token: address=1 2 3)
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
206 \\\\ (1 token: \\)
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
207 \\n\\r\\t (1 token: a newline, carriage-return and tab)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209 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
210 commands, the specified properties are retrieved or set on all the listed
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
211 nodes.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
213 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
214 commands, they are printed one per line (default) or joined by commas (with
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
215 the -c) option.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
217 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
218 login may be specified as either "name" or "name:password".
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 . ROUNDUP_LOGIN environment variable
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 . the -u command-line option
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 If either the name or password is not supplied, they are obtained from the
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
222 command-line.
484
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 Date format examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
225 "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
226 "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
227 "01-25" means <Date yyyy-01-25.00:00:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
228 "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
229 "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
230 "14:25" means <Date yyyy-mm-dd.19:25:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231 "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
232 "." means "right now"
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
233
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
234 Command help:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235 ''')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
236 for name, command in self.commands.items():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
237 print _('%s:')%name
2566
dd2b9f5a104c don't translate strings that never need translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2504
diff changeset
238 print ' ', _(command.__doc__)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
239
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240 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
241 indent_re=re.compile(r'^(\s+)\S+')):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
242 ""'''Usage: help topic
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243 Give help about topic.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
244
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 commands -- list commands
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246 <command> -- help specific to a command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 initopts -- init command options
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
248 all -- all available help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 '''
582
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
250 if len(args)>0:
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
251 topic = args[0]
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
252 else:
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
253 topic = 'help'
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
254
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 # try help_ methods
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
257 if self.help.has_key(topic):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
258 self.help[topic]()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
259 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
261 # try command docstrings
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 l = self.commands.get(topic)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
264 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265 print _('Sorry, no help for "%(topic)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
266 return 1
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 # display the help for each match, removing the docsring indent
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269 for name, help in l:
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
270 lines = nl_re.split(_(help.__doc__))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
271 print lines[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
272 indent = indent_re.match(lines[1])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
273 if indent: indent = len(indent.group(1))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
274 for line in lines[1:]:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
275 if indent:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276 print line[indent:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
277 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
278 print line
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
281 def listTemplates(self):
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
282 ''' List all the available templates.
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
283
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
284 Look in the following places, where the later rules take precedence:
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
285
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
286 1. <prefix>/share/roundup/templates/*
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
287 this should be the standard place to find them when Roundup is
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
288 installed
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
289 2. <roundup.admin.__file__>/../templates/*
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
290 this will be used if Roundup's run in the distro (aka. source)
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
291 directory
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
292 3. <current working dir>/*
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
293 this is for when someone unpacks a 3rd-party template
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
294 4. <current working dir>
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
295 this is for someone who "cd"s to the 3rd-party template dir
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
296 '''
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
297 # OK, try <prefix>/share/roundup/templates
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
298 # -- this module (roundup.admin) will be installed in something
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
299 # like:
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
300 # /usr/lib/python2.2/site-packages/roundup/admin.py (5 dirs up)
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
301 # c:\python22\lib\site-packages\roundup\admin.py (4 dirs up)
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
302 # we're interested in where the "lib" directory is - ie. the /usr/
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
303 # part
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
304 templates = {}
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
305 for N in 4, 5:
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
306 path = __file__
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
307 # move up N elements in the path
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
308 for i in range(N):
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
309 path = os.path.dirname(path)
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
310 tdir = os.path.join(path, 'share', 'roundup', 'templates')
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
311 if os.path.isdir(tdir):
1916
d157b9b56ebf implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
312 templates = init.listTemplates(tdir)
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
313 break
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
314
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
315 # OK, now try as if we're in the roundup source distribution
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
316 # directory, so this module will be in .../roundup-*/roundup/admin.py
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
317 # and we're interested in the .../roundup-*/ part.
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
318 path = __file__
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
319 for i in range(2):
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
320 path = os.path.dirname(path)
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
321 tdir = os.path.join(path, 'templates')
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
322 if os.path.isdir(tdir):
1916
d157b9b56ebf implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
323 templates.update(init.listTemplates(tdir))
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
324
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
325 # Try subdirs of the current dir
1916
d157b9b56ebf implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
326 templates.update(init.listTemplates(os.getcwd()))
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
327
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
328 # Finally, try the current directory as a template
1916
d157b9b56ebf implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents: 1905
diff changeset
329 template = init.loadTemplateInfo(os.getcwd())
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
330 if template:
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
331 templates[template['name']] = template
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
332
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
333 return templates
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
334
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
335 def help_initopts(self):
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
336 templates = self.listTemplates()
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
337 print _('Templates:'), ', '.join(templates.keys())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
338 import roundup.backends
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
339 backends = roundup.backends.__all__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
340 print _('Back ends:'), ', '.join(backends)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
341
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
342 def do_install(self, tracker_home, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
343 ""'''Usage: install [template [backend [admin password]]]
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
344 Install a new Roundup tracker.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
345
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
346 The command will prompt for the tracker home directory
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
347 (if not supplied through TRACKER_HOME or the -i option).
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
348 The template, backend and admin password may be specified
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
349 on the command-line as arguments, in that order.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
350
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
351 The initialise command must be called after this command in order
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
352 to initialise the tracker's database. You may edit the tracker's
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
353 initial database contents before running that command by editing
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
354 the tracker's dbinit.py module init() function.
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
355
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
356 See also initopts help.
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 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
359 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
360
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
361 # make sure the tracker home can be created
2184
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
362 tracker_home = os.path.abspath(tracker_home)
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
363 parent = os.path.split(tracker_home)[0]
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
364 if not os.path.exists(parent):
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
365 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
366 ' does not exist')%locals()
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
367
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
368 config_ini_file = os.path.join(tracker_home, CoreConfig.INI_FILE)
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
369 # check for both old- and new-style configs
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
370 if filter(os.path.exists, [config_ini_file,
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
371 os.path.join(tracker_home, 'config.py'),
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
372 ]):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
373 ok = raw_input(_(
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
374 """WARNING: There appears to be a tracker in "%(tracker_home)s"!
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
375 If you re-install it, you will lose all the data!
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
376 Erase it? Y/N: """) % locals())
2184
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
377 if ok.strip().lower() != 'y':
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
378 return 0
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
379
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
380 # clear it out so the install isn't confused
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
381 shutil.rmtree(tracker_home)
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
382
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
383 # select template
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
384 templates = self.listTemplates()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
385 template = len(args) > 1 and args[1] or ''
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
386 if not templates.has_key(template):
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
387 print _('Templates:'), ', '.join(templates.keys())
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
388 while not templates.has_key(template):
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
389 template = raw_input(_('Select template [classic]: ')).strip()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
390 if not template:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
391 template = 'classic'
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
392
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
393 # select hyperdb backend
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
394 import roundup.backends
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
395 backends = roundup.backends.__all__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
396 backend = len(args) > 2 and args[2] or ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
397 if backend not in backends:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
398 print _('Back ends:'), ', '.join(backends)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
399 while backend not in backends:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
400 backend = raw_input(_('Select backend [anydbm]: ')).strip()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
401 if not backend:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
402 backend = 'anydbm'
1165
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
403 # XXX perform a unit test based on the user's selections
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
404
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
405 # install!
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
406 init.install(tracker_home, templates[template]['path'])
1467
378081f066cc registration is now a two-step process with confirmation from the
Richard Jones <richard@users.sourceforge.net>
parents: 1434
diff changeset
407 init.write_select_db(tracker_home, backend)
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
408
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
409 print _("""
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
410 You should now edit the tracker configuration file:
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
411 %(config_file)s""") % {"config_file": config_ini_file}
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
412
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
413 # find list of options that need manual adjustments
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
414 # XXX config._get_unset_options() is marked as private
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
415 # (leading underscore). make it public or don't care?
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
416 need_set = CoreConfig(tracker_home)._get_unset_options()
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
417 if need_set:
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
418 print _(" ... at a minimum, you must set following options:")
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
419 for section, options in need_set.items():
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
420 print " [%s]: %s" % (section, ", ".join(options))
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
421
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
422 # note about schema modifications
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
423 print _("""
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
424 If you wish to modify the database schema,
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
425 you should also edit the schema file:
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
426 %(database_config_file)s
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
427 You may also change the database initialisation file:
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
428 %(database_init_file)s
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
429 ... see the documentation on customizing for more information.
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
430 """) % {
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
431 'database_config_file': os.path.join(tracker_home, 'schema.py'),
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
432 'database_init_file': os.path.join(tracker_home, 'initial_data.py'),
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
433 }
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
434 return 0
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
435
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
436
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
437 def do_initialise(self, tracker_home, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
438 ""'''Usage: initialise [adminpw]
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
439 Initialise a new Roundup tracker.
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
440
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
441 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
442
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
443 Execute the tracker's initialisation function dbinit.init()
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
444 '''
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
445 # password
751
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
446 if len(args) > 1:
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
447 adminpw = args[1]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
448 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
449 adminpw = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
450 confirm = 'x'
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
451 while adminpw != confirm:
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
452 adminpw = getpass.getpass(_('Admin Password: '))
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
453 confirm = getpass.getpass(_(' Confirm: '))
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
454
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
455 # make sure the tracker home is installed
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
456 if not os.path.exists(tracker_home):
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
457 raise UsageError, _('Instance home does not exist')%locals()
1434
b953750bdc04 trackers on mysql can be initialised
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1409
diff changeset
458 try:
b953750bdc04 trackers on mysql can be initialised
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1409
diff changeset
459 tracker = roundup.instance.open(tracker_home)
b953750bdc04 trackers on mysql can be initialised
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1409
diff changeset
460 except roundup.instance.TrackerError:
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
461 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
462
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
463 # is there already a database?
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2566
diff changeset
464 if tracker.exists():
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
465 ok = raw_input(_(
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
466 """WARNING: The database is already initialised!
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
467 If you re-initialise it, you will lose all the data!
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
468 Erase it? Y/N: """))
2184
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
469 if ok.strip().lower() != 'y':
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
470 return 0
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
471
2736
402d6d556558 postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents: 2650
diff changeset
472 backend = tracker.get_backend_name()
402d6d556558 postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents: 2650
diff changeset
473
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2566
diff changeset
474 # nuke it
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2566
diff changeset
475 tracker.nuke()
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
476
2736
402d6d556558 postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents: 2650
diff changeset
477 # re-write the backend select file
402d6d556558 postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents: 2650
diff changeset
478 init.write_select_db(tracker_home, backend)
402d6d556558 postgres backend open doesn't hide corruption in schema [SF#956375]
Richard Jones <richard@users.sourceforge.net>
parents: 2650
diff changeset
479
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
480 # GO
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2566
diff changeset
481 tracker.init(password.Password(adminpw))
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
482
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
483 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
484
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 def do_get(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
487 ""'''Usage: get property designator[,designator]*
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
488 Get the given property of one or more designator(s).
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
489
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
490 Retrieves the property value of the nodes specified
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
491 by the designators.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
492 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
493 if len(args) < 2:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
494 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
495 propname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
496 designators = args[1].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
497 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
498 for designator in designators:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
499 # decode the node designator
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
500 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
501 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
502 except hyperdb.DesignatorError, message:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
503 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
504
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
505 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
506 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
507 try:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
508 id=[]
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
509 if self.separator:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
510 if self.print_designator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
511 # see if property is a link or multilink for
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
512 # which getting a desginator make sense.
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
513 # Algorithm: Get the properties of the
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
514 # current designator's class. (cl.getprops)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
515 # get the property object for the property the
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
516 # user requested (properties[propname])
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
517 # verify its type (isinstance...)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
518 # raise error if not link/multilink
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
519 # get class name for link/multilink property
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
520 # do the get on the designators
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
521 # append the new designators
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
522 # print
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
523 properties = cl.getprops()
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
524 property = properties[propname]
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
525 if not (isinstance(property, hyperdb.Multilink) or
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
526 isinstance(property, hyperdb.Link)):
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
527 raise UsageError, _('property %s is not of type Multilink or Link so -d flag does not apply.')%propname
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
528 propclassname = self.db.getclass(property.classname).classname
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
529 id = cl.get(nodeid, propname)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
530 for i in id:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
531 l.append(propclassname + i)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
532 else:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
533 id = cl.get(nodeid, propname)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
534 for i in id:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
535 l.append(i)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
536 else:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
537 if self.print_designator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
538 properties = cl.getprops()
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
539 property = properties[propname]
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
540 if not (isinstance(property, hyperdb.Multilink) or
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
541 isinstance(property, hyperdb.Link)):
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
542 raise UsageError, _('property %s is not of type Multilink or Link so -d flag does not apply.')%propname
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
543 propclassname = self.db.getclass(property.classname).classname
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
544 id = cl.get(nodeid, propname)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
545 for i in id:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
546 print propclassname + i
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
547 else:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
548 print cl.get(nodeid, propname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
549 except IndexError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
550 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
551 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
552 raise UsageError, _('no such %(classname)s property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
553 '"%(propname)s"')%locals()
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
554 if self.separator:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
555 print self.separator.join(l)
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
556
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
557 return 0
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
1229
5c581b120738 added "crypt" password encoding...
Richard Jones <richard@users.sourceforge.net>
parents: 1194
diff changeset
560 def do_set(self, args, pwre = re.compile(r'{(\w+)}(.+)')):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
561 ""'''Usage: set items property=value property=value ...
1108
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
562 Set the given properties of one or more items(s).
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
563
1570
93e0a565cee5 fix the "set" command usage statement
Richard Jones <richard@users.sourceforge.net>
parents: 1566
diff changeset
564 The items are specified as a class or as a comma-separated
1108
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
565 list of item designators (ie "designator[,designator,...]").
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
566
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
567 This command sets the properties to the values for all designators
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
568 given. If the value is missing (ie. "property=") then the property
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
569 is un-set. If the property is a multilink, you specify the linked
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
570 ids for the multilink as comma-separated numbers (ie "1,2,3").
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
571 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
572 if len(args) < 2:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
573 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
574 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
575
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
576 designators = args[0].split(',')
1108
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
577 if len(designators) == 1:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
578 designator = designators[0]
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
579 try:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
580 designator = hyperdb.splitDesignator(designator)
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
581 designators = [designator]
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
582 except hyperdb.DesignatorError:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
583 cl = self.get_class(designator)
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
584 designators = [(designator, x) for x in cl.list()]
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
585 else:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
586 try:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
587 designators = [hyperdb.splitDesignator(x) for x in designators]
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
588 except hyperdb.DesignatorError, message:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
589 raise UsageError, message
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
590
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
591 # get the props from the args
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 # now do the set for all the nodes
1108
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
595 for classname, itemid in designators:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
596 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
597
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
598 properties = cl.getprops()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
599 for key, value in props.items():
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
600 try:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
601 props[key] = hyperdb.rawToHyperdb(self.db, cl, itemid,
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
602 key, value)
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
603 except hyperdb.HyperdbValueError, message:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
604 raise UsageError, message
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
605
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
606 # try the set
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
607 try:
1108
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
608 apply(cl.set, (itemid, ), props)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
609 except (TypeError, IndexError, ValueError), message:
1229
5c581b120738 added "crypt" password encoding...
Richard Jones <richard@users.sourceforge.net>
parents: 1194
diff changeset
610 import traceback; traceback.print_exc()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
611 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
612 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
613
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
614 def do_find(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
615 ""'''Usage: find classname propname=value ...
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
616 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
617
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
618 Find the nodes of the given class with a given link property value.
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
619 The value may be either the nodeid of the linked node, or its key
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
620 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 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
623 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
624 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
625 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
626 cl = self.get_class(classname)
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 # handle the propname=value argument
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
629 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
630
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
631 # convert the user-input value to a value used for find()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
632 for propname, value in props.items():
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
633 if ',' in value:
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
634 values = value.split(',')
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
635 else:
2504
Richard Jones <richard@users.sourceforge.net>
parents: 2496
diff changeset
636 values = [value]
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
637 d = props[propname] = {}
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
638 for value in values:
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
639 d[hyperdb.rawToHyperdb(self.db, cl, None, propname, value)] = 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
640
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
641 # now do the find
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
642 try:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
643 id = []
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
644 designator = []
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
645 if self.separator:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
646 if self.print_designator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
647 id=apply(cl.find, (), props)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
648 for i in id:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
649 designator.append(classname + i)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
650 print self.separator.join(designator)
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
651 else:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
652 print self.separator.join(apply(cl.find, (), props))
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
653
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
654 else:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
655 if self.print_designator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
656 id=apply(cl.find, (), props)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
657 for i in id:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
658 designator.append(classname + i)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
659 print designator
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
660 else:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
661 print apply(cl.find, (), props)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
662 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
663 raise UsageError, _('%(classname)s has no property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
664 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
665 except (ValueError, TypeError), message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
666 raise UsageError, message
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_specification(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
670 ""'''Usage: specification classname
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
671 Show the properties for a classname.
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 This lists the properties for a given class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
674 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
675 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
676 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
677 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
678 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
679 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
680
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
681 # get the key property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
682 keyprop = cl.getkey()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
683 for key, value in cl.properties.items():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
684 if keyprop == key:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
685 print _('%(key)s: %(value)s (key property)')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
686 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
687 print _('%(key)s: %(value)s')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
688
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
689 def do_display(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
690 ""'''Usage: display designator[,designator]*
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
691 Show the property values for the given node(s).
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
692
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
693 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
694 node.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
695 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
696 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
697 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
698
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
699 # decode the node designator
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
700 for designator in args[0].split(','):
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
701 try:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
702 classname, nodeid = hyperdb.splitDesignator(designator)
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
703 except hyperdb.DesignatorError, message:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
704 raise UsageError, message
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
705
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
706 # get the class
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
707 cl = self.get_class(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
708
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
709 # display the values
1775
d4c0c65adb2c applied patch [SF#739314] (sorry John!)
Richard Jones <richard@users.sourceforge.net>
parents: 1767
diff changeset
710 keys = cl.properties.keys()
d4c0c65adb2c applied patch [SF#739314] (sorry John!)
Richard Jones <richard@users.sourceforge.net>
parents: 1767
diff changeset
711 keys.sort()
d4c0c65adb2c applied patch [SF#739314] (sorry John!)
Richard Jones <richard@users.sourceforge.net>
parents: 1767
diff changeset
712 for key in keys:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
713 value = cl.get(nodeid, key)
2450
c45ed2413044 fixed lookup of "missing" Link values for new props in anydbm backend
Richard Jones <richard@users.sourceforge.net>
parents: 2329
diff changeset
714 print _('%(key)s: %(value)r')%locals()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
715
1230
cab21a36286d ehem ... for create too
Richard Jones <richard@users.sourceforge.net>
parents: 1229
diff changeset
716 def do_create(self, args, pwre = re.compile(r'{(\w+)}(.+)')):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
717 ""'''Usage: create classname property=value ...
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
718 Create a new entry of a given class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
719
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
720 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
721 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
722 command.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
723 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
724 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
725 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
726 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
727
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
728 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
729
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
730 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
731 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
732
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
733 # now do a create
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
734 props = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
735 properties = cl.getprops(protected = 0)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
736 if len(args) == 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
737 # ask for the properties
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
738 for key, value in properties.items():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
739 if key == 'id': continue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
740 name = value.__class__.__name__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
741 if isinstance(value , hyperdb.Password):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
742 again = None
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
743 while value != again:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
744 value = getpass.getpass(_('%(propname)s (Password): ')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
745 'propname': key.capitalize()})
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
746 again = getpass.getpass(_(' %(propname)s (Again): ')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
747 'propname': key.capitalize()})
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
748 if value != again: print _('Sorry, try again...')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
749 if value:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
750 props[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
751 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
752 value = raw_input(_('%(propname)s (%(proptype)s): ')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
753 'propname': key.capitalize(), 'proptype': name})
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
754 if value:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
755 props[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
756 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
757 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
758
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
759 # convert types
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
760 for propname, value in props.items():
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
761 try:
2093
3f6024ab2c7a That's the last of the RDBMS migration steps done! Yay!
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
762 props[propname] = hyperdb.rawToHyperdb(self.db, cl, None,
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
763 propname, value)
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
764 except hyperdb.HyperdbValueError, message:
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
765 raise UsageError, message
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
766
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
767 # check for the key property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
768 propname = cl.getkey()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
769 if propname and not props.has_key(propname):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
770 raise UsageError, _('you must provide the "%(propname)s" '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
771 'property.')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
772
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
773 # do the actual create
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
774 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
775 print apply(cl.create, (), props)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
776 except (TypeError, IndexError, ValueError), message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
777 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
778 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
779
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
780 def do_list(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
781 ""'''Usage: list classname [property]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
782 List the instances of a class.
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 Lists all instances of the given class. If the property is not
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
785 specified, the "label" property is used. The label property is
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
786 tried in order: the key, "name", "title" and then the first
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
787 property, alphabetically.
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
788
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
789 With -c, -S or -s print a list of item id's if no property
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
790 specified. If property specified, print list of that property
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
791 for every class instance.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
792 '''
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
793 if len(args) > 2:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
794 raise UsageError, _('Too many arguments supplied')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
795 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
796 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
797 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
798
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
799 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
800 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
801
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
802 # figure the property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
803 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
804 propname = args[1]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
805 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
806 propname = cl.labelprop()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
807
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
808 if self.separator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
809 if len(args) == 2:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
810 # create a list of propnames since user specified propname
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
811 proplist=[]
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
812 for nodeid in cl.list():
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
813 try:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
814 proplist.append(cl.get(nodeid, propname))
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
815 except KeyError:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
816 raise UsageError, _('%(classname)s has no property '
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
817 '"%(propname)s"')%locals()
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
818 print self.separator.join(proplist)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
819 else:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
820 # create a list of index id's since user didn't specify
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
821 # otherwise
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
822 print self.separator.join(cl.list())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
823 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
824 for nodeid in cl.list():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
825 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
826 value = cl.get(nodeid, propname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
827 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
828 raise UsageError, _('%(classname)s has no property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
829 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
830 print _('%(nodeid)4s: %(value)s')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
831 return 0
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 def do_table(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
834 ""'''Usage: table classname [property[,property]*]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
835 List the instances of a class in tabular form.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
836
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
837 Lists all instances of the given class. If the properties are not
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
838 specified, all properties are displayed. By default, the column
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
839 widths are the width of the largest value. The width may be
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
840 explicitly defined by defining the property as "name:width".
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
841 For example::
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
842
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
843 roundup> table priority id,name:10
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
844 Id Name
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
845 1 fatal-bug
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
846 2 bug
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
847 3 usability
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
848 4 feature
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
849
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
850 Also to make the width of the column the width of the label,
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
851 leave a trailing : without a width on the property. For example::
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
852
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
853 roundup> table priority id,name:
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
854 Id Name
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
855 1 fata
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
856 2 bug
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
857 3 usab
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
858 4 feat
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
859
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
860 will result in a the 4 character wide "Name" column.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
861 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
862 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
863 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
864 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
865
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
866 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
867 cl = self.get_class(classname)
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 # figure the property names to display
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
870 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
871 prop_names = args[1].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
872 all_props = cl.getprops()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
873 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
874 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
875 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
876 propname, width = spec.split(':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
877 except (ValueError, TypeError):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
878 raise UsageError, _('"%(spec)s" not name:width')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
879 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
880 propname = spec
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
881 if not all_props.has_key(propname):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
882 raise UsageError, _('%(classname)s has no property '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
883 '"%(propname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
884 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
885 prop_names = cl.getprops().keys()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
886
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
887 # now figure column widths
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
888 props = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
889 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
890 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
891 name, width = spec.split(':')
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
892 if width == '':
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
893 props.append((name, len(spec)))
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
894 else:
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
895 props.append((name, int(width)))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
896 else:
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
897 # this is going to be slow
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
898 maxlen = len(spec)
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
899 for nodeid in cl.list():
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
900 curlen = len(str(cl.get(nodeid, spec)))
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
901 if curlen > maxlen:
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
902 maxlen = curlen
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
903 props.append((spec, maxlen))
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
904
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
905 # now display the heading
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
906 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
907
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
908 # and the table data
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
909 for nodeid in cl.list():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
910 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
911 for name, width in props:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
912 if name != 'id':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
913 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
914 value = str(cl.get(nodeid, name))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
915 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
916 # we already checked if the property is valid - a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
917 # KeyError here means the node just doesn't have a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
918 # value for it
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
919 value = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
920 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
921 value = str(nodeid)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
922 f = '%%-%ds'%width
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
923 l.append(f%value[:width])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
924 print ' '.join(l)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
925 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
926
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
927 def do_history(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
928 ""'''Usage: history designator
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
929 Show the history entries of a designator.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
930
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
931 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
932 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
933 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
934 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
935 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
936 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
937 except hyperdb.DesignatorError, message:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
938 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
939
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
940 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
941 print self.db.getclass(classname).history(nodeid)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
942 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
943 raise UsageError, _('no such class "%(classname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
944 except IndexError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
945 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
946 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
947
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
948 def do_commit(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
949 ""'''Usage: commit
2178
e1a481838a32 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2175
diff changeset
950 Commit changes made to the database during an interactive session.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
951
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
952 The changes made during an interactive session are not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
953 automatically written to the database - they must be committed
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
954 using this command.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
955
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
956 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
957 they are successful.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
958 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
959 self.db.commit()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
960 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
961
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
962 def do_rollback(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
963 ""'''Usage: rollback
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
964 Undo all changes that are pending commit to the database.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
965
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
966 The changes made during an interactive session are not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
967 automatically written to the database - they must be committed
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
968 manually. This command undoes all those changes, so a commit
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
969 immediately after would make no changes to the database.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
970 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
971 self.db.rollback()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
972 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
973
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
974 def do_retire(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
975 ""'''Usage: retire designator[,designator]*
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
976 Retire the node specified by designator.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
977
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
978 This action indicates that a particular node is not to be retrieved
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
979 by the list or find commands, and its key value may be re-used.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
980 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
981 if len(args) < 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
982 raise UsageError, _('Not enough arguments supplied')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
983 designators = args[0].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
984 for designator in designators:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
985 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
986 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
987 except hyperdb.DesignatorError, message:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
988 raise UsageError, message
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
989 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
990 self.db.getclass(classname).retire(nodeid)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
991 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
992 raise UsageError, _('no such class "%(classname)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
993 except IndexError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
994 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
995 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
996
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
997 def do_restore(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
998 ""'''Usage: restore designator[,designator]*
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
999 Restore the retired node specified by designator.
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1000
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1001 The given nodes will become available for users again.
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1002 '''
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1003 if len(args) < 1:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1004 raise UsageError, _('Not enough arguments supplied')
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1005 designators = args[0].split(',')
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1006 for designator in designators:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1007 try:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1008 classname, nodeid = hyperdb.splitDesignator(designator)
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1009 except hyperdb.DesignatorError, message:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1010 raise UsageError, message
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1011 try:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1012 self.db.getclass(classname).restore(nodeid)
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1013 except KeyError:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1014 raise UsageError, _('no such class "%(classname)s"')%locals()
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1015 except IndexError:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1016 raise UsageError, _('no such %(classname)s node "%(nodeid)s"')%locals()
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1017 return 0
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1018
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1019 def do_export(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1020 ""'''Usage: export [class[,class]] export_dir
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1098
diff changeset
1021 Export the database to colon-separated-value files.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1022
2215
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1023 Optionally limit the export to just the names classes.
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1024
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1025 This action exports the current data from the database into
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1098
diff changeset
1026 colon-separated-value files that are placed in the nominated
2215
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1027 destination directory.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1028 '''
939
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1029 # grab the directory to export to
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1030 if len(args) < 1:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1031 raise UsageError, _('Not enough arguments supplied')
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1032 if rcsv.error:
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1033 raise UsageError, _(rcsv.error)
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1034
939
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1035 dir = args[-1]
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1036
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1037 # get the list of classes to export
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1038 if len(args) == 2:
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1039 classes = args[0].split(',')
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1040 else:
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1041 classes = self.db.classes.keys()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1042
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1043 # do all the classes specified
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1044 for classname in classes:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1045 cl = self.get_class(classname)
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1046
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1047 f = open(os.path.join(dir, classname+'.csv'), 'w')
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1048 writer = rcsv.writer(f, rcsv.colon_separated)
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1049
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1050 properties = cl.getprops()
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1051 propnames = cl.export_propnames()
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1052 fields = propnames[:]
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1053 fields.append('is retired')
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1054 writer.writerow(fields)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1055
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1056 # all nodes for this class
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1057 for nodeid in cl.getnodeids():
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1058 writer.writerow(cl.export_list(propnames, nodeid))
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1059 if hasattr(cl, 'export_files'):
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1060 cl.export_files(dir, nodeid)
1539
800b5896e14a fixed rdbms export - getnodeids in particular with NULL values
Richard Jones <richard@users.sourceforge.net>
parents: 1530
diff changeset
1061
800b5896e14a fixed rdbms export - getnodeids in particular with NULL values
Richard Jones <richard@users.sourceforge.net>
parents: 1530
diff changeset
1062 # close this file
800b5896e14a fixed rdbms export - getnodeids in particular with NULL values
Richard Jones <richard@users.sourceforge.net>
parents: 1530
diff changeset
1063 f.close()
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1064
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1065 # export the journals
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1066 jf = open(os.path.join(dir, classname+'-journals.csv'), 'w')
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1067 journals = rcsv.writer(jf, rcsv.colon_separated)
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1068 map(journals.writerow, cl.export_journals())
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1069 jf.close()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1070 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1071
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1072 def do_import(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1073 ""'''Usage: import import_dir
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
1074 Import a database from the directory containing CSV files,
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
1075 two per class to import.
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1076
2215
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1077 The files used in the import are:
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1078
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1079 <class>.csv
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1080 This must define the same properties as the class (including
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1081 having a "header" line with those property names.)
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1082 <class>-journals.csv
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1083 This defines the journals for the items being imported.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1084
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1085 The imported nodes will have the same nodeid as defined in the
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1086 import file, thus replacing any existing content.
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1087
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1098
diff changeset
1088 The new nodes are added to the existing database - if you want to
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1098
diff changeset
1089 create a new database using the imported data, then create a new
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1098
diff changeset
1090 database (or, tediously, retire all the old data.)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1091 '''
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1092 if len(args) < 1:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1093 raise UsageError, _('Not enough arguments supplied')
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1094 if rcsv.error:
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1095 raise UsageError, _(rcsv.error)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1096 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1097
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1098 # directory to import from
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1099 dir = args[0]
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1100
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1101 # import all the files
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1102 for file in os.listdir(dir):
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1103 classname, ext = os.path.splitext(file)
1530
a1e0d17ca12c only look for csv files on import
Richard Jones <richard@users.sourceforge.net>
parents: 1519
diff changeset
1104 # we only care about CSV files
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1105 if ext != '.csv' or classname.endswith('-journals'):
1530
a1e0d17ca12c only look for csv files on import
Richard Jones <richard@users.sourceforge.net>
parents: 1519
diff changeset
1106 continue
a1e0d17ca12c only look for csv files on import
Richard Jones <richard@users.sourceforge.net>
parents: 1519
diff changeset
1107
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1108 cl = self.get_class(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1109
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1110 # ensure that the properties and the CSV file headings match
2793
fcd76e1e97af open CSV files in "universal newline" mode
Richard Jones <richard@users.sourceforge.net>
parents: 2787
diff changeset
1111 f = open(os.path.join(dir, file), 'rU')
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1112 reader = rcsv.reader(f, rcsv.colon_separated)
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1113 file_props = None
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1114 maxid = 1
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1115 # loop through the file and create a node for each entry
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1116 for r in reader:
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1117 if file_props is None:
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1118 file_props = r
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1119 continue
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1120 # do the import and figure the current highest nodeid
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1121 nodeid = int(cl.import_list(file_props, r))
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1122 if hasattr(cl, 'import_files'):
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1123 cl.import_files(dir, nodeid)
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1124 maxid = max(maxid, nodeid)
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1125
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1126 f.close()
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1127
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1128 # import the journals
2793
fcd76e1e97af open CSV files in "universal newline" mode
Richard Jones <richard@users.sourceforge.net>
parents: 2787
diff changeset
1129 f = open(os.path.join(args[0], classname + '-journals.csv'), 'rU')
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1130 reader = rcsv.reader(f, rcsv.colon_separated)
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1131 cl.import_journals(reader)
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1132 f.close()
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1133
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1134 # set the id counter
1194
d76b3f8d7bc4 make import set the id counter to maxid+1
Richard Jones <richard@users.sourceforge.net>
parents: 1165
diff changeset
1135 print 'setting', classname, maxid+1
d76b3f8d7bc4 make import set the id counter to maxid+1
Richard Jones <richard@users.sourceforge.net>
parents: 1165
diff changeset
1136 self.db.setid(classname, str(maxid+1))
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1137
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1138 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1139
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1140 def do_pack(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1141 ""'''Usage: pack period | date
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1142
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1143 Remove journal entries older than a period of time specified or
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1144 before a certain date.
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1145
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1146 A period is specified using the suffixes "y", "m", and "d". The
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1147 suffix "w" (for "week") means 7 days.
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1148
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1149 "3y" means three years
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1150 "2y 1m" means two years and one month
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1151 "1m 25d" means one month and 25 days
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1152 "2w 3d" means two weeks and three days
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1153
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1154 Date format is "YYYY-MM-DD" eg:
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1155 2001-01-01
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1156
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1157 '''
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1158 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
1159 raise UsageError, _('Not enough arguments supplied')
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1160
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1161 # 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
1162 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
1163 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
1164 (?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
1165 (?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
1166 ''', 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
1167 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
1168 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
1169 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
1170 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
1171 if m['period']:
861
68cef2bb929d fixed the date module so that Date(". - 2d") works
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
1172 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
1173 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
1174 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
1175 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
1176 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
1177
2650
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1178 def do_reindex(self, args, desre=re.compile('([A-Za-z]+)([0-9]+)')):
2785
2a8a4d8ab339 translation mark was lost on do_reindex help
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2767
diff changeset
1179 ""'''Usage: reindex [classname|designator]*
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1180 Re-generate a tracker's search indexes.
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1181
2787
dea26f113e6f do_reindex help string reformatted to reuse existing translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2785
diff changeset
1182 This will re-generate the search indexes for a tracker.
dea26f113e6f do_reindex help string reformatted to reuse existing translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2785
diff changeset
1183 This will typically happen automatically.
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1184 '''
2650
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1185 if args:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1186 for arg in args:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1187 m = desre.match(arg)
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1188 if m:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1189 cl = self.get_class(m.group(1))
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1190 try:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1191 cl.index(m.group(2))
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1192 except IndexError:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1193 raise UsageError, _('no such item "%(designator)s"')%{
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1194 'designator': arg}
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1195 else:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1196 cl = self.get_class(arg)
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1197 self.db.reindex(arg)
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1198 else:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1199 self.db.reindex()
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1200 return 0
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1201
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1202 def do_security(self, args):
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1203 ""'''Usage: security [Role name]
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1204 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
1205 '''
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1206 if len(args) == 1:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1207 role = args[0]
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1208 try:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1209 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
1210 except KeyError:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1211 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
1212 return 1
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1213 else:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1214 roles = self.db.security.role.items()
929
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1215 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
1216 if ',' in role:
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1217 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
1218 else:
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1219 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
1220 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
1221 if ',' in role:
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1222 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
1223 else:
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1224 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
1225 roles.sort()
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1226 for rolename, role in roles:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1227 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
1228 for permission in role.permissions:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1229 if permission.klass:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1230 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
1231 'only)')%permission.__dict__
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1232 else:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1233 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
1234 return 0
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1235
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1236 def run_command(self, args):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1237 '''Run a single command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1238 '''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1239 command = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1240
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1241 # handle help now
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1242 if command == 'help':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1243 if len(args)>1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1244 self.do_help(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1245 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1246 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1247 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1248 if command == 'morehelp':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1249 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1250 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1251 self.help_all()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1252 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1253
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1254 # figure what the command is
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1255 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1256 functions = self.commands.get(command)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1257 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1258 # not a valid command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1259 print _('Unknown command "%(command)s" ("help commands" for a '
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1260 'list)')%locals()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1261 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1262
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1263 # check for multiple matches
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1264 if len(functions) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1265 print _('Multiple commands match "%(command)s": %(list)s')%{'command':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1266 command, 'list': ', '.join([i[0] for i in functions])}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1267 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1268 command, function = functions[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1269
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1270 # make sure we have a tracker_home
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1271 while not self.tracker_home:
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1272 self.tracker_home = raw_input(_('Enter tracker home: ')).strip()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1273
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1274 # 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
1275 if command == 'initialise':
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1276 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1277 return self.do_initialise(self.tracker_home, args)
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1278 except UsageError, message:
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1279 print _('Error: %(message)s')%locals()
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1280 return 1
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1281 elif command == 'install':
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1282 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1283 return self.do_install(self.tracker_home, args)
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1284 except UsageError, message:
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1285 print _('Error: %(message)s')%locals()
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1286 return 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1287
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1288 # get the tracker
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1289 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1290 tracker = roundup.instance.open(self.tracker_home)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1291 except ValueError, message:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1292 self.tracker_home = ''
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1293 print _("Error: Couldn't open tracker: %(message)s")%locals()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1294 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1295
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1296 # only open the database once!
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1297 if not self.db:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1298 self.db = tracker.open('admin')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1299
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1300 # do the command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1301 ret = 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1302 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1303 ret = function(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1304 except UsageError, message:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1305 print _('Error: %(message)s')%locals()
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1306 print
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1307 print function.__doc__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1308 ret = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1309 except:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1310 import traceback
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1311 traceback.print_exc()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1312 ret = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1313 return ret
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1314
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1315 def interactive(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1316 '''Run in an interactive mode
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1317 '''
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1318 print _('Roundup %s ready for input.\nType "help" for help.'
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1319 % roundup_version)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1320 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1321 import readline
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1322 except ImportError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1323 print _('Note: command history and editing not available')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1324
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1325 while 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1326 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1327 command = raw_input(_('roundup> '))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1328 except EOFError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1329 print _('exit...')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1330 break
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1331 if not command: continue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1332 args = token.token_split(command)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1333 if not args: continue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1334 if args[0] in ('quit', 'exit'): break
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1335 self.run_command(args)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1336
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1337 # exit.. check for transactions
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1338 if self.db and self.db.transactions:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1339 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
1340 if commit and commit[0].lower() == 'y':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1341 self.db.commit()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1342 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1343
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1344 def main(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1345 try:
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2184
diff changeset
1346 opts, args = getopt.getopt(sys.argv[1:], 'i:u:hcdsS:v')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1347 except getopt.GetoptError, e:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1348 self.usage(str(e))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1349 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1350
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1351 # handle command-line args
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1352 self.tracker_home = os.environ.get('TRACKER_HOME', '')
649
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
1353 # TODO: reinstate the user/password stuff (-u arg too)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1354 name = password = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1355 if os.environ.has_key('ROUNDUP_LOGIN'):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1356 l = os.environ['ROUNDUP_LOGIN'].split(':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1357 name = l[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1358 if len(l) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1359 password = l[1]
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1360 self.separator = None
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1361 self.print_designator = 0
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1362 for opt, arg in opts:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1363 if opt == '-h':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1364 self.usage()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1365 return 0
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2184
diff changeset
1366 if opt == '-v':
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2184
diff changeset
1367 print '%s (python %s)'%(roundup_version, sys.version.split()[0])
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2184
diff changeset
1368 return 0
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1369 if opt == '-i':
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1370 self.tracker_home = arg
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1371 if opt == '-c':
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1372 if self.separator != None:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1373 self.usage('Only one of -c, -S and -s may be specified')
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1374 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1375 self.separator = ','
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1376 if opt == '-S':
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1377 if self.separator != None:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1378 self.usage('Only one of -c, -S and -s may be specified')
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1379 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1380 self.separator = arg
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1381 if opt == '-s':
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1382 if self.separator != None:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1383 self.usage('Only one of -c, -S and -s may be specified')
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1384 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1385 self.separator = ' '
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1386 if opt == '-d':
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1387 self.print_designator = 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1388
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1389 # if no command - go interactive
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1390 # wrap in a try/finally so we always close off the db
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1391 ret = 0
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1392 try:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1393 if not args:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1394 self.interactive()
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1395 else:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1396 ret = self.run_command(args)
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1397 if self.db: self.db.commit()
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1398 return ret
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1399 finally:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1400 if self.db:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1401 self.db.close()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1402
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1403 if __name__ == '__main__':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1404 tool = AdminTool()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1405 sys.exit(tool.main())
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1406
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
1407 # vim: set filetype=python sts=4 sw=4 et si :

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