annotate roundup/admin.py @ 7650:4de48eadf5f4

bug: Fix roundup-admin security command. Lowercase optionalarg. Roles are indexed by lower case role name. So 'security User' and 'security user' should generate the same output. Also add testing for this case. Thread: https://sourceforge.net/p/roundup/mailman/roundup-users/thread/CAH-41398iTPhze7D_pZB8tqTBHF%3Dq6HYonbcG%2B%2BYN-ioDssXBw%40mail.gmail.com/#msg41557225 starting from: https://sourceforge.net/p/roundup/mailman/message/41557225/
author John Rouillard <rouilj@ieee.org>
date Fri, 06 Oct 2023 09:53:22 -0400
parents 8329b2227adb
children 5b41018617f2
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
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
26 import csv
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
27 import getopt
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
28 import getpass
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
29 import operator
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
30 import os
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
31 import re
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
32 import shutil
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
33 import sys
3197
6d0b5937ee0d fix: module csv is in standard library, not in roundup package;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 3179
diff changeset
34
7178
db06d4aeb978 unshadow stdlib token from roundup's token.
John Rouillard <rouilj@ieee.org>
parents: 7093
diff changeset
35 from roundup import date, hyperdb, init, password, token_r
773
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 763
diff changeset
36 from roundup import __version__ as roundup_version
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
37 import roundup.instance
7076
d3d20e145cea bug: cleaner error message on OptionUnsetError in initialize
John Rouillard <rouilj@ieee.org>
parents: 6959
diff changeset
38 from roundup.configuration import (CoreConfig, NoConfigError, OptionUnsetError,
7427
36916abe36e9 Handle traceback when OptionValueError raised during init.
John Rouillard <rouilj@ieee.org>
parents: 7397
diff changeset
39 OptionValueError, ParsingOptionError, UserConfig)
6658
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6585
diff changeset
40 from roundup.i18n import _, get_translation
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
41 from roundup.exceptions import UsageError
5401
4cf48ff01e04 Python 3 preparation: replace raw_input uses.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5250
diff changeset
42 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
43 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
44
5455
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
45 try:
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
46 from UserDict import UserDict
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
47 except ImportError:
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
48 from collections import UserDict
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
49
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
50
5455
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
51 class CommandDict(UserDict):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
52 """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
53
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
54 Original code submitted by Engelbert Gruber.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
55 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
56 _marker = []
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
57
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
58 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
59 if key in self.data:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
60 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
61 keylist = sorted(self.data)
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
62 matching_keys = []
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
63 for ki in keylist:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
64 if ki.startswith(key):
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
65 matching_keys.append((ki, self.data[ki]))
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
66 if not matching_keys 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
67 raise KeyError(key)
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
68 # FIXME: what happens if default is not self._marker but
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
69 # there are no matching keys? Should (default, self.data[default])
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
70 # be returned???
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
71 return matching_keys
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
72
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
73
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 class AdminTool:
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
75 """ A collection of methods used in maintaining Roundup trackers.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
76
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
77 Typically these methods are accessed through the roundup-admin
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
78 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
79 loop for the roundup-admin script.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
80
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
81 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
82 given in the method docstring.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
83
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
84 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
85 """
7182
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
86
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
87 # Make my_input a property to allow overriding in testing.
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
88 # my_input is imported in other places, so just set it from
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
89 # the imported value rather than moving def here.
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
90 my_input = my_input
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
91
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92 def __init__(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
93 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
94 for k in AdminTool.__dict__:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
95 if k[:3] == 'do_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96 self.commands[k[3:]] = getattr(self, k)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
97 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
98 for k in AdminTool.__dict__:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
99 if k[:5] == 'help_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
100 self.help[k[5:]] = getattr(self, k)
7253
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
101 self.tracker = None
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
102 self.tracker_home = ''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
103 self.db = None
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
104 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
105 self.force = None
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
106 self.settings = {
7549
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
107 'display_header': False,
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
108 'display_protected': False,
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
109 'indexer_backend': "as set in config.ini",
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
110 '_reopen_tracker': False,
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
111 'show_retired': "no",
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
112 '_retired_val': False,
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
113 'verbose': False,
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
114 '_inttest': 3,
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
115 '_floattest': 3.5,
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
116 }
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
117 self.settings_help = {
7549
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
118 'display_header':
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
119 _("Have 'display designator[,designator*]' show header inside "
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
120 " []'s before items. Includes retired/active status."),
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
121
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
122 'display_protected':
7545
939fcfdfa370 update help text on display_protected pragma
John Rouillard <rouilj@ieee.org>
parents: 7544
diff changeset
123 _("Have 'display designator' and 'specification class' show "
939fcfdfa370 update help text on display_protected pragma
John Rouillard <rouilj@ieee.org>
parents: 7544
diff changeset
124 "protected fields: creator, id etc."),
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
125
7300
57f34b0b912c flake8 fixes
John Rouillard <rouilj@ieee.org>
parents: 7253
diff changeset
126 'indexer_backend':
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
127 _("Set indexer to use when running 'reindex' NYI"),
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
128
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
129 '_reopen_tracker':
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
130 _("Force reopening of tracker when running each command."),
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
131
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
132 'show_retired': _("Show retired items in table, list etc. One of 'no', 'only', 'both'"),
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
133 '_retired_val': _("internal mapping for show_retired."),
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
134 'verbose': _("Enable verbose output: tracing, descriptions..."),
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
135
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
136 '_inttest': "Integer valued setting. For testing only.",
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
137 '_floattest': "Float valued setting. For testing only.",
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
138 }
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
139
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
140 def get_class(self, classname):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
141 """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
142 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
143 try:
489
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
144 return self.db.getclass(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
145 except KeyError:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
146 raise UsageError(_('no such class "%(classname)s"') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
147
649
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
148 def props_from_args(self, args):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
149 """ 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
150
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
151 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
152 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
153 props = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
154 for arg in args:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
155 key_val = arg.split('=', 1)
6187
cc66cf905147 Removed redundant code; fix help text for do_security
John Rouillard <rouilj@ieee.org>
parents: 6180
diff changeset
156 # if = not in string, will return one element
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
157 if len(key_val) < 2:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
158 raise UsageError(_('argument "%(arg)s" not propname=value') %
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
159 locals())
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
160 key, value = key_val
1108
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
161 if value:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
162 props[key] = value
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
163 else:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
164 props[key] = None
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
165 return props
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
166
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
167 def usage(self, message=''):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
168 """ Display a simple usage message.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
169 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
170 if message:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
171 message = _('Problem: %(message)s\n\n') % locals()
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
172 sys.stdout.write(_("""%(message)sUsage: roundup-admin [options] [<command> <arguments>]
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
173
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
174 Options:
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
175 -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
176 -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
177 -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
178 -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
179 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
180 -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
181 -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
182 Same as '-S " "'.
7546
534f8bdb8f94 Add -P pragma=value command line option to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7545
diff changeset
183 -P pragma=value -- Set a pragma on command line rather than interactively.
534f8bdb8f94 Add -P pragma=value command line option to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7545
diff changeset
184 Can be used multiple times.
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
185 -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
186 -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
187
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
188 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
189
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
190 Help:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 roundup-admin -h
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
192 roundup-admin help -- this help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 roundup-admin help <command> -- command-specific help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
194 roundup-admin help all -- all available help
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
195 """) % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
196 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
197
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
198 def help_commands(self):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
199 """List the commands available with their help summary.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
200 """
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
201 sys.stdout.write(_('Commands: '))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 commands = ['']
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
203 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
204 h = _(command.__doc__).split('\n')[0]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
205 commands.append(' '+h[7:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
206 commands.sort()
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
207 commands.append(_(
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
208 """Commands may be abbreviated as long as the abbreviation
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
209 matches only one command, e.g. l == li == lis == list.""")) # noqa: E122
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
210 sys.stdout.write('\n'.join(commands) + '\n\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
211
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
212 indent_re = re.compile(r'^(\s+)\S+')
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
213
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
214 def help_commands_html(self, indent_re=indent_re):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
215 """ Produce an HTML command list.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
216 """
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
217 commands = sorted(iter(self.commands.values()),
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
218 key=operator.attrgetter('__name__'))
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
219 for command in commands:
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
220 h = _(command.__doc__).split('\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
221 name = command.__name__[3:]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
222 usage = h[0]
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
223 print("""
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
224 <tr><td valign=top><strong>%(name)s</strong></td>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
225 <td><tt>%(usage)s</tt><p>
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
226 <pre>""" % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
227 indent = indent_re.match(h[3])
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
228 if indent: indent = len(indent.group(1)) # noqa: E701
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
229 for line in h[3:]:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
230 if indent:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
231 print(line[indent:])
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
232 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
233 print(line)
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
234 print('</pre></td></tr>\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
235
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
236 def help_all(self):
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
237 print(_("""
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
238 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
239 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
240 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
241 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
242 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
243 or on the command line as "-i tracker".
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
244
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 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
246
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 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
248 printed results:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
249 . Strings are, well, strings.
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
250 . 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
251 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
252 below.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
253 . 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
254 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
255 . 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
256 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
257 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
258 of nodes joined by commas is accepted.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
259
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
260 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
261 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
262 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
263 quotes. Examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
264 hello world (2 tokens: hello, world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265 "hello world" (1 token: hello world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
266 "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
267 Roch\\'e Compaan (2 tokens: Roch'e Compaan)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
268 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
269 \\\\ (1 token: \\)
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
270 \\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
271
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
272 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
273 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
274 nodes.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
275
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
276 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
277 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
278 the -c) option.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
279
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
280 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
281 login may be specified as either "name" or "name:password".
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
282 . ROUNDUP_LOGIN environment variable
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
283 . the -u command-line option
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
284 If either the name or password is not supplied, they are obtained from the
7093
f72ce883e677 Mitigation for issue2551246 -u opton to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7078
diff changeset
285 command-line. (See admin guide before using -u.)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
286
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
287 Date format examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
288 "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
289 "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
290 "01-25" means <Date yyyy-01-25.00:00:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
291 "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
292 "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
293 "14:25" means <Date yyyy-mm-dd.19:25:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
294 "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
295 "." means "right now"
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
296
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
297 Command help:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
298 """))
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
299 for name, command in list(self.commands.items()):
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
300 print(_('%s:') % name)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
301 print(' ', _(command.__doc__))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
302
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
303 nl_re = re.compile('[\r\n]')
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
304 # indent_re defined above
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
305
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
306 def listTemplates(self, trace_search=False):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
307 """ List all the available templates.
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
308
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
309 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
310
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
311 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
312 this is where they will be if we installed an egg via easy_install
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
313 or we are in the source tree.
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
314 2. <prefix>/share/roundup/templates/*
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
315 this should be the standard place to find them when Roundup is
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
316 installed using setup.py without a prefix
6527
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
317 3. <roundup.admin.__file__>/../../<sys.prefix>/share/\
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
318 roundup/templates/* which is where they will be found if
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
319 roundup is installed as a wheel using pip install
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
320 4. <current working dir>/*
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
321 this is for when someone unpacks a 3rd-party template
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
322 5. <current working dir>
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
323 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
324 """
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
325 # 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
326 # and <egg-directory>/share/roundup/templates
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
327 # -- 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
328 # like:
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
329 # /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
330 # 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
331 # /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
332 # (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
333 #
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
334 # we're interested in where the directory containing "share" is
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
335 debug = False
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
336 templates = {}
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
337 if debug: print(__file__) # noqa: E701
4900
349a83aca61f Correctly locate templates in a virtualenv (issue2550841)
John Kristensen <john@jerrykan.com>
parents: 4781
diff changeset
338 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
339 path = __file__
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
340 # move up N elements in the path
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
341 for _i in range(N):
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
342 path = os.path.dirname(path)
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
343 tdir = os.path.join(path, 'share', 'roundup', 'templates')
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
344 if debug or trace_search: print(tdir) # noqa: E701
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
345 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
346 templates = init.listTemplates(tdir)
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
347 if debug: print(" Found templates breaking loop") # noqa: E701
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
348 break
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
349
6524
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
350 # search for data files parallel to the roundup
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
351 # install dir. E.G. a wheel install
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
352 # use roundup.__path__ and go up a level then use sys.prefix
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
353 # to create a base path for searching.
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
354
6527
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
355 import sys
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
356 # __file__ should be something like:
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
357 # /usr/local/lib/python3.10/site-packages/roundup/admin.py
6524
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
358 # os.prefix should be /usr, /usr/local or root of virtualenv
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
359 # strip leading / to make os.path.join work right.
6527
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
360 path = __file__
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
361 for _N in 1, 2:
6527
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
362 path = os.path.dirname(path)
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
363 # path is /usr/local/lib/python3.10/site-packages
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
364 tdir = os.path.join(path, sys.prefix[1:], 'share',
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
365 'roundup', 'templates')
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
366 if debug or trace_search: print(tdir) # noqa: E701
6524
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
367 if os.path.isdir(tdir):
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
368 templates.update(init.listTemplates(tdir))
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
369
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
370 try:
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
371 # sigh pip 3.10 in virtual env finds another place to bury them.
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
372 # why local and sys.base_prefix are in path I do not know.
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
373 # path is /usr/local/lib/python3.10/site-packages
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
374 tdir = os.path.join(path, sys.base_prefix[1:], 'local', 'share',
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
375 'roundup', 'templates')
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
376 if debug or trace_search: print(tdir) # noqa: E701
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
377 if os.path.isdir(tdir):
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
378 templates.update(init.listTemplates(tdir))
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
379 # path is /usr/local/lib/python3.10/site-packages
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
380
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
381 tdir = os.path.join(path, sys.base_prefix[1:], 'share',
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
382 'roundup', 'templates')
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
383 if debug or trace_search: print(tdir) # noqa: E701
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
384 if os.path.isdir(tdir):
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
385 templates.update(init.listTemplates(tdir))
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
386 except AttributeError:
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
387 pass # sys.base_prefix doesn't work under python2
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
388
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
389 # 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
390 templates.update(init.listTemplates(os.getcwd()))
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
391 if debug or trace_search: print(os.getcwd() + '/*') # noqa: E701
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
392
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
393 # 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
394 template = init.loadTemplateInfo(os.getcwd())
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
395 if debug or trace_search: print(os.getcwd()) # noqa: E701
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
396 if template:
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
397 if debug: print(" Found template %s" % # noqa: E701
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
398 template['name'])
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
399 templates[template['name']] = template
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
400
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
401 return templates
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
402
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
403 def help_initopts(self):
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
404 templates = self.listTemplates()
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
405 print(_('Templates:'), ', '.join(templates))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
406 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
407 backends = roundup.backends.list_backends()
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
408 print(_('Back ends:'), ', '.join(backends))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
409
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
410 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
411 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
412 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
413 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
414 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
415 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
416 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
417 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
418 while argument not in options:
7182
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
419 argument = self.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
420 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
421 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
422 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
423
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
424 def do_commit(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
425 ''"""Usage: commit
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
426 Commit changes made to the database during an interactive session.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
427
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
428 The changes made during an interactive session are not
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
429 automatically written to the database - they must be committed
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
430 using this command.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
431
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
432 One-off commands on the command-line are automatically committed if
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
433 they are successful.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
434 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
435 self.db.commit()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
436 self.db_uncommitted = False
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
437 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
438
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
439 def do_create(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
440 ''"""Usage: create classname property=value ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
441 Create a new entry of a given class.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
442
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
443 This creates a new entry of the given class using the property
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
444 name=value arguments provided on the command line after the "create"
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
445 command.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
446 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
447 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
448 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
449 from roundup import hyperdb
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
450
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
451 classname = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
452
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
453 # get the class
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
454 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
455
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
456 # now do a create
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
457 props = {}
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
458 properties = cl.getprops(protected=0)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
459 if len(args) == 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
460 # ask for the properties
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
461 for key in properties:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
462 if key == 'id': continue # noqa: E701
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
463 value = properties[key]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
464 name = value.__class__.__name__
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
465 if isinstance(value, hyperdb.Password):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
466 again = None
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
467 while value != again:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
468 value = getpass.getpass(_('%(propname)s (Password): ')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
469 %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
470 {'propname': key.capitalize()})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
471 again = getpass.getpass(_(' %(propname)s (Again): ')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
472 %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
473 {'propname': key.capitalize()})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
474 if value != again:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
475 print(_('Sorry, try again...'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
476 if value:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
477 props[key] = value
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
478 else:
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
479 value = self.my_input(_(
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
480 '%(propname)s (%(proptype)s): ') % {
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
481 'propname': key.capitalize(), 'proptype': name})
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
482 if value:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
483 props[key] = value
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
484 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
485 props = self.props_from_args(args[1:])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
486
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
487 # convert types
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
488 for propname in props:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
489 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
490 props[propname] = hyperdb.rawToHyperdb(self.db, cl, None,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
491 propname,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
492 props[propname])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
493 except hyperdb.HyperdbValueError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
494 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
495
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
496 # check for the key property
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
497 propname = cl.getkey()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
498 if propname and propname not in props:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
499 raise UsageError(_('you must provide the "%(propname)s" '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
500 'property.') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
501
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
502 # do the actual create
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
503 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
504 sys.stdout.write(cl.create(**props) + '\n')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
505 except (TypeError, IndexError, ValueError) as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
506 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
507 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
508 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
509
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
510 def do_display(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
511 ''"""Usage: display designator[,designator]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
512
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
513 Show the property values for the given node(s).
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
514
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
515 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
516 eg. bug1, user10, ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
517
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
518 This lists the properties and their associated values
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
519 for the given node.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
520 """
2889
accb3b411ef6 instructions and method for generating config.ini
Richard Jones <richard@users.sourceforge.net>
parents: 2856
diff changeset
521 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
522 raise UsageError(_('Not enough arguments supplied'))
7203
12a3cd86668f auto update 'password_pbkdf2_default_rounds' "
John Rouillard <rouilj@ieee.org>
parents: 7182
diff changeset
523
7588
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
524 display_protected = self.settings['display_protected']
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
525 display_header = self.settings['display_header']
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
526
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
527 # decode the node designator
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
528 for designator in args[0].split(','):
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
529 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
530 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
531 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
532 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
533
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
534 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
535 cl = self.get_class(classname)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
536
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
537 # display the values
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
538 normal_props = sorted(cl.properties)
7588
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
539 if display_protected:
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
540 keys = sorted(cl.getprops())
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
541 else:
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
542 keys = normal_props
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
543
7588
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
544 if display_header:
7549
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
545 status = "retired" if cl.is_retired(nodeid) else "active"
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
546 print('\n[%s (%s)]' % (designator, status))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
547 for key in keys:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
548 value = cl.get(nodeid, key)
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
549 # prepend * for protected properties else just indent
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
550 # with space.
7588
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
551 if display_protected or display_header:
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
552 protected = "*" if key not in normal_props else ' '
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
553 else:
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
554 protected = ""
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
555 print(_('%(protected)s%(key)s: %(value)s') % locals())
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
556
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
557 def do_export(self, args, export_files=True):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
558 ''"""Usage: export [[-]class[,class]] export_dir
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
559 Export the database to colon-separated-value files.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
560 To exclude the files (e.g. for the msg or file class),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
561 use the exporttables command.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
562
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
563 Optionally limit the export to just the named classes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
564 or exclude the named classes, if the 1st argument starts with '-'.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
565
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
566 This action exports the current data from the database into
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
567 colon-separated-value files that are placed in the nominated
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
568 destination directory.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
569 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
570 # grab the directory to export to
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
571 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
572 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
573
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
574 dir = args[-1]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
575
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
576 # get the list of classes to export
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
577 if len(args) == 2:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
578 if args[0].startswith('-'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
579 classes = [c for c in self.db.classes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
580 if c not in args[0][1:].split(',')]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
581 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
582 classes = args[0].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
583 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
584 classes = self.db.classes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
585
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
586 class colon_separated(csv.excel):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
587 delimiter = ':'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
588
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
589 # make sure target dir exists
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
590 if not os.path.exists(dir):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
591 os.makedirs(dir)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
592
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
593 # maximum csv field length exceeding configured size?
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
594 max_len = self.db.config.CSV_FIELD_SIZE
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
595
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
596 # do all the classes specified
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
597 for classname in classes:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
598 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
599
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
600 if not export_files and hasattr(cl, 'export_files'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
601 sys.stdout.write('Exporting %s WITHOUT the files\r\n' %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
602 classname)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
603
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
604 with open(os.path.join(dir, classname+'.csv'), 'w') as f:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
605 writer = csv.writer(f, colon_separated)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
606
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
607 propnames = cl.export_propnames()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
608 fields = propnames[:]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
609 fields.append('is retired')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
610 writer.writerow(fields)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
611
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
612 # If a node has a key, sort all nodes by key
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
613 # with retired nodes first. Retired nodes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
614 # must occur before a non-retired node with
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
615 # the same key. Otherwise you get an
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
616 # IntegrityError: UNIQUE constraint failed:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
617 # _class.__retired__, _<class>._<keyname>
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
618 # on imports to rdbms.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
619 all_nodes = cl.getnodeids()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
620
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
621 classkey = cl.getkey()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
622 if classkey: # False sorts before True, so negate is_retired
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
623 keysort = lambda i: (cl.get(i, classkey), # noqa: E731
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
624 not cl.is_retired(i))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
625 all_nodes.sort(key=keysort)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
626 # if there is no classkey no need to sort
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
627
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
628 for nodeid in all_nodes:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
629 if self.verbose:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
630 sys.stdout.write('\rExporting %s - %s' %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
631 (classname, nodeid))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
632 sys.stdout.flush()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
633 node = cl.getnode(nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
634 exp = cl.export_list(propnames, nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
635 lensum = sum([len(repr_export(node[p])) for
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
636 p in propnames])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
637 # for a safe upper bound of field length we add
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
638 # difference between CSV len and sum of all field lengths
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
639 d = sum([len(x) for x in exp]) - lensum
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
640 if not d > 0:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
641 raise AssertionError("Bad assertion d > 0")
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
642 for p in propnames:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
643 ll = len(repr_export(node[p])) + d
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
644 if ll > max_len:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
645 max_len = ll
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
646 writer.writerow(exp)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
647 if export_files and hasattr(cl, 'export_files'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
648 cl.export_files(dir, nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
649
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
650 # export the journals
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
651 with open(os.path.join(dir, classname+'-journals.csv'), 'w') as jf:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
652 if self.verbose:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
653 sys.stdout.write("\nExporting Journal for %s\n" %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
654 classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
655 sys.stdout.flush()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
656 journals = csv.writer(jf, colon_separated)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
657 for row in cl.export_journals():
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
658 journals.writerow(row)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
659 if max_len > self.db.config.CSV_FIELD_SIZE:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
660 print("Warning: config csv_field_size should be at least %s" %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
661 max_len, file=sys.stderr)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
662 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
663
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
664 def do_exporttables(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
665 ''"""Usage: exporttables [[-]class[,class]] export_dir
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
666 Export the database to colon-separated-value files, excluding the
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
667 files below $TRACKER_HOME/db/files/ (which can be archived separately).
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
668 To include the files, use the export command.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
669
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
670 Optionally limit the export to just the named classes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
671 or exclude the named classes, if the 1st argument starts with '-'.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
672
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
673 This action exports the current data from the database into
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
674 colon-separated-value files that are placed in the nominated
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
675 destination directory.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
676 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
677 return self.do_export(args, export_files=False)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
678
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
679 def do_filter(self, args):
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
680 ''"""Usage: filter classname propname=value ...
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
681 Find the nodes of the given class with a given property value.
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
682
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
683 Find the nodes of the given class with a given property value.
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
684 Multiple values can be specified by separating them with commas.
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
685 If property is a string, all values must match. I.E. it's an
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
686 'and' operation. If the property is a link/multilink any value
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
687 matches. I.E. an 'or' operation.
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
688 """
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
689 if len(args) < 1:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
690 raise UsageError(_('Not enough arguments supplied'))
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
691 classname = args[0]
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
692 # get the class
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
693 cl = self.get_class(classname)
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
694
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
695 # handle the propname=value argument
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
696 props = self.props_from_args(args[1:])
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
697
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
698 # convert the user-input value to a value used for filter
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
699 # multiple , separated values become a list
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
700 for propname, value in props.items():
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
701 if ',' in value:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
702 values = value.split(',')
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
703 else:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
704 values = [value]
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
705
6177
41907e1f9c3f Fix postgres/mysql testing; test filter.
John Rouillard <rouilj@ieee.org>
parents: 6176
diff changeset
706 props[propname] = []
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
707 # start handling transitive props
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
708 # given filter issue assignedto.roles=Admin
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
709 # start at issue
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
710 curclass = cl
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
711 lastprop = propname # handle case 'issue assignedto=admin'
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
712 if '.' in propname:
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
713 # start splitting transitive prop into components
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
714 # we end when we have no more links
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
715 for pn in propname.split('.'):
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
716 try:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
717 lastprop = pn # get current component
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
718 # get classname for this link
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
719 try:
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
720 curclassname = curclass.getprops()[pn].classname
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
721 except KeyError:
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
722 raise UsageError(_(
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
723 "Class %(curclassname)s has "
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
724 "no property %(pn)s in %(propname)s." %
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
725 locals()))
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
726 # get class object
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
727 curclass = self.get_class(curclassname)
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
728 except AttributeError:
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
729 # curclass.getprops()[pn].classname raises this
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
730 # when we are at a non link/multilink property
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
731 pass
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
732
6177
41907e1f9c3f Fix postgres/mysql testing; test filter.
John Rouillard <rouilj@ieee.org>
parents: 6176
diff changeset
733 for value in values:
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
734 val = hyperdb.rawToHyperdb(self.db, curclass, None,
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
735 lastprop, value)
6177
41907e1f9c3f Fix postgres/mysql testing; test filter.
John Rouillard <rouilj@ieee.org>
parents: 6176
diff changeset
736 props[propname].append(val)
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
737
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
738 # now do the filter
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
739 try:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
740 id = []
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
741 designator = []
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
742 props = {"filterspec": props}
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
743
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
744 if self.separator:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
745 if self.print_designator:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
746 id = cl.filter(None, **props)
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
747 for i in id:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
748 designator.append(classname + i)
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
749 print(self.separator.join(designator))
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
750 else:
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
751 print(self.separator.join(cl.filter(None, **props)))
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
752 else:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
753 if self.print_designator:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
754 id = cl.filter(None, **props)
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
755 for i in id:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
756 designator.append(classname + i)
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
757 print(designator)
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
758 else:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
759 print(cl.filter(None, **props))
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
760 except KeyError:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
761 raise UsageError(_('%(classname)s has no property '
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
762 '"%(propname)s"') % locals())
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
763 except (ValueError, TypeError) as message:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
764 raise UsageError(message)
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
765 return 0
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
766
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
767 def do_find(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
768 ''"""Usage: find classname propname=value ...
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
769 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
770
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
771 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
772 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
773 value.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
774 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
775 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
776 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
777 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
778 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
779 cl = self.get_class(classname)
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 # handle the propname=value argument
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
782 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
783
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
784 # 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
785 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
786 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
787 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
788 else:
2504
Richard Jones <richard@users.sourceforge.net>
parents: 2496
diff changeset
789 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
790 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
791 for value in values:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
792 value = hyperdb.rawToHyperdb(self.db, cl, None,
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
793 propname, value)
3314
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
794 if isinstance(value, list):
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
795 for entry in value:
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
796 d[entry] = 1
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
797 else:
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
798 d[value] = 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
799
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
800 # now do the find
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
801 try:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
802 id = []
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
803 designator = []
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
804 if self.separator:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
805 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
806 id = cl.find(**props)
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
807 for i in id:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
808 designator.append(classname + i)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
809 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
810 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
811 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
812
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
813 else:
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
814 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
815 id = cl.find(**props)
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
816 for i in id:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
817 designator.append(classname + i)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
818 print(designator)
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
819 else:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
820 print(cl.find(**props))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
821 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
822 raise UsageError(_('%(classname)s has no property '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
823 '"%(propname)s"') % locals())
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
824 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
825 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
826 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
827
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
828 def do_genconfig(self, args, update=False):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
829 ''"""Usage: genconfig <filename>
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
830 Generate a new tracker config file (ini style) with default
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
831 values in <filename>.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
832 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
833 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
834 raise UsageError(_('Not enough arguments supplied'))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
835
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
836 if update:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
837 # load current config for writing
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
838 config = CoreConfig(self.tracker_home)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
839
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
840 # change config to update settings to new defaults
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
841 # where prior defaults were chosen
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
842 default_ppdr = config._get_option(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
843 'PASSWORD_PBKDF2_DEFAULT_ROUNDS')._default_value
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
844
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
845 print("") # put a blank line before feedback
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
846 if config.PASSWORD_PBKDF2_DEFAULT_ROUNDS in [10000]:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
847 print(_("Changing option\n"
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
848 " 'password_pbkdf2_default_rounds'\n"
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
849 "from old default of %(old_number)s to new "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
850 "default of %(new_number)s.") % {
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
851 "old_number":
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
852 config.PASSWORD_PBKDF2_DEFAULT_ROUNDS,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
853 "new_number": default_ppdr
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
854 })
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
855 config.PASSWORD_PBKDF2_DEFAULT_ROUNDS = default_ppdr
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
856
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
857 if config.PASSWORD_PBKDF2_DEFAULT_ROUNDS < default_ppdr:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
858 print(_("Update "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
859 "'password_pbkdf2_default_rounds' "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
860 "to a number equal to or larger\nthan %s.") %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
861 default_ppdr)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
862 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
863 # generate default config
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
864 config = CoreConfig()
6191
5713ddd87fd3 Fix help text.
John Rouillard <rouilj@ieee.org>
parents: 6187
diff changeset
865
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
866 config.save(args[0])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
867
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
868 def do_get(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
869 ''"""Usage: get property designator[,designator]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
870 Get the given property of one or more designator(s).
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
871
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
872 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
873 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
874
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
875 Retrieves the property value of the nodes specified
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
876 by the designators.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
877 """
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
878 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
879 raise UsageError(_('Not enough arguments supplied'))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
880 propname = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
881 designators = args[1].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
882 linked_props = []
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
883 for designator in designators:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
884 # decode the node designator
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
885 try:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
886 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
887 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
888 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
889
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
890 # get the class
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
891 cl = self.get_class(classname)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
892 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
893 id = []
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
894 if self.separator:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
895 if self.print_designator:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
896 # see if property is a link or multilink for
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
897 # which getting a desginator make sense.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
898 # Algorithm: Get the properties of the
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
899 # current designator's class. (cl.getprops)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
900 # get the property object for the property the
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
901 # user requested (properties[propname])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
902 # verify its type (isinstance...)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
903 # raise error if not link/multilink
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
904 # get class name for link/multilink property
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
905 # do the get on the designators
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
906 # append the new designators
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
907 # print
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
908 properties = cl.getprops()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
909 property = properties[propname]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
910 if not (isinstance(property, hyperdb.Multilink) or
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
911 isinstance(property, hyperdb.Link)):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
912 raise UsageError(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
913 'property %s is not of type'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
914 ' Multilink or Link so -d flag does not '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
915 'apply.') % propname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
916 propclassname = self.db.getclass(property.classname).classname
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
917 id = cl.get(nodeid, propname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
918 for i in id:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
919 linked_props.append(propclassname + i)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
920 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
921 id = cl.get(nodeid, propname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
922 for i in id:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
923 linked_props.append(i)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
924 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
925 if self.print_designator:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
926 properties = cl.getprops()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
927 property = properties[propname]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
928 if not (isinstance(property, hyperdb.Multilink) or
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
929 isinstance(property, hyperdb.Link)):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
930 raise UsageError(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
931 'property %s is not of type'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
932 ' Multilink or Link so -d flag does not '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
933 'apply.') % propname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
934 propclassname = self.db.getclass(property.classname).classname
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
935 id = cl.get(nodeid, propname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
936 for i in id:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
937 print(propclassname + i)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
938 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
939 print(cl.get(nodeid, propname))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
940 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
941 raise UsageError(_('no such %(classname)s node '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
942 '"%(nodeid)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
943 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
944 raise UsageError(_('no such %(classname)s property '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
945 '"%(propname)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
946 if self.separator:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
947 print(self.separator.join(linked_props))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
948
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
949 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
950
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
951 def do_help(self, args, nl_re=nl_re, indent_re=indent_re):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
952 ''"""Usage: help topic
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
953 Give help about topic.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
954
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
955 commands -- list commands
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
956 <command> -- help specific to a command
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
957 initopts -- init command options
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
958 all -- all available help
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
959 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
960 if len(args) > 0:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
961 topic = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
962 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
963 topic = 'help'
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
964
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
965 # try help_ methods
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
966 if topic in self.help:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
967 self.help[topic]()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
968 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
969
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
970 # try command docstrings
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
971 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
972 cmd_docs = self.commands.get(topic)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
973 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
974 print(_('Sorry, no help for "%(topic)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
975 return 1
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
976
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
977 # display the help for each match, removing the docstring indent
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
978 for _name, help in cmd_docs:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
979 lines = nl_re.split(_(help.__doc__))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
980 print(lines[0])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
981 indent = indent_re.match(lines[1])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
982 if indent: indent = len(indent.group(1)) # noqa: E701
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
983 for line in lines[1:]:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
984 if indent:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
985 print(line[indent:])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
986 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
987 print(line)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
988 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
989
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
990 def do_history(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
991 ''"""Usage: history designator [skipquiet]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
992 Show the history entries of a designator.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
993
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
994 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
995 eg. bug1, user10, ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
996
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
997 Lists the journal entries viewable by the user for the
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
998 node identified by the designator. If skipquiet is the
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
999 second argument, journal entries for quiet properties
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1000 are not shown.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1001 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1002
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1003 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1004 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1005 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1006 classname, nodeid = hyperdb.splitDesignator(args[0])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1007 except hyperdb.DesignatorError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1008 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1009
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1010 skipquiet = False
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1011 if len(args) == 2:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1012 if args[1] != 'skipquiet':
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1013 raise UsageError("Second argument is not skipquiet")
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1014 skipquiet = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1015
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1016 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1017 print(self.db.getclass(classname).history(nodeid,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1018 skipquiet=skipquiet))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1019 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1020 raise UsageError(_('no such class "%(classname)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1021 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1022 raise UsageError(_('no such %(classname)s node '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1023 '"%(nodeid)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1024 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1025
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1026 def do_import(self, args, import_files=True):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1027 ''"""Usage: import import_dir
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1028 Import a database from the directory containing CSV files,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1029 two per class to import.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1030
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1031 The files used in the import are:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1032
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1033 <class>.csv
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1034 This must define the same properties as the class (including
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1035 having a "header" line with those property names.)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1036 <class>-journals.csv
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1037 This defines the journals for the items being imported.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1038
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1039 The imported nodes will have the same nodeid as defined in the
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1040 import file, thus replacing any existing content.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1041
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1042 The new nodes are added to the existing database - if you want to
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1043 create a new database using the imported data, then create a new
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1044 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
1045 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1046 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
1047 raise UsageError(_('Not enough arguments supplied'))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1048
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1049 if hasattr(csv, 'field_size_limit'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1050 csv.field_size_limit(self.db.config.CSV_FIELD_SIZE)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1051
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1052 # directory to import from
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1053 dir = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1054
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1055 class colon_separated(csv.excel):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1056 delimiter = ':'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1057
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1058 # import all the files
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1059 for file in os.listdir(dir):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1060 classname, ext = os.path.splitext(file)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1061 # we only care about CSV files
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1062 if ext != '.csv' or classname.endswith('-journals'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1063 continue
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1064
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1065 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1066
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1067 # ensure that the properties and the CSV file headings match
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1068 with open(os.path.join(dir, file), 'r') as f:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1069 reader = csv.reader(f, colon_separated)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1070 file_props = None
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1071 maxid = 1
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1072 # loop through the file and create a node for each entry
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1073 for n, r in enumerate(reader):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1074 if file_props is None:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1075 file_props = r
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1076 continue
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1077
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1078 if self.verbose:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1079 sys.stdout.write('\rImporting %s - %s' % (classname, n))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1080 sys.stdout.flush()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1081
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1082 # do the import and figure the current highest nodeid
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1083 nodeid = cl.import_list(file_props, r)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1084 if hasattr(cl, 'import_files') and import_files:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1085 cl.import_files(dir, nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1086 maxid = max(maxid, int(nodeid))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1087
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1088 # (print to sys.stdout here to allow tests to squash it .. ugh)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1089 print(file=sys.stdout)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1090
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1091 # import the journals
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1092 with open(os.path.join(args[0], classname + '-journals.csv'), 'r') as f:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1093 reader = csv.reader(f, colon_separated)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1094 cl.import_journals(reader)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1095
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1096 # (print to sys.stdout here to allow tests to squash it .. ugh)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1097 print('setting', classname, maxid+1, file=sys.stdout)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1098
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1099 # set the id counter
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1100 self.db.setid(classname, str(maxid+1))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1101
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1102 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1103 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1104
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1105 def do_importtables(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1106 ''"""Usage: importtables export_dir
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1107
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1108 This imports the database tables exported using exporttables.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1109 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1110 return self.do_import(args, import_files=False)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1111
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1112 def do_initialise(self, tracker_home, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1113 ''"""Usage: initialise [adminpw]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1114 Initialise a new Roundup tracker.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1115
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1116 The administrator details will be set at this step.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1117
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1118 Execute the tracker's initialisation function dbinit.init()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1119 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1120 # password
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1121 if len(args) > 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1122 adminpw = args[1]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1123 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1124 adminpw = ''
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1125 confirm = 'x'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1126 while adminpw != confirm:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1127 adminpw = getpass.getpass(_('Admin Password: '))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1128 confirm = getpass.getpass(_(' Confirm: '))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1129
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1130 # make sure the tracker home is installed
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1131 if not os.path.exists(tracker_home):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1132 raise UsageError(_('Instance home does not exist') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1133 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1134 tracker = roundup.instance.open(tracker_home)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1135 except roundup.instance.TrackerError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1136 raise UsageError(_('Instance has not been installed') % locals())
7427
36916abe36e9 Handle traceback when OptionValueError raised during init.
John Rouillard <rouilj@ieee.org>
parents: 7397
diff changeset
1137 except OptionValueError as e:
36916abe36e9 Handle traceback when OptionValueError raised during init.
John Rouillard <rouilj@ieee.org>
parents: 7397
diff changeset
1138 raise UsageError(e)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1139
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1140 # is there already a database?
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1141 if tracker.exists():
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1142 if not self.force:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1143 ok = self.my_input(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1144 """WARNING: The database is already initialised!
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1145 If you re-initialise it, you will lose all the data!
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1146 Erase it? Y/N: """)) # noqa: E122
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1147 if ok.strip().lower() != 'y':
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1148 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1149
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1150 # nuke it
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1151 tracker.nuke()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1152
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1153 # GO
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1154 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1155 tracker.init(password.Password(adminpw, config=tracker.config),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1156 tx_Source='cli')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1157 except OptionUnsetError as e:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1158 raise UsageError("In %(tracker_home)s/config.ini - %(error)s" % {
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1159 'error': str(e), 'tracker_home': tracker_home})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1160
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1161 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1162
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1163 def do_install(self, tracker_home, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1164 ''"""Usage: install [template [backend [key=val[,key=val]]]]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1165 Install a new Roundup tracker.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1166
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1167 The command will prompt for the tracker home directory
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1168 (if not supplied through TRACKER_HOME or the -i option).
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1169 The template and backend may be specified on the command-line
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1170 as arguments, in that order.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1171
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1172 Command line arguments following the backend allows you to
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1173 pass initial values for config options. For example, passing
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1174 "web_http_auth=no,rdbms_user=dinsdale" will override defaults
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1175 for options http_auth in section [web] and user in section [rdbms].
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1176 Please be careful to not use spaces in this argument! (Enclose
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1177 whole argument in quotes if you need spaces in option value).
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1178
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1179 The initialise command must be called after this command in order
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1180 to initialise the tracker's database. You may edit the tracker's
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1181 initial database contents before running that command by editing
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1182 the tracker's dbinit.py module init() function.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1183
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1184 See also initopts help.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1185 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1186 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1187 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1188
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1189 # make sure the tracker home can be created
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1190 tracker_home = os.path.abspath(tracker_home)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1191 parent = os.path.split(tracker_home)[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1192 if not os.path.exists(parent):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1193 raise UsageError(_('Instance home parent directory "%(parent)s"'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1194 ' does not exist') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1195
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1196 config_ini_file = os.path.join(tracker_home, CoreConfig.INI_FILE)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1197 # check for both old- and new-style configs
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1198 if list(filter(os.path.exists, [config_ini_file,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1199 os.path.join(tracker_home, 'config.py')])):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1200 if not self.force:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1201 ok = self.my_input(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1202 """WARNING: There appears to be a tracker in "%(tracker_home)s"!
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1203 If you re-install it, you will lose all the data!
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1204 Erase it? Y/N: """) % locals()) # noqa: E122
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1205 if ok.strip().lower() != 'y':
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1206 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1207
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1208 # clear it out so the install isn't confused
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1209 shutil.rmtree(tracker_home)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1210
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1211 # select template
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1212 templates = self.listTemplates()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1213 template = self._get_choice(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1214 list_name=_('Templates:'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1215 prompt=_('Select template'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1216 options=templates,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1217 argument=len(args) > 1 and args[1] or '',
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1218 default='classic')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1219
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1220 # select hyperdb backend
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1221 import roundup.backends
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1222 backends = roundup.backends.list_backends()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1223 backend = self._get_choice(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1224 list_name=_('Back ends:'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1225 prompt=_('Select backend'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1226 options=backends,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1227 argument=len(args) > 2 and args[2] or '',
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1228 default='anydbm')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1229 # XXX perform a unit test based on the user's selections
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1230
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1231 # Process configuration file definitions
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1232 if len(args) > 3:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1233 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1234 defns = dict([item.split("=") for item in args[3].split(",")])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1235 except Exception:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1236 print(_('Error in configuration settings: "%s"') % args[3])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1237 raise
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1238 else:
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1239 defns = {}
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1240
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1241 defns['rdbms_backend'] = backend
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1242
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1243 # load config_ini.ini from template if it exists.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1244 # it sets parameters like template_engine that are
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1245 # template specific.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1246 template_config = UserConfig(templates[template]['path'] +
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1247 "/config_ini.ini")
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1248 for k in template_config.keys():
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1249 if k == 'HOME': # ignore home. It is a default param.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1250 continue
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1251 defns[k] = template_config[k]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1252
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1253 # install!
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1254 init.install(tracker_home, templates[template]['path'], settings=defns)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1255
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1256 # Remove config_ini.ini file from tracker_home (not template dir).
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1257 # Ignore file not found - not all templates have
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1258 # config_ini.ini files.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1259 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1260 os.remove(tracker_home + "/config_ini.ini")
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1261 except OSError as e: # FileNotFound exception under py3
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1262 if e.errno == 2:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1263 pass
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1264 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1265 raise
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1266
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1267 print(_("""
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1268 ---------------------------------------------------------------------------
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1269 You should now edit the tracker configuration file:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1270 %(config_file)s""") % {"config_file": config_ini_file})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1271
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1272 # find list of options that need manual adjustments
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1273 # XXX config._get_unset_options() is marked as private
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1274 # (leading underscore). make it public or don't care?
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1275 need_set = CoreConfig(tracker_home)._get_unset_options()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1276 if need_set:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1277 print(_(" ... at a minimum, you must set following options:"))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1278 for section in need_set:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1279 print(" [%s]: %s" % (section, ", ".join(need_set[section])))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1280
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1281 # note about schema modifications
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1282 print(_("""
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1283 If you wish to modify the database schema,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1284 you should also edit the schema file:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1285 %(database_config_file)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1286 You may also change the database initialisation file:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1287 %(database_init_file)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1288 ... see the documentation on customizing for more information.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1289
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1290 You MUST run the "roundup-admin initialise" command once you've performed
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1291 the above steps.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1292 ---------------------------------------------------------------------------
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1293 """) % {'database_config_file': os.path.join(tracker_home, 'schema.py'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1294 'database_init_file': os.path.join(tracker_home, 'initial_data.py')}) \
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1295 # noqa: E122
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1296 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1297
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1298 def do_list(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1299 ''"""Usage: list classname [property]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1300 List the instances of a class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1301
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1302 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
1303 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
1304 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
1305 property, alphabetically.
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1306
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
1307 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
1308 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
1309 for every class instance.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1310 """
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1311 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
1312 raise UsageError(_('Too many arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1313 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
1314 raise UsageError(_('Not enough arguments supplied'))
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1315
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1316 retired = self.settings['_retired_val']
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1317
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1318 classname = args[0]
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1319
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1320 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1321 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1322
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1323 # figure the property
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1324 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1325 propname = args[1]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1326 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1327 propname = cl.labelprop()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1328
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1329 if self.separator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1330 if len(args) == 2:
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1331 # create a list of propnames since user specified propname
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1332 proplist = []
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1333 for nodeid in cl.getnodeids(retired=retired):
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1334 try:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1335 proplist.append(cl.get(nodeid, propname))
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1336 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
1337 raise UsageError(_('%(classname)s has no property '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1338 '"%(propname)s"') % locals())
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1339 print(self.separator.join(proplist))
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1340 else:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1341 # 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
1342 # otherwise
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1343 print(self.separator.join(cl.getnodeids(retired=retired)))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1344 else:
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1345 for nodeid in cl.getnodeids(retired=retired):
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1346 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1347 value = cl.get(nodeid, propname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1348 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
1349 raise UsageError(_('%(classname)s has no property '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1350 '"%(propname)s"') % locals())
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1351 print(_('%(nodeid)4s: %(value)s') % locals())
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
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1354 def do_migrate(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1355 ''"""Usage: migrate
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1356
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1357 Update a tracker's database to be compatible with the Roundup
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1358 codebase.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1359
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1360 You should run the "migrate" command for your tracker once
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1361 you've installed the latest codebase.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1362
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1363 Do this before you use the web, command-line or mail interface
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1364 and before any users access the tracker.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1365
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1366 This command will respond with either "Tracker updated" (if
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1367 you've not previously run it on an RDBMS backend) or "No
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1368 migration action required" (if you have run it, or have used
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1369 another interface to the tracker, or possibly because you are
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1370 using anydbm).
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1371
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1372 It's safe to run this even if it's not required, so just get
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1373 into the habit.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1374 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1375 if self.db.db_version_updated:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1376 print(_('Tracker updated to schema version %s.') %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1377 self.db.database_schema['version'])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1378 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1379 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1380 print(_('No migration action required. At schema version %s.') %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1381 self.db.database_schema['version'])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1382 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1383
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1384 def do_pack(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1385 ''"""Usage: pack period | date
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1386
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1387 Remove journal entries older than a period of time specified or
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1388 before a certain date.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1389
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1390 A period is specified using the suffixes "y", "m", and "d". The
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1391 suffix "w" (for "week") means 7 days.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1392
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1393 "3y" means three years
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1394 "2y 1m" means two years and one month
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1395 "1m 25d" means one month and 25 days
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1396 "2w 3d" means two weeks and three days
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1397
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1398 Date format is "YYYY-MM-DD" eg:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1399 2001-01-01
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1400
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1401 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1402 if len(args) != 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1403 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1404
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1405 # are we dealing with a period or a date
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1406 value = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1407 date_re = re.compile(r"""
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1408 (?P<date>\d\d\d\d-\d\d?-\d\d?)? # yyyy-mm-dd
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1409 (?P<period>(\d+y\s*)?(\d+m\s*)?(\d+d\s*)?)?
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1410 """, re.VERBOSE)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1411 m = date_re.match(value)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1412 if not m:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1413 raise ValueError(_('Invalid format'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1414 m = m.groupdict()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1415 if m['period']:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1416 pack_before = date.Date(". - %s" % value)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1417 elif m['date']:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1418 pack_before = date.Date(value)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1419 self.db.pack(pack_before)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1420 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1421 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1422
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1423 def do_perftest(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1424 ''"""Usage: perftest [mode] [arguments]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1425
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1426 Time operations in Roundup. Supported arguments:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1427
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1428 [password] [rounds=<integer>] [scheme=<scheme>]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1429
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1430 'password' is the default mode. The tracker's config.ini
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1431 setting for 'password_pbkdf2_default_rounds' is the default
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1432 value for 'rounds'. On the command line, 'rounds' can include
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1433 thousands separator of ',' or '.'. 'scheme' is the default
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1434 coded into Roundup. List supported schemes by using 'scheme='.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1435
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1436 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1437 from roundup.anypy.time_ import perf_counter
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
1438
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1439 props = {"rounds": self.db.config.PASSWORD_PBKDF2_DEFAULT_ROUNDS,
7375
9bd7ed918121 issue2551253 - Modify password PBKDF2 method to use SHA512
John Rouillard <rouilj@ieee.org>
parents: 7371
diff changeset
1440 "scheme": password.Password.default_scheme}
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1441
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1442 print_supported_schemes = lambda: print(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1443 "Supported schemes (default is first, case "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1444 "sensitive):\n %s." %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1445 ", ".join(password.Password.known_schemes))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1446
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1447 if (args[0].find("=") != -1):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1448 args.insert(0, 'password')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1449
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1450 props.update(self.props_from_args(args[1:]))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1451
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1452 if args[0] == "password":
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1453 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1454 # convert 10,000,000 or 10.000.000 to 10000000
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1455 r = int(re.sub('[,.]', '', props['rounds']))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1456 if r < 1000:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1457 print(_("Invalid 'rounds'. Must be larger than 999."))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1458 return
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1459 props['rounds'] = r
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1460 except (TypeError, ValueError):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1461 print(_("Invalid 'rounds'. It must be an integer not: %s") %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1462 props['rounds'])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1463 return
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1464 if props['scheme'] is None:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1465 print_supported_schemes()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1466 return
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1467
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1468 self.db.config.PASSWORD_PBKDF2_DEFAULT_ROUNDS = props['rounds']
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1469
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1470 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1471 tic = perf_counter()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1472 pw_hash = password.encodePassword(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1473 "this is a long password to hash",
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1474 props['scheme'],
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1475 None,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1476 config=self.db.config
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1477 )
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1478 toc = perf_counter()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1479 except password.PasswordValueError as e:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1480 print(e)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1481 print_supported_schemes()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1482 return
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1483
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1484 if props['scheme'].startswith('PBKDF2'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1485 (rounds, salt, _raw_salt, digest) = password.pbkdf2_unpack(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1486 pw_hash)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1487 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1488 rounds = _("scheme does not support rounds.")
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1489
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1490 print(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1491 "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1492 "rounds: %(rounds)s") %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1493 {"time": toc-tic, "scheme": props['scheme'],
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1494 "rounds": rounds})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1495
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1496 def do_pragma(self, args):
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1497 ''"""Usage: pragma setting=value | 'list'
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1498 Set internal admin settings to a value. E.G.
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1499
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1500 pragma verbose=True
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1501 pragma verbose=yes
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1502 pragma verbose=on
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1503 pragma verbose=1
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1504
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1505 will turn on verbose mode for roundup-admin.
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1506
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1507 pragma list
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1508
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1509 will show all settings and their current values. If verbose
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1510 is enabled hidden settings and descriptions will be shown.
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1511 """
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1512 """
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1513 The following are to be implemented:
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1514 exportfiles={true|false} - Not Implemented - If true
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1515 (default) export/import db tables and files. If
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1516 False, export/import just database tables, not
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1517 files. Use for faster database migration.
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1518 Replaces exporttables/importtables with
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1519 exportfiles=false then export/import
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1520 """
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1521
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1522 if len(args) < 1:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1523 raise UsageError(_('Not enough arguments supplied'))
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1524
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1525 try:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1526 (setting, value) = args[0].split("=", 1)
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1527 except ValueError:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1528 if args[0] != "list":
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1529 raise UsageError(_(
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1530 'Argument must be setting=value, was given: %s.') %
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1531 args[0])
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1532 else:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1533 print(_("Current settings and values "
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1534 "(NYI - not yet implemented):"))
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1535 is_verbose = self.settings['verbose']
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1536 for key in sorted(list(self.settings.keys())):
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1537 if key.startswith('_') and not is_verbose:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1538 continue
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1539 print(" %s=%s" % (key, self.settings[key]))
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1540 if is_verbose:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1541 print(" %s" % self.settings_help[key])
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1542
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1543 return
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1544
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1545 if setting not in self.settings:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1546 raise UsageError(_('Unknown setting %s.') % setting)
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1547 if type(self.settings[setting]) is bool:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1548 value = value.lower()
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1549 if value in ("yes", "true", "on", "1"):
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1550 value = True
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1551 elif value in ("no", "false", "off", "0"):
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1552 value = False
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1553 else:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1554 raise UsageError(_(
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1555 'Incorrect value for boolean setting %(setting)s: '
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1556 '%(value)s.') % {"setting": setting, "value": value})
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1557 elif type(self.settings[setting]) is int:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1558 try:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1559 _val = int(value)
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1560 except ValueError:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1561 raise UsageError(_(
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1562 'Incorrect value for integer setting %(setting)s: '
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1563 '%(value)s.') % {"setting": setting, "value": value})
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1564 value = _val
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1565 elif type(self.settings[setting]) is str:
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1566 if setting == "show_retired":
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1567 if value not in ["no", "only", "both"]:
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1568 raise UsageError(_(
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1569 'Incorrect value for setting %(setting)s: '
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1570 '%(value)s. Should be no, both, or only.') % {
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1571 "setting": setting, "value": value})
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1572 if value == "both":
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1573 self.settings['_retired_val'] = None
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1574 elif value == "only": # numerical value not boolean
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1575 self.settings['_retired_val'] = True
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1576 else: # numerical value not boolean
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1577 self.settings['_retired_val'] = False
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1578 else:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1579 raise UsageError(_('Internal error: pragma can not handle '
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1580 'values of type: %s') %
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1581 type(self.settings[setting]).__name__)
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1582
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1583 self.settings[setting] = value
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1584
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1585 designator_re = re.compile('([A-Za-z]+)([0-9]+)$')
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1586 designator_rng = re.compile('([A-Za-z]+):([0-9]+)-([0-9]+)$')
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1587
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1588 def do_reindex(self, args, desre=designator_re, desrng=designator_rng):
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1589 ''"""Usage: reindex [classname|classname:#-#|designator]*
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1590 Re-generate a tracker's search indexes.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1591
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1592 This will re-generate the search indexes for a tracker.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1593 This will typically happen automatically.
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1594
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1595 You can incrementally reindex using an argument like:
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1596
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1597 reindex issue:23-1000
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1598
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1599 to reindex issue class items 23-1000. Missing items
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1600 are reported but do not stop indexing of the range.
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
1601 """
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1602 from roundup import support
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1603 if args:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1604 for arg in args:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1605 m = desre.match(arg)
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1606 r = desrng.match(arg)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1607 if m:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1608 cl = self.get_class(m.group(1))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1609 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1610 cl.index(m.group(2))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1611 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1612 raise UsageError(_('no such item "%(designator)s"') % {
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1613 'designator': arg})
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1614 elif r:
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1615 cl = self.get_class(r.group(1))
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1616 for item in support.Progress(
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1617 'Reindexing %s' % r.group(1),
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1618 range(int(r.group(2)), int(r.group(3)))):
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1619 try:
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1620 cl.index(str(item))
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1621 except IndexError:
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1622 print(_('no such item "%(class)s%(id)s"') % {
7566
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
1623 'class': r.group(1),
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
1624 'id': item})
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
1625
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1626 else:
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1627 cl = self.get_class(arg) # Bad class raises UsageError
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1628 self.db.reindex(arg, show_progress=True)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1629 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1630 self.db.reindex(show_progress=True)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1631 return 0
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
1632
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1633 def do_restore(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1634 ''"""Usage: restore designator[,designator]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1635 Restore the retired node specified by designator.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1636
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1637 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1638 eg. bug1, user10, ...
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
1639
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1640 The given nodes will become available for users again.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1641 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1642 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1643 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1644 designators = args[0].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1645 for designator in designators:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1646 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1647 classname, nodeid = hyperdb.splitDesignator(designator)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1648 except hyperdb.DesignatorError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1649 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1650 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1651 dbclass = self.db.getclass(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1652 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1653 raise UsageError(_('no such class "%(classname)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1654 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1655 dbclass.restore(nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1656 except KeyError as e:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1657 raise UsageError(e.args[0])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1658 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1659 raise UsageError(_('no such %(classname)s node '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1660 '" % (nodeid)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1661 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1662 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1663
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1664 def do_retire(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1665 ''"""Usage: retire designator[,designator]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1666 Retire the node specified by designator.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1667
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1668 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1669 eg. bug1, user10, ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1670
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1671 This action indicates that a particular node is not to be retrieved
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1672 by the list or find commands, and its key value may be re-used.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1673 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1674 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1675 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1676 designators = args[0].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1677 for designator in designators:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1678 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1679 classname, nodeid = hyperdb.splitDesignator(designator)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1680 except hyperdb.DesignatorError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1681 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1682 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1683 self.db.getclass(classname).retire(nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1684 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1685 raise UsageError(_('no such class "%(classname)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1686 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1687 raise UsageError(_('no such %(classname)s node '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1688 '"%(nodeid)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1689 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1690 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1691
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1692 def do_rollback(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1693 ''"""Usage: rollback
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1694 Undo all changes that are pending commit to the database.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1695
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1696 The changes made during an interactive session are not
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1697 automatically written to the database - they must be committed
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1698 manually. This command undoes all those changes, so a commit
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1699 immediately after would make no changes to the database.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1700 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1701 self.db.rollback()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1702 self.db_uncommitted = False
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1703 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1704
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1705 def do_security(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1706 ''"""Usage: security [Role name]
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
1707
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1708 Display the Permissions available to one or all Roles.
7379
40cab56a97f1 Document that security subcommand reports invalid properties.
John Rouillard <rouilj@ieee.org>
parents: 7375
diff changeset
1709 Also validates that any properties defined in a
40cab56a97f1 Document that security subcommand reports invalid properties.
John Rouillard <rouilj@ieee.org>
parents: 7375
diff changeset
1710 permission are valid.
40cab56a97f1 Document that security subcommand reports invalid properties.
John Rouillard <rouilj@ieee.org>
parents: 7375
diff changeset
1711
40cab56a97f1 Document that security subcommand reports invalid properties.
John Rouillard <rouilj@ieee.org>
parents: 7375
diff changeset
1712 Run this after changing your permissions to catch
40cab56a97f1 Document that security subcommand reports invalid properties.
John Rouillard <rouilj@ieee.org>
parents: 7375
diff changeset
1713 typos.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1714 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1715 if len(args) == 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1716 role = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1717 try:
7650
4de48eadf5f4 bug: Fix roundup-admin security command. Lowercase optionalarg.
John Rouillard <rouilj@ieee.org>
parents: 7588
diff changeset
1718 roles = [(args[0].lower(),
4de48eadf5f4 bug: Fix roundup-admin security command. Lowercase optionalarg.
John Rouillard <rouilj@ieee.org>
parents: 7588
diff changeset
1719 self.db.security.role[args[0].lower()])]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1720 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1721 sys.stdout.write(_('No such Role "%(role)s"\n') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1722 return 1
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1723 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1724 roles = list(self.db.security.role.items())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1725 role = self.db.config.NEW_WEB_USER_ROLES
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1726 if ',' in role:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1727 sys.stdout.write(_('New Web users get the Roles "%(role)s"\n')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1728 % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1729 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1730 sys.stdout.write(_('New Web users get the Role "%(role)s"\n')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1731 % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1732 role = self.db.config.NEW_EMAIL_USER_ROLES
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1733 if ',' in role:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1734 sys.stdout.write(_('New Email users get the Roles "%(role)s"\n') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1735 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1736 sys.stdout.write(_('New Email users get the Role "%(role)s"\n') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1737 roles.sort()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1738 for _rolename, role in roles:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1739 sys.stdout.write(_('Role "%(name)s":\n') % role.__dict__)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1740 for permission in role.permissions:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1741 d = permission.__dict__
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1742 if permission.klass:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1743 if permission.properties:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1744 sys.stdout.write(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1745 ' %(description)s (%(name)s for "%(klass)s"' +
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1746 ': %(properties)s only)\n') % d)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1747 # verify that properties exist; report bad props
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1748 bad_props = []
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1749 cl = self.db.getclass(permission.klass)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1750 class_props = cl.getprops(protected=True)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1751 for p in permission.properties:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1752 if p in class_props:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1753 continue
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1754 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1755 bad_props.append(p)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1756 if bad_props:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1757 sys.stdout.write(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1758 '\n **Invalid properties for %(class)s: '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1759 '%(props)s\n\n') % {
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1760 "class": permission.klass,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1761 "props": bad_props})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1762 return 1
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1763 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1764 sys.stdout.write(_(' %(description)s (%(name)s for '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1765 '"%(klass)s" only)\n') % d)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1766 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1767 sys.stdout.write(_(' %(description)s (%(name)s)\n') % d)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1768 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1769
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1770 def do_set(self, args):
7380
6480443c2607 set items can take 1 or more property=value
John Rouillard <rouilj@ieee.org>
parents: 7379
diff changeset
1771 ''"""Usage: set items property=value [property=value ...]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1772 Set the given properties of one or more items(s).
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1773
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1774 The items are specified as a class or as a comma-separated
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1775 list of item designators (ie "designator[,designator,...]").
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1776
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1777 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1778 eg. bug1, user10, ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1779
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1780 This command sets the properties to the values for all
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1781 designators given. If a class is used, the property will be
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1782 set for all items in the class. If the value is missing
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1783 (ie. "property=") then the property is un-set. If the property
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1784 is a multilink, you specify the linked ids for the multilink
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1785 as comma-separated numbers (ie "1,2,3").
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1786
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1787 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1788 import copy # needed for copying props list
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1789
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1790 if len(args) < 2:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1791 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1792 from roundup import hyperdb
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1793
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1794 designators = args[0].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1795 if len(designators) == 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1796 designator = designators[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1797 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1798 designator = hyperdb.splitDesignator(designator)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1799 designators = [designator]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1800 except hyperdb.DesignatorError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1801 cl = self.get_class(designator)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1802 designators = [(designator, x) for x in cl.list()]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1803 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1804 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1805 designators = [hyperdb.splitDesignator(x) for x in designators]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1806 except hyperdb.DesignatorError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1807 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1808
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1809 # get the props from the args
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1810 propset = self.props_from_args(args[1:]) # parse the cli once
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1811
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1812 # now do the set for all the nodes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1813 for classname, itemid in designators:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1814 props = copy.copy(propset) # make a new copy for every designator
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1815 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1816
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1817 for key, value in list(props.items()):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1818 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1819 # You must reinitialize the props every time though.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1820 # if props['nosy'] = '+admin' initally, it gets
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1821 # set to 'demo,admin' (assuming it was set to demo
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1822 # in the db) after rawToHyperdb returns.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1823 # This new value is used for all the rest of the
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1824 # designators if not reinitalized.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1825 props[key] = hyperdb.rawToHyperdb(self.db, cl, itemid,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1826 key, value)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1827 except hyperdb.HyperdbValueError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1828 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1829
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1830 # try the set
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1831 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1832 cl.set(itemid, **props)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1833 except (TypeError, IndexError, ValueError) as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1834 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1835 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1836 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1837
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1838 def do_specification(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1839 ''"""Usage: specification classname
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1840 Show the properties for a classname.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1841
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1842 This lists the properties for a given class.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1843 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1844 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1845 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1846 classname = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1847 # get the class
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1848 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1849
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1850 # get the key property
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1851 keyprop = cl.getkey()
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1852 if self.settings['display_protected']:
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1853 properties = cl.getprops()
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1854 else:
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1855 properties = cl.properties
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1856 for key in properties:
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1857 value = properties[key]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1858 if keyprop == key:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1859 sys.stdout.write(_('%(key)s: %(value)s (key property)\n') %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1860 locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1861 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1862 sys.stdout.write(_('%(key)s: %(value)s\n') % locals())
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
1863
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1864 def do_table(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1865 ''"""Usage: table classname [property[,property]*]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1866 List the instances of a class in tabular form.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1867
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1868 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
1869 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
1870 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
1871 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
1872 For example::
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
1873
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1874 roundup> table priority id,name:10
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1875 Id Name
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1876 1 fatal-bug
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1877 2 bug
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1878 3 usability
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1879 4 feature
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1880
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1881 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
1882 leave a trailing : without a width on the property. For example::
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
1883
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1884 roundup> table priority id,name:
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1885 Id Name
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1886 1 fata
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1887 2 bug
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1888 3 usab
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1889 4 feat
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1890
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
1891 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
1892 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1893 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
1894 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1895 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1896
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1897 retired = self.settings['_retired_val']
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1898
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1899 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1900 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1901
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1902 # figure the property names to display
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1903 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1904 prop_names = args[1].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1905 all_props = cl.getprops()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1906 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1907 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1908 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1909 propname, width = spec.split(':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1910 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
1911 raise UsageError(_('"%(spec)s" not '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1912 'name:width') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1913 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1914 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
1915 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
1916 raise UsageError(_('%(classname)s has no property '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1917 '"%(propname)s"') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1918 else:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
1919 prop_names = cl.getprops()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1920
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1921 # now figure column widths
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1922 props = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1923 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1924 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1925 name, width = spec.split(':')
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
1926 if width == '':
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
1927 # spec includes trailing :, use label/name width
6198
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
1928 props.append((name, len(name)))
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
1929 else:
6198
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
1930 try:
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
1931 props.append((name, int(width)))
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
1932 except ValueError:
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
1933 raise UsageError(_('"%(spec)s" does not have an '
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
1934 'integer width: "%(width)s"') %
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
1935 locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1936 else:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1937 # this is going to be slow
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1938 maxlen = len(spec)
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1939 for nodeid in cl.getnodeids(retired=retired):
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1940 curlen = len(str(cl.get(nodeid, spec)))
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1941 if curlen > maxlen:
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1942 maxlen = curlen
6198
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
1943 props.append((spec, maxlen))
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
1944
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1945 # now display the heading
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1946 print(' '.join([name.capitalize().ljust(width)
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1947 for name, width in props]))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1948
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1949 # and the table data
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1950 for nodeid in cl.getnodeids(retired=retired):
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
1951 table_columns = []
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1952 for name, width in props:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1953 if name != 'id':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1954 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1955 value = str(cl.get(nodeid, name))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1956 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1957 # we already checked if the property is valid - a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1958 # KeyError here means the node just doesn't have a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1959 # value for it
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1960 value = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1961 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1962 value = str(nodeid)
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1963 f = '%%-%ds' % width
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
1964 table_columns.append(f % value[:width])
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
1965 print(' '.join(table_columns))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1966 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1967
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1968 def do_templates(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1969 ''"""Usage: templates [trace_search]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1970 List templates and their installed directories.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1971
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1972 With trace_search also list all directories that are
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1973 searched for templates.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1974 """
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1975 import textwrap
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6430
diff changeset
1976
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1977 trace_search = False
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1978 if args and args[0] == "trace_search":
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1979 trace_search = True
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
1980
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1981 templates = self.listTemplates(trace_search=trace_search)
3179
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
1982
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1983 for name in sorted(list(templates.keys())):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1984 templates[name]['description'] = textwrap.fill(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1985 "\n".join([line.lstrip() for line in
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1986 templates[name]['description'].split("\n")]),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1987 70,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1988 subsequent_indent=" "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1989 )
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1990 print("""
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1991 Name: %(name)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1992 Path: %(path)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1993 Desc: %(description)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1994 """ % templates[name])
562
62febbd7ffec You can now use the roundup-admin tool to pack the database
Roche Compaan <rochecompaan@users.sourceforge.net>
parents: 529
diff changeset
1995
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1996 def do_updateconfig(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1997 ''"""Usage: updateconfig <filename>
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1998 Generate an updated tracker config file (ini style) in
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1999 <filename>. Use current settings from existing roundup
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2000 tracker in tracker home.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2001 """
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2002 self.do_genconfig(args, update=True)
7209
c1227f883177 Implement password hash testing using new roundup-admin perftest.
John Rouillard <rouilj@ieee.org>
parents: 7207
diff changeset
2003
7392
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2004 def usageError_feedback(self, message, function):
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2005 print(_('Error: %s') % message)
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2006 print()
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2007 print(function.__doc__)
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2008 return 1
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2009
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2010 def run_command(self, args):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2011 """Run a single command
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2012 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2013 command = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2014
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2015 # handle help now
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2016 if command == 'help':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2017 if len(args) > 1:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2018 self.do_help(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2019 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2020 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2021 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2022 if command == 'morehelp':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2023 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2024 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2025 self.help_all()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2026 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2027
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2028 # figure what the command is
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2029 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2030 functions = self.commands.get(command)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2031 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2032 # not a valid command
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
2033 print(_('Unknown command "%(command)s" ("help commands" for a '
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2034 'list)') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2035 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2036
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2037 # check for multiple matches
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2038 if len(functions) > 1:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2039 print(_('Multiple commands match "%(command)s": %(list)s') %
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2040 {'command': command,
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2041 'list': ', '.join([i[0] for i in functions])})
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2042 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2043 command, function = functions[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2044
7392
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2045 if command in ['genconfig', 'templates']:
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2046 try:
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2047 ret = function(args[1:])
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2048 return ret
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2049 except UsageError as message: # noqa F841
7566
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
2050 return self.usageError_feedback(message, function)
7392
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2051
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2052 # make sure we have a tracker_home
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2053 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
2054 if not self.force:
7182
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
2055 self.tracker_home = self.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
2056 else:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
2057 self.tracker_home = os.curdir
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2058
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
2059 # 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
2060 if command == 'initialise':
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
2061 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2062 return self.do_initialise(self.tracker_home, args)
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2063 except UsageError as message: # noqa: F841
7566
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
2064 return self.usageError_feedback(message, function)
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
2065 elif command == 'install':
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
2066 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2067 return self.do_install(self.tracker_home, args)
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2068 except UsageError as message: # noqa: F841
7566
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
2069 return self.usageError_feedback(message, function)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2070
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2071 # get the tracker
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2072 try:
7253
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2073 if self.tracker and not self.settings['_reopen_tracker']:
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2074 tracker = self.tracker
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2075 else:
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2076 if self.settings["verbose"]:
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2077 print("Reopening tracker")
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2078 tracker = roundup.instance.open(self.tracker_home)
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2079 self.tracker = tracker
7544
4c90a57c89e3 initialize indexer_backend pragma from config.
John Rouillard <rouilj@ieee.org>
parents: 7543
diff changeset
2080 self.settings['indexer_backend'] = self.tracker.config['INDEXER']
4c90a57c89e3 initialize indexer_backend pragma from config.
John Rouillard <rouilj@ieee.org>
parents: 7543
diff changeset
2081
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2082 except ValueError as message: # noqa: F841
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2083 self.tracker_home = ''
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2084 print(_("Error: Couldn't open tracker: %(message)s") % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2085 return 1
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2086 except NoConfigError as message: # noqa: F841
5230
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
2087 self.tracker_home = ''
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2088 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
2089 return 1
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2090 # message used via locals
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2091 except ParsingOptionError as message: # noqa: F841
6557
8687c096a945 Handle configparser.InterpolationSyntaxError
John Rouillard <rouilj@ieee.org>
parents: 6527
diff changeset
2092 print("%(message)s" % locals())
8687c096a945 Handle configparser.InterpolationSyntaxError
John Rouillard <rouilj@ieee.org>
parents: 6527
diff changeset
2093 return 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2094
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2095 # only open the database once!
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2096 if not self.db:
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
2097 self.db = tracker.open(self.name)
7439
f7dc37df61b7 fix typo in comment.
John Rouillard <rouilj@ieee.org>
parents: 7427
diff changeset
2098 # don't use tracker.config["TRACKER_LANGUAGE"] here as the
6658
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6585
diff changeset
2099 # cli operator likely wants to have i18n as set in the
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6585
diff changeset
2100 # environment.
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6585
diff changeset
2101 # This is needed to fetch the locale's of the tracker's home dir.
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2102 self.db.i18n = get_translation(tracker_home=tracker.tracker_home)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2103
4781
6e9b9743de89 Implementation for:
John Rouillard <rouilj@ieee.org>
parents: 4486
diff changeset
2104 self.db.tx_Source = 'cli'
6e9b9743de89 Implementation for:
John Rouillard <rouilj@ieee.org>
parents: 4486
diff changeset
2105
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2106 # do the command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2107 ret = 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2108 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2109 ret = function(args[1:])
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2110 except UsageError as message: # noqa: F841
7392
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2111 ret = self.usageError_feedback(message, function)
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2112 except Exception:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2113 import traceback
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2114 traceback.print_exc()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2115 ret = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2116 return ret
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2117
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2118 def interactive(self):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2119 """Run in an interactive mode
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2120 """
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
2121 print(_('Roundup %s ready for input.\nType "help" for help.'
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2122 % roundup_version))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2123 try:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2124 import readline # noqa: F401
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2125 except ImportError:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
2126 print(_('Note: command history and editing not available'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2127
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2128 while 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2129 try:
7182
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
2130 command = self.my_input('roundup> ')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2131 except EOFError:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
2132 print(_('exit...'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2133 break
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2134 if not command: continue # noqa: E701
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
2135 try:
7178
db06d4aeb978 unshadow stdlib token from roundup's token.
John Rouillard <rouilj@ieee.org>
parents: 7093
diff changeset
2136 args = token_r.token_split(command)
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
2137 except ValueError:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2138 continue # Ignore invalid quoted token
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2139 if not args: continue # noqa: E701
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2140 if args[0] in ('quit', 'exit'): break # noqa: E701
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2141 self.run_command(args)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2142
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2143 # 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
2144 if self.db and self.db_uncommitted:
7182
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
2145 commit = self.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
2146 if commit and commit[0].lower() == 'y':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2147 self.db.commit()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2148 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2149
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2150 def main(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2151 try:
7546
534f8bdb8f94 Add -P pragma=value command line option to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7545
diff changeset
2152 opts, args = getopt.getopt(sys.argv[1:], 'i:u:hcdP:sS:vV')
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
2153 except getopt.GetoptError as e:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2154 self.usage(str(e))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2155 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2156
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2157 # handle command-line args
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2158 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
2159 self.name = 'admin'
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
2160 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
2161 if 'ROUNDUP_LOGIN' in os.environ:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2162 login_env = os.environ['ROUNDUP_LOGIN'].split(':')
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2163 self.name = login_env[0]
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2164 if len(login_env) > 1:
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2165 self.password = login_env[1]
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2166 self.separator = None
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2167 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
2168 self.verbose = 0
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2169 for opt, arg in opts:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2170 if opt == '-h':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2171 self.usage()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2172 return 0
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2173 elif opt == '-v':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2174 print('%s (python %s)' % (roundup_version,
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2175 sys.version.split()[0]))
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2184
diff changeset
2176 return 0
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2177 elif opt == '-V':
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2178 self.verbose = 1
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2179 elif opt == '-i':
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2180 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
2181 elif opt == '-c':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2182 if self.separator is not None:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
2183 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
2184 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2185 self.separator = ','
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2186 elif opt == '-S':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2187 if self.separator is not None:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
2188 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
2189 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2190 self.separator = arg
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2191 elif opt == '-s':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2192 if self.separator is not None:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
2193 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
2194 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2195 self.separator = ' '
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2196 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
2197 self.print_designator = 1
7546
534f8bdb8f94 Add -P pragma=value command line option to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7545
diff changeset
2198 elif opt == '-P':
534f8bdb8f94 Add -P pragma=value command line option to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7545
diff changeset
2199 self.do_pragma([arg])
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
2200 elif opt == '-u':
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2201 login_opt = arg.split(':')
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2202 self.name = login_opt[0]
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2203 if len(login_opt) > 1:
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2204 self.password = login_opt[1]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2205
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2206 # if no command - go interactive
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2207 # 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
2208 ret = 0
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2209 try:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2210 if not args:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2211 self.interactive()
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2212 else:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2213 ret = self.run_command(args)
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2214 if self.db: self.db.commit() # noqa: E701
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2215 return ret
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2216 finally:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2217 if self.db:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2218 self.db.close()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2219
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2220
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2221 if __name__ == '__main__':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2222 tool = AdminTool()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2223 sys.exit(tool.main())
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2224
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
2225 # vim: set filetype=python sts=4 sw=4 et si :

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