annotate roundup/admin.py @ 5979:33a7b10618a6

Add support for -u to roundup-admin Reimplement -u <login>[:<password>]. This opens the database as the login and applies expected permissions. It also creates history entries for the user. Note that the password is unused. The CLI has full access to the files so a password check is not useful. Left an edge case is when the login has a : in it. In this case it may not work as expected. So don't do that.
author John Rouillard <rouilj@ieee.org>
date Thu, 14 Nov 2019 21:37:13 -0500
parents d0aebd4aec72
children 3719b01cbe9e
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 #
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
19
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
20 """Administration commands for maintaining Roundup trackers.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
21 """
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
22 from __future__ import print_function
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
23
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
24 __docformat__ = 'restructuredtext'
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
25
5455
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
26 import csv, getopt, getpass, os, re, shutil, sys, operator
3197
6d0b5937ee0d fix: module csv is in standard library, not in roundup package;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3179
diff changeset
27
6d0b5937ee0d fix: module csv is in standard library, not in roundup package;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3179
diff changeset
28 from roundup import date, hyperdb, roundupdb, init, password, token
773
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 763
diff changeset
29 from roundup import __version__ as roundup_version
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
30 import roundup.instance
5762
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
31 from roundup.configuration import CoreConfig, NoConfigError, UserConfig
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
32 from roundup.i18n import _
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
33 from roundup.exceptions import UsageError
5401
4cf48ff01e04 Python 3 preparation: replace raw_input uses.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5250
diff changeset
34 from roundup.anypy.my_input import my_input
5525
bb7865241f8a Make CSV import/export compatible across Python versions (also RDBMS journals) (issue 2550976, issue 2550975).
Joseph Myers <jsm@polyomino.org.uk>
parents: 5459
diff changeset
35 from roundup.anypy.strings import repr_export
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
36
5455
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
37 try:
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
38 from UserDict import UserDict
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
39 except ImportError:
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
40 from collections import UserDict
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
41
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
42 class CommandDict(UserDict):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
43 """Simple dictionary that lets us do lookups using partial keys.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
44
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
45 Original code submitted by Engelbert Gruber.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
46 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
47 _marker = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
48 def get(self, key, default=_marker):
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
49 if key in self.data:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
50 return [(key, self.data[key])]
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
51 keylist = sorted(self.data)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
52 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
53 for ki in keylist:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 if ki.startswith(key):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
55 l.append((ki, self.data[ki]))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 if not l and default is self._marker:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
57 raise KeyError(key)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 return l
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
59
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 class AdminTool:
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
61 """ A collection of methods used in maintaining Roundup trackers.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
62
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
63 Typically these methods are accessed through the roundup-admin
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
64 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
65 loop for the roundup-admin script.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
66
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
67 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
68 given in the method docstring.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
69
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
70 Additional help may be supplied by help_*() methods.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
71 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72 def __init__(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
73 self.commands = CommandDict()
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
74 for k in AdminTool.__dict__:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
75 if k[:3] == 'do_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76 self.commands[k[3:]] = getattr(self, k)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
77 self.help = {}
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
78 for k in AdminTool.__dict__:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
79 if k[:5] == 'help_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 self.help[k[5:]] = getattr(self, k)
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
81 self.tracker_home = ''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
82 self.db = None
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
83 self.db_uncommitted = False
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
84 self.force = None
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
85
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
86 def get_class(self, classname):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
87 """Get the class - raise an exception if it doesn't exist.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
88 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
89 try:
489
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
90 return self.db.getclass(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
91 except KeyError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
92 raise UsageError(_('no such class "%(classname)s"')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93
649
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
94 def props_from_args(self, args):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
95 """ Produce a dictionary of prop: value from the args list.
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
96
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
97 The args list is specified as ``prop=value prop=value ...``.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
98 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 props = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 for arg in args:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
101 if arg.find('=') == -1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
102 raise UsageError(_('argument "%(arg)s" not propname=value'
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
103 )%locals())
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
104 l = arg.split('=')
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
105 if len(l) < 2:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
106 raise UsageError(_('argument "%(arg)s" not propname=value'
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
107 )%locals())
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
108 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
109 if value:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
110 props[key] = value
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
111 else:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
112 props[key] = None
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
113 return props
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
114
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
115 def usage(self, message=''):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
116 """ Display a simple usage message.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
117 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
118 if message:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
119 message = _('Problem: %(message)s\n\n')%locals()
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
120 sys.stdout.write( _("""%(message)sUsage: roundup-admin [options] [<command> <arguments>]
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
121
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
122 Options:
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
123 -i instance home -- specify the issue tracker "home directory" to administer
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
124 -u -- the user[:password] to use for commands (default admin)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
125 -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
126 -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
127 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
128 -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
129 -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
130 Same as '-S " "'.
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
131 -V -- be verbose when importing
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
132 -v -- report Roundup and Python versions (and quit)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
133
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
134 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
135
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
136 Help:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
137 roundup-admin -h
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
138 roundup-admin help -- this help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139 roundup-admin help <command> -- command-specific help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 roundup-admin help all -- all available help
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
141 """)%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
142 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
144 def help_commands(self):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
145 """List the commands available with their help summary.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
146 """
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
147 sys.stdout.write( _('Commands: '))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
148 commands = ['']
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
149 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
150 h = _(command.__doc__).split('\n')[0]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
151 commands.append(' '+h[7:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
152 commands.sort()
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
153 commands.append(_(
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
154 """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
155 matches only one command, e.g. l == li == lis == list."""))
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
156 sys.stdout.write('\n'.join(commands) + '\n\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
157
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
158 def help_commands_html(self, indent_re=re.compile(r'^(\s+)\S+')):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
159 """ Produce an HTML command list.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
160 """
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
161 commands = sorted(iter(self.commands.values()),
5414
3fa026621f69 Python 3 preparation: comparisons.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5401
diff changeset
162 key=operator.attrgetter('__name__'))
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
163 for command in commands:
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
164 h = _(command.__doc__).split('\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 name = command.__name__[3:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166 usage = h[0]
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
167 print("""
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
168 <tr><td valign=top><strong>%(name)s</strong></td>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
169 <td><tt>%(usage)s</tt><p>
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
170 <pre>""" % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
171 indent = indent_re.match(h[3])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
172 if indent: indent = len(indent.group(1))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
173 for line in h[3:]:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
174 if indent:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
175 print(line[indent:])
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
176 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
177 print(line)
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
178 print('</pre></td></tr>\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
179
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
180 def help_all(self):
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
181 print(_("""
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
182 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
183 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
184 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
185 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
186 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
187 or on the command line as "-i tracker".
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
189 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
190
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 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
192 printed results:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 . Strings are, well, strings.
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
194 . 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
195 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
196 below.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197 . 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
198 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
199 . 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
200 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
201 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
202 of nodes joined by commas is accepted.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
204 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
205 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
206 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
207 quotes. Examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
208 hello world (2 tokens: hello, world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
209 "hello world" (1 token: hello world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
210 "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
211 Roch\\'e Compaan (2 tokens: Roch'e Compaan)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
212 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
213 \\\\ (1 token: \\)
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
214 \\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
215
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216 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
217 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
218 nodes.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
220 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
221 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
222 the -c) option.
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 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
225 login may be specified as either "name" or "name:password".
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
226 . ROUNDUP_LOGIN environment variable
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
227 . the -u command-line option
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
228 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
229 command-line.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
230
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
231 Date format examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
232 "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
233 "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
234 "01-25" means <Date yyyy-01-25.00:00:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235 "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
236 "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
237 "14:25" means <Date yyyy-mm-dd.19:25:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
238 "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
239 "." means "right now"
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
241 Command help:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
242 """))
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
243 for name, command in list(self.commands.items()):
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
244 print(_('%s:')%name)
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
245 print(' ', _(command.__doc__))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 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
248 indent_re=re.compile(r'^(\s+)\S+')):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
249 ''"""Usage: help topic
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
250 Give help about topic.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
252 commands -- list commands
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
253 <command> -- help specific to a command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
254 initopts -- init command options
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
255 all -- all available help
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
256 """
582
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
257 if len(args)>0:
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
258 topic = args[0]
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
259 else:
2fc4f8942a59 allow abbreviation of "help" in admin tool too.
Engelbert Gruber <grubert@users.sourceforge.net>
parents: 562
diff changeset
260 topic = 'help'
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
261
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
262
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
263 # try help_ methods
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
264 if topic in self.help:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265 self.help[topic]()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
266 return 0
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 # try command docstrings
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
269 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
270 l = self.commands.get(topic)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
271 except KeyError:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
272 print(_('Sorry, no help for "%(topic)s"')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
273 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
274
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
275 # display the help for each match, removing the docsring indent
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276 for name, help in l:
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
277 lines = nl_re.split(_(help.__doc__))
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
278 print(lines[0])
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279 indent = indent_re.match(lines[1])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280 if indent: indent = len(indent.group(1))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281 for line in lines[1:]:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
282 if indent:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
283 print(line[indent:])
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
284 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
285 print(line)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
288 def listTemplates(self):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
289 """ List all the available templates.
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
290
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
291 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
292
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
293 1. <roundup.admin.__file__>/../../share/roundup/templates/*
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
294 this is where they will be if we installed an egg via easy_install
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
295 2. <prefix>/share/roundup/templates/*
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
296 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
297 installed
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
298 3. <roundup.admin.__file__>/../templates/*
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
299 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
300 directory
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
301 4. <current working dir>/*
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
302 this is for when someone unpacks a 3rd-party template
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
303 5. <current working dir>
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
304 this is for someone who "cd"s to the 3rd-party template dir
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
305 """
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
306 # OK, try <prefix>/share/roundup/templates
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
307 # and <egg-directory>/share/roundup/templates
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
308 # -- 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
309 # like:
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
310 # /usr/lib/python2.5/site-packages/roundup/admin.py (5 dirs up)
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
311 # c:\python25\lib\site-packages\roundup\admin.py (4 dirs up)
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
312 # /usr/lib/python2.5/site-packages/roundup-1.3.3-py2.5-egg/roundup/admin.py
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
313 # (2 dirs up)
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
314 #
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
315 # we're interested in where the directory containing "share" is
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
316 templates = {}
4900
349a83aca61f Correctly locate templates in a virtualenv (issue2550841)
John Kristensen <john@jerrykan.com>
parents: 4781
diff changeset
317 for N in 2, 4, 5, 6:
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
318 path = __file__
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
319 # move up N elements in the path
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
320 for i in range(N):
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
321 path = os.path.dirname(path)
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
322 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
323 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
324 templates = init.listTemplates(tdir)
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
325 break
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
326
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
327 # 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
328 # 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
329 # and we're interested in the .../roundup-*/ part.
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
330 path = __file__
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
331 for i in range(2):
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
332 path = os.path.dirname(path)
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
333 tdir = os.path.join(path, 'templates')
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
334 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
335 templates.update(init.listTemplates(tdir))
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
336
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
337 # 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
338 templates.update(init.listTemplates(os.getcwd()))
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
339
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
340 # 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
341 template = init.loadTemplateInfo(os.getcwd())
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
342 if template:
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
343 templates[template['name']] = template
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
344
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
345 return templates
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
346
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
347 def help_initopts(self):
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
348 templates = self.listTemplates()
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
349 print(_('Templates:'), ', '.join(templates))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
350 import roundup.backends
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2793
diff changeset
351 backends = roundup.backends.list_backends()
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
352 print(_('Back ends:'), ', '.join(backends))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
353
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
354 def do_install(self, tracker_home, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
355 ''"""Usage: install [template [backend [key=val[,key=val]]]]
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
356 Install a new Roundup tracker.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
357
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
358 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
359 (if not supplied through TRACKER_HOME or the -i option).
3671
cecdd102733c fix help message for roundup-admin install [SF#1494990]
Richard Jones <richard@users.sourceforge.net>
parents: 3670
diff changeset
360 The template and backend may be specified on the command-line
cecdd102733c fix help message for roundup-admin install [SF#1494990]
Richard Jones <richard@users.sourceforge.net>
parents: 3670
diff changeset
361 as arguments, in that order.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
362
3671
cecdd102733c fix help message for roundup-admin install [SF#1494990]
Richard Jones <richard@users.sourceforge.net>
parents: 3670
diff changeset
363 Command line arguments following the backend allows you to
cecdd102733c fix help message for roundup-admin install [SF#1494990]
Richard Jones <richard@users.sourceforge.net>
parents: 3670
diff changeset
364 pass initial values for config options. For example, passing
3433
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
365 "web_http_auth=no,rdbms_user=dinsdale" will override defaults
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
366 for options http_auth in section [web] and user in section [rdbms].
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
367 Please be careful to not use spaces in this argument! (Enclose
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
368 whole argument in quotes if you need spaces in option value).
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
369
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
370 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
371 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
372 initial database contents before running that command by editing
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
373 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
374
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
375 See also initopts help.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
376 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
377 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
378 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
379
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
380 # 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
381 tracker_home = os.path.abspath(tracker_home)
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
382 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
383 if not os.path.exists(parent):
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
384 raise UsageError(_('Instance home parent directory "%(parent)s"'
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
385 ' does not exist')%locals())
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
386
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
387 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
388 # check for both old- and new-style configs
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
389 if list(filter(os.path.exists, [config_ini_file,
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
390 os.path.join(tracker_home, 'config.py')])):
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
391 if not self.force:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
392 ok = my_input(_(
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
393 """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
394 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
395 Erase it? Y/N: """) % locals())
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
396 if ok.strip().lower() != 'y':
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
397 return 0
2184
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
398
d04ef0543c76 roundup-admin install checks for existing tracker in target home
Richard Jones <richard@users.sourceforge.net>
parents: 2178
diff changeset
399 # 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
400 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
401
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
402 # select template
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
403 templates = self.listTemplates()
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
404 template = self._get_choice(
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
405 list_name=_('Templates:'),
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
406 prompt=_('Select template'),
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
407 options=templates,
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
408 argument=len(args) > 1 and args[1] or '',
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
409 default='classic')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
410
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
411 # select hyperdb backend
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
412 import roundup.backends
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2793
diff changeset
413 backends = roundup.backends.list_backends()
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
414 backend = self._get_choice(
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
415 list_name=_('Back ends:'),
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
416 prompt=_('Select backend'),
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
417 options=backends,
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
418 argument=len(args) > 2 and args[2] or '',
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
419 default='anydbm')
1165
14467c765167 sqlite backend!
Richard Jones <richard@users.sourceforge.net>
parents: 1133
diff changeset
420 # 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
421
3433
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
422 # Process configuration file definitions
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
423 if len(args) > 3:
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
424 try:
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
425 defns = dict([item.split("=") for item in args[3].split(",")])
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
426 except:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
427 print(_('Error in configuration settings: "%s"') % args[3])
3433
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
428 raise
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
429 else:
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
430 defns = {}
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
431
5041
5251e97b1de0 Configure the database backend in the config.ini
John Kristensen <john@jerrykan.com>
parents: 4900
diff changeset
432 defns['rdbms_backend'] = backend
5762
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
433
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
434 # load config_ini.ini from template if it exists.
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
435 # it sets parameters like template_engine that are
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
436 # template specific.
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
437 template_config=UserConfig(templates[template]['path'] +
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
438 "/config_ini.ini")
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
439 for k in template_config.keys():
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
440 if k == 'HOME': # ignore home. It is a default param.
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
441 continue
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
442 defns[k] = template_config[k]
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
443
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
444 # install!
3433
2affe8fa51a5 install: accept configuration setting overrides (based on patch [SF#237110])
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3383
diff changeset
445 init.install(tracker_home, templates[template]['path'], settings=defns)
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
446
5762
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
447 # Remove config_ini.ini file from tracker_home (not template dir).
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
448 # Ignore file not found - not all templates have
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
449 # config_ini.ini files.
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
450 try:
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
451 os.remove(tracker_home + "/config_ini.ini")
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
452 except OSError as e: # FileNotFound exception under py3
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
453 if e.errno == 2:
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
454 pass
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
455 else:
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
456 raise
b76be13e027e issue2551029: Jinja2 template install error.
John Rouillard <rouilj@ieee.org>
parents: 5525
diff changeset
457
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
458 print(_("""
3295
a615cc230160 added Xapian indexer; replaces standard indexers if Xapian is available
Richard Jones <richard@users.sourceforge.net>
parents: 3287
diff changeset
459 ---------------------------------------------------------------------------
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
460 You should now edit the tracker configuration file:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
461 %(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
462
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
463 # 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
464 # 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
465 # (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
466 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
467 if need_set:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
468 print(_(" ... at a minimum, you must set following options:"))
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
469 for section in need_set:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
470 print(" [%s]: %s" % (section, ", ".join(need_set[section])))
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
471
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
472 # note about schema modifications
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
473 print(_("""
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
474 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
475 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
476 %(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
477 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
478 %(database_init_file)s
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
479 ... see the documentation on customizing for more information.
3295
a615cc230160 added Xapian indexer; replaces standard indexers if Xapian is available
Richard Jones <richard@users.sourceforge.net>
parents: 3287
diff changeset
480
a615cc230160 added Xapian indexer; replaces standard indexers if Xapian is available
Richard Jones <richard@users.sourceforge.net>
parents: 3287
diff changeset
481 You MUST run the "roundup-admin initialise" command once you've performed
a615cc230160 added Xapian indexer; replaces standard indexers if Xapian is available
Richard Jones <richard@users.sourceforge.net>
parents: 3287
diff changeset
482 the above steps.
a615cc230160 added Xapian indexer; replaces standard indexers if Xapian is available
Richard Jones <richard@users.sourceforge.net>
parents: 3287
diff changeset
483 ---------------------------------------------------------------------------
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
484 """) % {
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
485 '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
486 'database_init_file': os.path.join(tracker_home, 'initial_data.py'),
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
487 })
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
488 return 0
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
489
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
490 def _get_choice(self, list_name, prompt, options, argument, default=None):
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
491 if default is None:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
492 default = options[0] # just pick the first one
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
493 if argument in options:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
494 return argument
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
495 if self.force:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
496 return default
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
497 sys.stdout.write('%s: %s\n' % (list_name, ', '.join(options)))
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
498 while argument not in options:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
499 argument = my_input('%s [%s]: ' % (prompt, default))
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
500 if not argument:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
501 return default
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
502 return argument
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
503
5230
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
504 def do_genconfig(self, args, update=False):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
505 ''"""Usage: genconfig <filename>
2889
accb3b411ef6 instructions and method for generating config.ini
Richard Jones <richard@users.sourceforge.net>
parents: 2856
diff changeset
506 Generate a new tracker config file (ini style) with default values
accb3b411ef6 instructions and method for generating config.ini
Richard Jones <richard@users.sourceforge.net>
parents: 2856
diff changeset
507 in <filename>.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
508 """
2889
accb3b411ef6 instructions and method for generating config.ini
Richard Jones <richard@users.sourceforge.net>
parents: 2856
diff changeset
509 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
510 raise UsageError(_('Not enough arguments supplied'))
5230
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
511 if update:
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
512 # load current config for writing
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
513 config = CoreConfig(self.tracker_home)
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
514 else:
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
515 # generate default config
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
516 config = CoreConfig()
2889
accb3b411ef6 instructions and method for generating config.ini
Richard Jones <richard@users.sourceforge.net>
parents: 2856
diff changeset
517 config.save(args[0])
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
518
5230
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
519 def do_updateconfig(self, args):
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
520 ''"""Usage: updateconfig <filename>
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
521 Generate an updated tracker config file (ini style) in
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
522 <filename>. Use current settings from existing roundup
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
523 tracker in tracker home.
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
524 """
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
525 self.do_genconfig(args, update=True)
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
526
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
527 def do_initialise(self, tracker_home, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
528 ''"""Usage: initialise [adminpw]
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
529 Initialise a new Roundup tracker.
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
530
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
531 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
532
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
533 Execute the tracker's initialisation function dbinit.init()
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
534 """
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
535 # password
751
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
536 if len(args) > 1:
92abd71ec19b out by one in the init args
Richard Jones <richard@users.sourceforge.net>
parents: 738
diff changeset
537 adminpw = args[1]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
538 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
539 adminpw = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
540 confirm = 'x'
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
541 while adminpw != confirm:
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
542 adminpw = getpass.getpass(_('Admin Password: '))
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
543 confirm = getpass.getpass(_(' Confirm: '))
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
544
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
545 # make sure the tracker home is installed
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
546 if not os.path.exists(tracker_home):
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
547 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
548 try:
b953750bdc04 trackers on mysql can be initialised
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1409
diff changeset
549 tracker = roundup.instance.open(tracker_home)
b953750bdc04 trackers on mysql can be initialised
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1409
diff changeset
550 except roundup.instance.TrackerError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
551 raise UsageError(_('Instance has not been installed')%locals())
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
552
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
553 # 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
554 if tracker.exists():
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
555 if not self.force:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
556 ok = my_input(_(
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
557 """WARNING: The database is already initialised!
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
558 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
559 Erase it? Y/N: """))
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
560 if ok.strip().lower() != 'y':
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
561 return 0
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
562
2633
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2566
diff changeset
563 # nuke it
a9e1fff1e793 I thought I committed this last night. Ho hum.
Richard Jones <richard@users.sourceforge.net>
parents: 2566
diff changeset
564 tracker.nuke()
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
565
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
566 # GO
5216
6a4317738a90 make roundup-admin init function set the transaction source. Otherwise when initial_data.py is loaded as part of init, db.tx_Source is set to None and thus checks like db.tx_Source in [ 'cli' ] will fail.
John Rouillard <rouilj@ieee.org>
parents: 5163
diff changeset
567 tracker.init(password.Password(adminpw, config=tracker.config),
6a4317738a90 make roundup-admin init function set the transaction source. Otherwise when initial_data.py is loaded as part of init, db.tx_Source is set to None and thus checks like db.tx_Source in [ 'cli' ] will fail.
John Rouillard <rouilj@ieee.org>
parents: 5163
diff changeset
568 tx_Source = 'cli')
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
569
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
570 return 0
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
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
573 def do_get(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
574 ''"""Usage: get property designator[,designator]*
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
575 Get the given property of one or more designator(s).
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
576
4299
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
577 A designator is a classname and a nodeid concatenated,
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
578 eg. bug1, user10, ...
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
579
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
580 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
581 by the designators.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
582 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
583 if len(args) < 2:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
584 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
585 propname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
586 designators = args[1].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
587 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
588 for designator in designators:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
589 # decode the node designator
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
590 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
591 classname, nodeid = hyperdb.splitDesignator(designator)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
592 except hyperdb.DesignatorError as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
593 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
594
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
595 # get the class
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 try:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
598 id=[]
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
599 if self.separator:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
600 if self.print_designator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
601 # 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
602 # which getting a desginator make sense.
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
603 # Algorithm: Get the properties of the
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
604 # current designator's class. (cl.getprops)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
605 # 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
606 # user requested (properties[propname])
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
607 # verify its type (isinstance...)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
608 # raise error if not link/multilink
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
609 # 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
610 # do the get on the designators
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
611 # append the new designators
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
612 # print
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
613 properties = cl.getprops()
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
614 property = properties[propname]
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
615 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
616 isinstance(property, hyperdb.Link)):
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
617 raise UsageError(_('property %s is not of type'
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
618 ' Multilink or Link so -d flag does not '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
619 'apply.')%propname)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
620 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
621 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
622 for i in id:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
623 l.append(propclassname + i)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
624 else:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
625 id = cl.get(nodeid, propname)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
626 for i in id:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
627 l.append(i)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
628 else:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
629 if self.print_designator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
630 properties = cl.getprops()
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
631 property = properties[propname]
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
632 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
633 isinstance(property, hyperdb.Link)):
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
634 raise UsageError(_('property %s is not of type'
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
635 ' Multilink or Link so -d flag does not '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
636 'apply.')%propname)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
637 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
638 id = cl.get(nodeid, propname)
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
639 for i in id:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
640 print(propclassname + i)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
641 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
642 print(cl.get(nodeid, propname))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
643 except IndexError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
644 raise UsageError(_('no such %(classname)s node '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
645 '"%(nodeid)s"')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
646 except KeyError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
647 raise UsageError(_('no such %(classname)s property '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
648 '"%(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
649 if self.separator:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
650 print(self.separator.join(l))
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
651
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
652 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
653
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
654
3383
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3359
diff changeset
655 def do_set(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
656 ''"""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
657 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
658
1570
93e0a565cee5 fix the "set" command usage statement
Richard Jones <richard@users.sourceforge.net>
parents: 1566
diff changeset
659 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
660 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
661
4299
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
662 A designator is a classname and a nodeid concatenated,
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
663 eg. bug1, user10, ...
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
664
1108
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
665 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
666 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
667 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
668 ids for the multilink as comma-separated numbers (ie "1,2,3").
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
669 """
5104
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
670 import copy # needed for copying props list
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
671
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
672 if len(args) < 2:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
673 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
674 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
675
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
676 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
677 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
678 designator = designators[0]
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
679 try:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
680 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
681 designators = [designator]
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
682 except hyperdb.DesignatorError:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
683 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
684 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
685 else:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
686 try:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
687 designators = [hyperdb.splitDesignator(x) for x in designators]
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
688 except hyperdb.DesignatorError as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
689 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
690
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
691 # get the props from the args
5104
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
692 propset = self.props_from_args(args[1:]) # parse the cli once
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
693
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
694 # 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
695 for classname, itemid in designators:
5104
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
696 props = copy.copy(propset) # make a new copy for every designator
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
697 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
698
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
699 for key, value in list(props.items()):
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
700 try:
5104
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
701 # You must reinitialize the props every time though.
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
702 # if props['nosy'] = '+admin' initally, it gets
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
703 # set to 'demo,admin' (assuming it was set to demo
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
704 # in the db) after rawToHyperdb returns.
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
705 # This new value is used for all the rest of the
ca3e56590fcd Fixed issue2550572: setting nosy=+foo on multiple issues gives them all
John Rouillard <rouilj@ieee.org>
parents: 5041
diff changeset
706 # designators if not reinitalized.
1905
dc43e339e607 Centralised conversion of user-input data to hyperdb values
Richard Jones <richard@users.sourceforge.net>
parents: 1863
diff changeset
707 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
708 key, value)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
709 except hyperdb.HyperdbValueError as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
710 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
711
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
712 # try the set
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
713 try:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
714 cl.set(itemid, **props)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
715 except (TypeError, IndexError, ValueError) as message:
1229
5c581b120738 added "crypt" password encoding...
Richard Jones <richard@users.sourceforge.net>
parents: 1194
diff changeset
716 import traceback; traceback.print_exc()
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
717 raise UsageError(message)
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
718 self.db_uncommitted = True
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
719 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
720
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
721 def do_find(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
722 ''"""Usage: find classname propname=value ...
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
723 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
724
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
725 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
726 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
727 value.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
728 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
729 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
730 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
731 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
732 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
733 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
734
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
735 # handle the propname=value argument
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
736 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
737
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
738 # convert the user-input value to a value used for find()
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
739 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
740 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
741 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
742 else:
2504
Richard Jones <richard@users.sourceforge.net>
parents: 2496
diff changeset
743 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
744 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
745 for value in values:
2998
7c438646531a merge from maint-0-7
Richard Jones <richard@users.sourceforge.net>
parents: 2889
diff changeset
746 value = hyperdb.rawToHyperdb(self.db, cl, None, propname, value)
3314
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
747 if isinstance(value, list):
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
748 for entry in value:
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
749 d[entry] = 1
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
750 else:
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
751 d[value] = 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
752
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
753 # now do the find
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
754 try:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
755 id = []
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
756 designator = []
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
757 if self.separator:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
758 if self.print_designator:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
759 id = cl.find(**props)
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
760 for i in id:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
761 designator.append(classname + i)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
762 print(self.separator.join(designator))
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
763 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
764 print(self.separator.join(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
765
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
766 else:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
767 if self.print_designator:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
768 id = cl.find(**props)
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
769 for i in id:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
770 designator.append(classname + i)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
771 print(designator)
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
772 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
773 print(cl.find(**props))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
774 except KeyError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
775 raise UsageError(_('%(classname)s has no property '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
776 '"%(propname)s"')%locals())
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
777 except (ValueError, TypeError) as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
778 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
779 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
780
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
781 def do_specification(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
782 ''"""Usage: specification classname
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
783 Show the properties for a classname.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
784
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
785 This lists the properties for a given class.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
786 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
787 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
788 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
789 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
790 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
791 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
792
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
793 # get the key property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
794 keyprop = cl.getkey()
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
795 for key in cl.properties:
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
796 value = cl.properties[key]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
797 if keyprop == key:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
798 sys.stdout.write( _('%(key)s: %(value)s (key property)\n')%locals() )
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
799 else:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
800 sys.stdout.write( _('%(key)s: %(value)s\n')%locals() )
484
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 def do_display(self, args):
4089
eddb82d0964c Add compatibility package to allow us to deal with Python versions 2.3..2.6.
Richard Jones <richard@users.sourceforge.net>
parents: 4073
diff changeset
803 ''"""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
804 Show the property values for the given node(s).
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
805
4299
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
806 A designator is a classname and a nodeid concatenated,
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
807 eg. bug1, user10, ...
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
808
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
809 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
810 node.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
811 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
812 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
813 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
814
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
815 # decode the node designator
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
816 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
817 try:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
818 classname, nodeid = hyperdb.splitDesignator(designator)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
819 except hyperdb.DesignatorError as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
820 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
821
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
822 # get the class
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
823 cl = self.get_class(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
824
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
825 # display the values
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
826 keys = sorted(cl.properties)
1775
d4c0c65adb2c applied patch [SF#739314] (sorry John!)
Richard Jones <richard@users.sourceforge.net>
parents: 1767
diff changeset
827 for key in keys:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
828 value = cl.get(nodeid, key)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
829 print(_('%(key)s: %(value)s')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
830
3383
c1c67c62b699 applied patch [SF#236087]
Richard Jones <richard@users.sourceforge.net>
parents: 3359
diff changeset
831 def do_create(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
832 ''"""Usage: create classname property=value ...
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
833 Create a new entry of a given class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
834
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
835 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
836 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
837 command.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
838 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
839 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
840 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
841 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
842
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
843 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
844
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
845 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
846 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
847
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
848 # now do a create
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
849 props = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
850 properties = cl.getprops(protected = 0)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
851 if len(args) == 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
852 # ask for the properties
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
853 for key in properties:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
854 if key == 'id': continue
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
855 value = properties[key]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
856 name = value.__class__.__name__
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
857 if isinstance(value , hyperdb.Password):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
858 again = None
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
859 while value != again:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
860 value = getpass.getpass(_('%(propname)s (Password): ')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
861 'propname': key.capitalize()})
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
862 again = getpass.getpass(_(' %(propname)s (Again): ')%{
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
863 'propname': key.capitalize()})
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
864 if value != again: print(_('Sorry, try again...'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
865 if value:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
866 props[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
867 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
868 value = my_input(_('%(propname)s (%(proptype)s): ')%{
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
869 'propname': key.capitalize(), 'proptype': name})
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
870 if value:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
871 props[key] = value
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
872 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
873 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
874
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
875 # convert types
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
876 for propname in props:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
877 try:
2093
3f6024ab2c7a That's the last of the RDBMS migration steps done! Yay!
Richard Jones <richard@users.sourceforge.net>
parents: 2005
diff changeset
878 props[propname] = hyperdb.rawToHyperdb(self.db, cl, None,
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
879 propname, props[propname])
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
880 except hyperdb.HyperdbValueError as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
881 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
882
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
883 # check for the key property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
884 propname = cl.getkey()
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
885 if propname and propname not in props:
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
886 raise UsageError(_('you must provide the "%(propname)s" '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
887 'property.')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
888
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
889 # do the actual create
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
890 try:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
891 sys.stdout.write(cl.create(**props) + '\n')
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
892 except (TypeError, IndexError, ValueError) as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
893 raise UsageError(message)
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
894 self.db_uncommitted = True
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
895 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
896
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
897 def do_list(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
898 ''"""Usage: list classname [property]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
899 List the instances of a class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
900
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
901 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
902 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
903 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
904 property, alphabetically.
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
905
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
906 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
907 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
908 for every class instance.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
909 """
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
910 if len(args) > 2:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
911 raise UsageError(_('Too many arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
912 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
913 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
914 classname = args[0]
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
915
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
916 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
917 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
918
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
919 # figure the property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
920 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
921 propname = args[1]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
922 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
923 propname = cl.labelprop()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
924
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
925 if self.separator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
926 if len(args) == 2:
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
927 # create a list of propnames since user specified propname
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
928 proplist=[]
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
929 for nodeid in cl.list():
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
930 try:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
931 proplist.append(cl.get(nodeid, propname))
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
932 except KeyError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
933 raise UsageError(_('%(classname)s has no property '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
934 '"%(propname)s"')%locals())
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
935 print(self.separator.join(proplist))
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
936 else:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
937 # 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
938 # otherwise
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
939 print(self.separator.join(cl.list()))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
940 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
941 for nodeid in cl.list():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
942 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
943 value = cl.get(nodeid, propname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
944 except KeyError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
945 raise UsageError(_('%(classname)s has no property '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
946 '"%(propname)s"')%locals())
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
947 print(_('%(nodeid)4s: %(value)s')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
948 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
949
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
950 def do_table(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
951 ''"""Usage: table classname [property[,property]*]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
952 List the instances of a class in tabular form.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
953
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
954 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
955 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
956 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
957 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
958 For example::
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
959
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
960 roundup> table priority id,name:10
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
961 Id Name
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
962 1 fatal-bug
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
963 2 bug
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
964 3 usability
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
965 4 feature
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
966
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
967 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
968 leave a trailing : without a width on the property. For example::
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
969
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
970 roundup> table priority id,name:
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
971 Id Name
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
972 1 fata
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
973 2 bug
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
974 3 usab
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
975 4 feat
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
976
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
977 will result in a the 4 character wide "Name" column.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
978 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
979 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
980 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
981 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
982
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
983 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
984 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
985
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
986 # figure the property names to display
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
987 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
988 prop_names = args[1].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
989 all_props = cl.getprops()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
990 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
991 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
992 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
993 propname, width = spec.split(':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
994 except (ValueError, TypeError):
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
995 raise UsageError(_('"%(spec)s" not '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
996 'name:width')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
997 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
998 propname = spec
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
999 if propname not in all_props:
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1000 raise UsageError(_('%(classname)s has no property '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1001 '"%(propname)s"')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1002 else:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1003 prop_names = cl.getprops()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1004
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1005 # now figure column widths
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1006 props = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1007 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1008 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1009 name, width = spec.split(':')
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
1010 if width == '':
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1011 props.append((name, len(spec)))
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
1012 else:
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1013 props.append((name, int(width)))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1014 else:
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1015 # this is going to be slow
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1016 maxlen = len(spec)
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1017 for nodeid in cl.list():
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
1018 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
1019 if curlen > maxlen:
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1020 maxlen = curlen
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
1021 props.append((spec, maxlen))
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1022
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1023 # now display the heading
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1024 print(' '.join([name.capitalize().ljust(width) for name,width in props]))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1025
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1026 # and the table data
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1027 for nodeid in cl.list():
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1028 l = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1029 for name, width in props:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1030 if name != 'id':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1031 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1032 value = str(cl.get(nodeid, name))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1033 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1034 # we already checked if the property is valid - a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1035 # KeyError here means the node just doesn't have a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1036 # value for it
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1037 value = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1038 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1039 value = str(nodeid)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1040 f = '%%-%ds'%width
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1041 l.append(f%value[:width])
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1042 print(' '.join(l))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1043 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1044
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1045 def do_history(self, args):
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1046 ''"""Usage: history designator [skipquiet]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1047 Show the history entries of a designator.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1048
4299
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1049 A designator is a classname and a nodeid concatenated,
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1050 eg. bug1, user10, ...
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1051
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1052 Lists the journal entries viewable by the user for the
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1053 node identified by the designator. If skipquiet is the
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1054 second argument, journal entries for quiet properties
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1055 are not shown.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1056 """
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1057
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1058 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1059 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1060 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
1061 classname, nodeid = hyperdb.splitDesignator(args[0])
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1062 except hyperdb.DesignatorError as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1063 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1064
5232
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1065 skipquiet = False
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1066 if len(args) == 2:
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1067 if args[1] != 'skipquiet':
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1068 raise UsageError("Second argument is not skipquiet")
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1069 skipquiet = True
462b0f76fce8 issue2550864 - Potential information leakage via journal/history
John Rouillard <rouilj@ieee.org>
parents: 5230
diff changeset
1070
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1071 try:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1072 print(self.db.getclass(classname).history(nodeid,
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1073 skipquiet=skipquiet))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1074 except KeyError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1075 raise UsageError(_('no such class "%(classname)s"')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1076 except IndexError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1077 raise UsageError(_('no such %(classname)s node '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1078 '"%(nodeid)s"')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1079 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1080
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1081 def do_commit(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1082 ''"""Usage: commit
2178
e1a481838a32 *** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents: 2175
diff changeset
1083 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
1084
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1085 The changes made during an interactive session are not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1086 automatically written to the database - they must be committed
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1087 using this command.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1088
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1089 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
1090 they are successful.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1091 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1092 self.db.commit()
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
1093 self.db_uncommitted = False
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1094 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1095
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1096 def do_rollback(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1097 ''"""Usage: rollback
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1098 Undo all changes that are pending commit to the database.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1099
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1100 The changes made during an interactive session are not
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1101 automatically written to the database - they must be committed
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1102 manually. This command undoes all those changes, so a commit
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1103 immediately after would make no changes to the database.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1104 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1105 self.db.rollback()
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
1106 self.db_uncommitted = False
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1107 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1108
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1109 def do_retire(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1110 ''"""Usage: retire designator[,designator]*
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1111 Retire the node specified by designator.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1112
4299
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1113 A designator is a classname and a nodeid concatenated,
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1114 eg. bug1, user10, ...
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1115
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
1116 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
1117 by the list or find commands, and its key value may be re-used.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1118 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1119 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1120 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1121 designators = args[0].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1122 for designator in designators:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1123 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
1124 classname, nodeid = hyperdb.splitDesignator(designator)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1125 except hyperdb.DesignatorError as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1126 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1127 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1128 self.db.getclass(classname).retire(nodeid)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1129 except KeyError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1130 raise UsageError(_('no such class "%(classname)s"')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1131 except IndexError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1132 raise UsageError(_('no such %(classname)s node '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1133 '"%(nodeid)s"')%locals())
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
1134 self.db_uncommitted = True
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1135 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1136
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1137 def do_restore(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1138 ''"""Usage: restore designator[,designator]*
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1139 Restore the retired node specified by designator.
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1140
4299
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1141 A designator is a classname and a nodeid concatenated,
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1142 eg. bug1, user10, ...
e16a1131ba67 include info on what a designator is in all commands that use them
Richard Jones <richard@users.sourceforge.net>
parents: 4269
diff changeset
1143
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1144 The given nodes will become available for users again.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1145 """
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1146 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1147 raise UsageError(_('Not enough arguments supplied'))
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1148 designators = args[0].split(',')
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1149 for designator in designators:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1150 try:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1151 classname, nodeid = hyperdb.splitDesignator(designator)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1152 except hyperdb.DesignatorError as message:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1153 raise UsageError(message)
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1154 try:
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1155 self.db.getclass(classname).restore(nodeid)
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1156 except KeyError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1157 raise UsageError(_('no such class "%(classname)s"')%locals())
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1158 except IndexError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1159 raise UsageError(_('no such %(classname)s node '
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1160 '"%(nodeid)s"')%locals())
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
1161 self.db_uncommitted = True
1519
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1162 return 0
6fede2aa6a12 added ability to restore retired nodes
Andrey Lebedev <kedder@users.sourceforge.net>
parents: 1496
diff changeset
1163
3670
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1164 def do_export(self, args, export_files=True):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1165 ''"""Usage: export [[-]class[,class]] export_dir
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1098
diff changeset
1166 Export the database to colon-separated-value files.
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1167 To exclude the files (e.g. for the msg or file class),
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1168 use the exporttables command.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1169
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1170 Optionally limit the export to just the named classes
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1171 or exclude the named classes, if the 1st argument starts with '-'.
2215
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1172
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1173 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
1174 colon-separated-value files that are placed in the nominated
2215
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1175 destination directory.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1176 """
939
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1177 # grab the directory to export to
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1178 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1179 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
1180
939
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1181 dir = args[-1]
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1182
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1183 # get the list of classes to export
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1184 if len(args) == 2:
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1185 if args[0].startswith('-'):
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1186 classes = [ c for c in self.db.classes
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1187 if not c in args[0][1:].split(',') ]
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1188 else:
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1189 classes = args[0].split(',')
939
c67297b55a34 moving towards full database export
Richard Jones <richard@users.sourceforge.net>
parents: 929
diff changeset
1190 else:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1191 classes = self.db.classes
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1192
3179
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
1193 class colon_separated(csv.excel):
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
1194 delimiter = ':'
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
1195
3284
9ddf9cd8baf5 fix roundup-admin "export" so it creates the target dir if needed
Richard Jones <richard@users.sourceforge.net>
parents: 3214
diff changeset
1196 # make sure target dir exists
9ddf9cd8baf5 fix roundup-admin "export" so it creates the target dir if needed
Richard Jones <richard@users.sourceforge.net>
parents: 3214
diff changeset
1197 if not os.path.exists(dir):
9ddf9cd8baf5 fix roundup-admin "export" so it creates the target dir if needed
Richard Jones <richard@users.sourceforge.net>
parents: 3214
diff changeset
1198 os.makedirs(dir)
9ddf9cd8baf5 fix roundup-admin "export" so it creates the target dir if needed
Richard Jones <richard@users.sourceforge.net>
parents: 3214
diff changeset
1199
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1200 # maximum csv field length exceeding configured size?
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1201 max_len = self.db.config.CSV_FIELD_SIZE
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1202
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1203 # do all the classes specified
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1204 for classname in classes:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1205 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
1206
3670
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1207 if not export_files and hasattr(cl, 'export_files'):
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1208 sys.stdout.write('Exporting %s WITHOUT the files\r\n'%
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1209 classname)
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1210
5459
52ff4c59fb05 export csv as text file
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5455
diff changeset
1211 f = open(os.path.join(dir, classname+'.csv'), 'w')
3179
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
1212 writer = csv.writer(f, 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
1213
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1214 properties = cl.getprops()
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1215 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
1216 fields = propnames[:]
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1217 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
1218 writer.writerow(fields)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1219
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1220 # 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
1221 for nodeid in cl.getnodeids():
3637
31c79e3aa600 Fix verbose option for roundup-admin (for import and export)
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3602
diff changeset
1222 if self.verbose:
3803
c54ae50f6ce1 Error message fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3671
diff changeset
1223 sys.stdout.write('\rExporting %s - %s'%(classname, nodeid))
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1224 sys.stdout.flush()
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1225 node = cl.getnode(nodeid)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1226 exp = cl.export_list(propnames, nodeid)
5525
bb7865241f8a Make CSV import/export compatible across Python versions (also RDBMS journals) (issue 2550976, issue 2550975).
Joseph Myers <jsm@polyomino.org.uk>
parents: 5459
diff changeset
1227 lensum = sum ([len (repr_export(node[p])) for p in propnames])
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1228 # for a safe upper bound of field length we add
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1229 # difference between CSV len and sum of all field lengths
4269
ab4563e97d22 corrections for python2.3 compatibility:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4255
diff changeset
1230 d = sum ([len(x) for x in exp]) - lensum
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1231 assert (d > 0)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1232 for p in propnames:
5525
bb7865241f8a Make CSV import/export compatible across Python versions (also RDBMS journals) (issue 2550976, issue 2550975).
Joseph Myers <jsm@polyomino.org.uk>
parents: 5459
diff changeset
1233 ll = len(repr_export(node[p])) + d
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1234 if ll > max_len:
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1235 max_len = ll
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1236 writer.writerow(exp)
3670
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1237 if export_files and hasattr(cl, 'export_files'):
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1238 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
1239
800b5896e14a fixed rdbms export - getnodeids in particular with NULL values
Richard Jones <richard@users.sourceforge.net>
parents: 1530
diff changeset
1240 # close this file
800b5896e14a fixed rdbms export - getnodeids in particular with NULL values
Richard Jones <richard@users.sourceforge.net>
parents: 1530
diff changeset
1241 f.close()
3670
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1242
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1243 # export the journals
5459
52ff4c59fb05 export csv as text file
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5455
diff changeset
1244 jf = open(os.path.join(dir, classname+'-journals.csv'), 'w')
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1245 if self.verbose:
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1246 sys.stdout.write("\nExporting Journal for %s\n" % classname)
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1247 sys.stdout.flush()
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1248 journals = csv.writer(jf, colon_separated)
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1249 for row in cl.export_journals():
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1250 journals.writerow(row)
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1251 jf.close()
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1252 if max_len > self.db.config.CSV_FIELD_SIZE:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1253 print("Warning: config csv_field_size should be at least %s"%max_len, file=sys.stderr)
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1254 return 0
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1255
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1256 def do_exporttables(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1257 ''"""Usage: exporttables [[-]class[,class]] export_dir
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1258 Export the database to colon-separated-value files, excluding the
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1259 files below $TRACKER_HOME/db/files/ (which can be archived separately).
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1260 To include the files, use the export command.
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1261
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1262 Optionally limit the export to just the named classes
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1263 or exclude the named classes, if the 1st argument starts with '-'.
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1264
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1265 This action exports the current data from the database into
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1266 colon-separated-value files that are placed in the nominated
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1267 destination directory.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1268 """
3670
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1269 return self.do_export(args, export_files=False)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1270
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1271 def do_import(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1272 ''"""Usage: import import_dir
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
1273 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
1274 two per class to import.
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1275
2215
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1276 The files used in the import are:
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1277
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1278 <class>.csv
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1279 This must define the same properties as the class (including
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1280 having a "header" line with those property names.)
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1281 <class>-journals.csv
19d1cd9ab09b more doc
Richard Jones <richard@users.sourceforge.net>
parents: 2186
diff changeset
1282 This defines the journals for the items being imported.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1283
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1284 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
1285 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
1286
1103
db787cef1385 handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents: 1098
diff changeset
1287 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
1288 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
1289 database (or, tediously, retire all the old data.)
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1290 """
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1291 if len(args) < 1:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1292 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1293 from roundup import hyperdb
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1294
4255
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1295 if hasattr (csv, 'field_size_limit'):
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1296 csv.field_size_limit(self.db.config.CSV_FIELD_SIZE)
88af08f8666f New config option csv_field_size:
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 4089
diff changeset
1297
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1298 # directory to import from
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1299 dir = args[0]
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1300
3179
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
1301 class colon_separated(csv.excel):
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
1302 delimiter = ':'
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
1303
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1304 # import all the files
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1305 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
1306 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
1307 # 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
1308 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
1309 continue
a1e0d17ca12c only look for csv files on import
Richard Jones <richard@users.sourceforge.net>
parents: 1519
diff changeset
1310
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1311 cl = self.get_class(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1312
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1313 # ensure that the properties and the CSV file headings match
3287
7a7f7d3a038d merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3284
diff changeset
1314 f = open(os.path.join(dir, file), 'r')
3214
29bde1f0d364 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3197
diff changeset
1315 reader = csv.reader(f, colon_separated)
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1316 file_props = None
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1317 maxid = 1
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1318 # loop through the file and create a node for each entry
3544
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3433
diff changeset
1319 for n, r in enumerate(reader):
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1320 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
1321 file_props = r
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1322 continue
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1323
3641
ba06fb4030d0 Spacing and CHANGES.txt fixed.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3640
diff changeset
1324 if self.verbose:
3803
c54ae50f6ce1 Error message fixes.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3671
diff changeset
1325 sys.stdout.write('\rImporting %s - %s'%(classname, n))
3637
31c79e3aa600 Fix verbose option for roundup-admin (for import and export)
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3602
diff changeset
1326 sys.stdout.flush()
3544
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3433
diff changeset
1327
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1328 # do the import and figure the current highest nodeid
3670
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1329 nodeid = cl.import_list(file_props, r)
2496
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1330 if hasattr(cl, 'import_files'):
Richard Jones <richard@users.sourceforge.net>
parents: 2494
diff changeset
1331 cl.import_files(dir, nodeid)
3670
64f0b85ea603 fix importing into anydbm backend [SF#1512939]
Richard Jones <richard@users.sourceforge.net>
parents: 3669
diff changeset
1332 maxid = max(maxid, int(nodeid))
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1333
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1334 # (print to sys.stdout here to allow tests to squash it .. ugh)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1335 print(file=sys.stdout)
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1336
2175
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1337 f.close()
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1338
723098a10677 Export and import now include journals (incompatible with export < 0.7)
Richard Jones <richard@users.sourceforge.net>
parents: 2093
diff changeset
1339 # import the journals
3317
032ff189ba33 use binary mode for csv export [SF#1195742];
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3314
diff changeset
1340 f = open(os.path.join(args[0], classname + '-journals.csv'), 'r')
3214
29bde1f0d364 merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3197
diff changeset
1341 reader = csv.reader(f, 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
1342 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
1343 f.close()
952
f615fbd02c18 full database export and import is done
Richard Jones <richard@users.sourceforge.net>
parents: 939
diff changeset
1344
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1345 # (print to sys.stdout here to allow tests to squash it .. ugh)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1346 print('setting', classname, maxid+1, file=sys.stdout)
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1347
1767
fdaa0b751355 python2.3 CSV support, also missing thankyou in index.txt :)
Richard Jones <richard@users.sourceforge.net>
parents: 1751
diff changeset
1348 # 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
1349 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
1350
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
1351 self.db_uncommitted = True
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1352 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1353
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1354 def do_pack(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1355 ''"""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
1356
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1357 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
1358 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
1359
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1360 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
1361 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
1362
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1363 "3y" means three years
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1364 "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
1365 "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
1366 "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
1367
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1368 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
1369 2001-01-01
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1370
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1371 """
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1372 if len(args) != 1:
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1373 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
1374
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1375 # 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
1376 value = args[0]
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1377 date_re = re.compile(r"""
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1378 (?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
1379 (?P<period>(\d+y\s*)?(\d+m\s*)?(\d+d\s*)?)?
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1380 """, re.VERBOSE)
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1381 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
1382 if not m:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1383 raise ValueError(_('Invalid format'))
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1384 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
1385 if m['period']:
861
68cef2bb929d fixed the date module so that Date(". - 2d") works
Richard Jones <richard@users.sourceforge.net>
parents: 826
diff changeset
1386 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
1387 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
1388 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
1389 self.db.pack(pack_before)
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
1390 self.db_uncommitted = True
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1391 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
1392
2650
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1393 def do_reindex(self, args, desre=re.compile('([A-Za-z]+)([0-9]+)')):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1394 ''"""Usage: reindex [classname|designator]*
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1395 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
1396
2787
dea26f113e6f do_reindex help string reformatted to reuse existing translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2785
diff changeset
1397 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
1398 This will typically happen automatically.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1399 """
2650
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1400 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
1401 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
1402 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
1403 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
1404 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
1405 try:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1406 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
1407 except IndexError:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1408 raise UsageError(_('no such item "%(designator)s"')%{
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1409 'designator': arg})
2650
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1410 else:
d68a444fcce3 roundup-admin reindex command may now work on single items or classes
Richard Jones <richard@users.sourceforge.net>
parents: 2633
diff changeset
1411 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
1412 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
1413 else:
3544
5cd1c83dea50 Features and fixes.
Richard Jones <richard@users.sourceforge.net>
parents: 3433
diff changeset
1414 self.db.reindex(show_progress=True)
826
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1415 return 0
6d7a45c8464a Added reindex command to roundup-admin.
Richard Jones <richard@users.sourceforge.net>
parents: 773
diff changeset
1416
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1417 def do_security(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1418 ''"""Usage: security [Role name]
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1419 Display the Permissions available to one or all Roles.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1420 """
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1421 if len(args) == 1:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1422 role = args[0]
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1423 try:
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1424 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
1425 except KeyError:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1426 sys.stdout.write( _('No such Role "%(role)s"\n')%locals() )
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1427 return 1
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1428 else:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1429 roles = list(self.db.security.role.items())
929
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1430 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
1431 if ',' in role:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1432 sys.stdout.write( _('New Web users get the Roles "%(role)s"\n')%locals() )
929
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1433 else:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1434 sys.stdout.write( _('New Web users get the Role "%(role)s"\n')%locals() )
929
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1435 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
1436 if ',' in role:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1437 sys.stdout.write( _('New Email users get the Roles "%(role)s"\n')%locals() )
929
f3e978888cb8 include info about new user roles
Richard Jones <richard@users.sourceforge.net>
parents: 928
diff changeset
1438 else:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1439 sys.stdout.write( _('New Email users get the Role "%(role)s"\n')%locals() )
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1440 roles.sort()
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1441 for rolename, role in roles:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1442 sys.stdout.write( _('Role "%(name)s":\n')%role.__dict__ )
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1443 for permission in role.permissions:
3359
cf9149fd3c6d have 'roundup-admin security' display property restrictions [SF#1222135]
Richard Jones <richard@users.sourceforge.net>
parents: 3317
diff changeset
1444 d = permission.__dict__
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1445 if permission.klass:
3359
cf9149fd3c6d have 'roundup-admin security' display property restrictions [SF#1222135]
Richard Jones <richard@users.sourceforge.net>
parents: 3317
diff changeset
1446 if permission.properties:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1447 sys.stdout.write( _(' %(description)s (%(name)s for "%(klass)s"' +
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1448 ': %(properties)s only)\n')%d )
5897
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1449 # verify that properties exist; report bad props
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1450 bad_props=[]
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1451 cl = self.db.getclass(permission.klass)
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1452 class_props = cl.getprops(protected=True)
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1453 for p in permission.properties:
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1454 if p in class_props:
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1455 continue
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1456 else:
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1457 bad_props.append(p)
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1458 if bad_props:
d0aebd4aec72 Provide a method for identifying invalid properties in permissions
John Rouillard <rouilj@ieee.org>
parents: 5762
diff changeset
1459 sys.stdout.write( _('\n **Invalid properties for %(class)s: %(props)s\n\n') % { "class": permission.klass, "props": bad_props })
3359
cf9149fd3c6d have 'roundup-admin security' display property restrictions [SF#1222135]
Richard Jones <richard@users.sourceforge.net>
parents: 3317
diff changeset
1460 else:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1461 sys.stdout.write( _(' %(description)s (%(name)s for "%(klass)s" ' +
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1462 'only)\n')%d )
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1463 else:
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
1464 sys.stdout.write( _(' %(description)s (%(name)s)\n')%d )
928
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1465 return 0
23c9d4f86380 Added the web access and email access permissions..
Richard Jones <richard@users.sourceforge.net>
parents: 902
diff changeset
1466
3963
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1467
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1468 def do_migrate(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1469 ''"""Usage: migrate
3963
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1470 Update a tracker's database to be compatible with the Roundup
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1471 codebase.
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1472
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1473 You should run the "migrate" command for your tracker once you've
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1474 installed the latest codebase.
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1475
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1476 Do this before you use the web, command-line or mail interface and
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1477 before any users access the tracker.
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1478
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1479 This command will respond with either "Tracker updated" (if you've
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1480 not previously run it on an RDBMS backend) or "No migration action
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1481 required" (if you have run it, or have used another interface to the
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1482 tracker, or possibly because you are using anydbm).
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1483
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1484 It's safe to run this even if it's not required, so just get into
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1485 the habit.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1486 """
3963
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1487 if getattr(self.db, 'db_version_updated'):
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1488 print(_('Tracker updated'))
3963
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1489 self.db_uncommitted = True
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1490 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1491 print(_('No migration action required'))
3963
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1492 return 0
3230f9c88086 Fix race condition for key properties in rdbms backends [SF#1876683]
Richard Jones <richard@users.sourceforge.net>
parents: 3923
diff changeset
1493
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1494 def run_command(self, args):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1495 """Run a single command
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1496 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1497 command = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1498
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1499 # handle help now
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1500 if command == 'help':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1501 if len(args)>1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1502 self.do_help(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1503 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1504 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1505 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1506 if command == 'morehelp':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1507 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1508 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1509 self.help_all()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1510 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1511
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1512 # figure what the command is
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1513 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1514 functions = self.commands.get(command)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1515 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1516 # not a valid command
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1517 print(_('Unknown command "%(command)s" ("help commands" for a '
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1518 'list)')%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1519 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1520
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1521 # check for multiple matches
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1522 if len(functions) > 1:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1523 print(_('Multiple commands match "%(command)s": %(list)s')%{'command':
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1524 command, 'list': ', '.join([i[0] for i in functions])})
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1525 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1526 command, function = functions[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1527
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1528 # make sure we have a tracker_home
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1529 while not self.tracker_home:
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1530 if not self.force:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1531 self.tracker_home = my_input(_('Enter tracker home: ')).strip()
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1532 else:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
1533 self.tracker_home = os.curdir
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1534
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1535 # 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
1536 if command == 'initialise':
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1537 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1538 return self.do_initialise(self.tracker_home, args)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1539 except UsageError as message:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1540 print(_('Error: %(message)s')%locals())
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
1541 return 1
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1542 elif command == 'install':
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1543 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1544 return self.do_install(self.tracker_home, args)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1545 except UsageError as message:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1546 print(_('Error: %(message)s')%locals())
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
1547 return 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1548
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1549 # get the tracker
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1550 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1551 tracker = roundup.instance.open(self.tracker_home)
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1552 except ValueError as message:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1553 self.tracker_home = ''
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1554 print(_("Error: Couldn't open tracker: %(message)s")%locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1555 return 1
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1556 except NoConfigError as message:
5230
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
1557 self.tracker_home = ''
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1558 print(_("Error: Couldn't open tracker: %(message)s")%locals())
5230
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
1559 return 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1560
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1561 # only open the database once!
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1562 if not self.db:
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1563 self.db = tracker.open(self.name)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1564
4781
6e9b9743de89 Implementation for:
John Rouillard <rouilj@ieee.org>
parents: 4486
diff changeset
1565 self.db.tx_Source = 'cli'
6e9b9743de89 Implementation for:
John Rouillard <rouilj@ieee.org>
parents: 4486
diff changeset
1566
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1567 # do the command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1568 ret = 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1569 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1570 ret = function(args[1:])
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1571 except UsageError as message:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1572 print(_('Error: %(message)s')%locals())
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1573 print()
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1574 print(function.__doc__)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1575 ret = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1576 except:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1577 import traceback
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1578 traceback.print_exc()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1579 ret = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1580 return ret
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1581
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1582 def interactive(self):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1583 """Run in an interactive mode
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1584 """
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1585 print(_('Roundup %s ready for input.\nType "help" for help.'
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1586 % roundup_version))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1587 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1588 import readline
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1589 except ImportError:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1590 print(_('Note: command history and editing not available'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1591
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1592 while 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1593 try:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1594 command = my_input(_('roundup> '))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1595 except EOFError:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1596 print(_('exit...'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1597 break
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1598 if not command: continue
5245
bc16d91b7a50 Fix token_split() so its one error throws ValueError w/out extra arg.
Eric S. Raymond <esr@thyrsus.com>
parents: 5232
diff changeset
1599 try:
bc16d91b7a50 Fix token_split() so its one error throws ValueError w/out extra arg.
Eric S. Raymond <esr@thyrsus.com>
parents: 5232
diff changeset
1600 args = token.token_split(command)
bc16d91b7a50 Fix token_split() so its one error throws ValueError w/out extra arg.
Eric S. Raymond <esr@thyrsus.com>
parents: 5232
diff changeset
1601 except ValueError:
bc16d91b7a50 Fix token_split() so its one error throws ValueError w/out extra arg.
Eric S. Raymond <esr@thyrsus.com>
parents: 5232
diff changeset
1602 continue # Ignore invalid quoted token
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1603 if not args: continue
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1604 if args[0] in ('quit', 'exit'): break
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1605 self.run_command(args)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1606
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1607 # exit.. check for transactions
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
1608 if self.db and self.db_uncommitted:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1609 commit = my_input(_('There are unsaved changes. Commit them (y/N)? '))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1610 if commit and commit[0].lower() == 'y':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1611 self.db.commit()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1612 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1613
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1614 def main(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1615 try:
3637
31c79e3aa600 Fix verbose option for roundup-admin (for import and export)
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents: 3602
diff changeset
1616 opts, args = getopt.getopt(sys.argv[1:], 'i:u:hcdsS:vV')
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
1617 except getopt.GetoptError as e:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1618 self.usage(str(e))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1619 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1620
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1621 # handle command-line args
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1622 self.tracker_home = os.environ.get('TRACKER_HOME', '')
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1623 self.name = 'admin'
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1624 self.password = '' # unused
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1625 if 'ROUNDUP_LOGIN' in os.environ:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1626 l = os.environ['ROUNDUP_LOGIN'].split(':')
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1627 self.name = l[0]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1628 if len(l) > 1:
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1629 self.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
1630 self.separator = None
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1631 self.print_designator = 0
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1632 self.verbose = 0
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1633 for opt, arg in opts:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1634 if opt == '-h':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1635 self.usage()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1636 return 0
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1637 elif opt == '-v':
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1638 print('%s (python %s)'%(roundup_version, sys.version.split()[0]))
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2184
diff changeset
1639 return 0
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1640 elif opt == '-V':
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1641 self.verbose = 1
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1642 elif opt == '-i':
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
1643 self.tracker_home = arg
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1644 elif opt == '-c':
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1645 if self.separator != None:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1646 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
1647 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1648 self.separator = ','
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1649 elif opt == '-S':
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1650 if self.separator != None:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1651 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
1652 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1653 self.separator = arg
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1654 elif opt == '-s':
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1655 if self.separator != None:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1656 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
1657 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1658 self.separator = ' '
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
1659 elif opt == '-d':
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1660 self.print_designator = 1
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1661 elif opt == '-u':
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1662 l = arg.split(':')
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1663 self.name = l[0]
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1664 if len(l) > 1:
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
1665 self.password = l[1]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1666
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1667 # if no command - go interactive
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1668 # 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
1669 ret = 0
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1670 try:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1671 if not args:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1672 self.interactive()
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1673 else:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1674 ret = self.run_command(args)
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1675 if self.db: self.db.commit()
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1676 return ret
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1677 finally:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1678 if self.db:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
1679 self.db.close()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1680
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1681 if __name__ == '__main__':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1682 tool = AdminTool()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1683 sys.exit(tool.main())
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1684
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
1685 # vim: set filetype=python sts=4 sw=4 et si :

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