annotate roundup/admin.py @ 8580:5cba36e42b8f

chore: refactor replace urlparse with urlsplit and use urllib_ Python docs recommend use of urlsplit() rather than urlparse(). urlsplit() is a little faster and doesn't try to split the path into path and params using the rules from an obsolete RFC. actions.py, demo.py, rest.py, client.py Replace urlparse() with urlsplit() actions.py urlsplit() produces a named tuple with one fewer elements (no .param). So fixup calls to urlunparse() so they have the proper number of elements in the tuple. also merge url filtering for param and path. demo.py, rest.py: Replace imports from urlparse/urllib.parse with roundup.anypy.urllib_ so we use the same interface throughout the code base. test/test_cgi.py: Since actions.py filtering for invali urls not split by path/param, fix tests for improperly quoted url's.
author John Rouillard <rouilj@ieee.org>
date Sun, 19 Apr 2026 22:58:59 -0400
parents 9c3ec0a5c7fc
children
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
8296
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
2 # -*- coding: utf-8 -*-
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
3 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
4 # 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
5 # 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
6 # 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
7 # disclaimer are retained in their original form.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
8 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
9 # 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
10 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
11 # 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
12 # POSSIBILITY OF SUCH DAMAGE.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
13 #
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
14 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
15 # 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
16 # 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
17 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
18 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
19 #
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
20
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
21 """Administration commands for maintaining Roundup trackers.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
22 """
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
23 __docformat__ = 'restructuredtext'
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
24 import csv
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
25 import getopt
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
26 import getpass
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
27 import operator
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
28 import os
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
29 import re
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
30 import shutil
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
31 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
32
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
33 import roundup.instance
773
6e6c63a57df9 [SF#569415] {version]]
Richard Jones <richard@users.sourceforge.net>
parents: 763
diff changeset
34 from roundup import __version__ as roundup_version
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
35 from roundup import date, hyperdb, init, password, support, token_r
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
36 from roundup.anypy import scandir_ # noqa: F401 define os.scandir
5401
4cf48ff01e04 Python 3 preparation: replace raw_input uses.
Joseph Myers <jsm@polyomino.org.uk>
parents: 5250
diff changeset
37 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
38 from roundup.anypy.strings import repr_export
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
39 from roundup.configuration import (
8540
e8d1da6e3571 bug: fix traceback in roundup-admin init with bad config values
John Rouillard <rouilj@ieee.org>
parents: 8487
diff changeset
40 ConfigurationError,
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
41 CoreConfig,
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
42 NoConfigError,
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
43 Option,
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
44 OptionUnsetError,
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
45 OptionValueError,
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
46 ParsingOptionError,
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
47 UserConfig,
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
48 )
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
49 from roundup.exceptions import UsageError
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
50 from roundup.i18n import _, get_translation
8487
b09ef85f0da6 feat: add nanoid pkg trace_id gen and decorator for setting processName
John Rouillard <rouilj@ieee.org>
parents: 8472
diff changeset
51 from roundup.logcontext import gen_trace_id, set_processName, store_trace_reason
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
52
5455
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
53 try:
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
54 from UserDict import UserDict
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
55 except ImportError:
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
56 from collections import UserDict
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
57
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
58
8557
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
59 def _safe_os_getlogin():
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
60 """Run os.getlogin handling OSError exception.
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
61
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
62 Used when calling @store_trace_reason to add username to string.
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
63 """
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
64
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
65 try:
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
66 return os.getlogin()
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
67 except OSError:
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
68 return "--unknown--"
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
69
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
70
5455
118f5ffd194e import UserDict from collections or UserDict
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5414
diff changeset
71 class CommandDict(UserDict):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
72 """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
73
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
74 Original code submitted by Engelbert Gruber.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
75 """
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
76 _marker = ('CommandDictMarker')
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
77
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
78 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
79 if key in self.data:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
80 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
81 keylist = sorted(self.data)
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
82
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
83 matching_keys = [(ki, self.data[ki]) for ki in keylist
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
84 if ki.startswith(key)]
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
85
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
86 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
87 raise KeyError(key)
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
88 # FIXME: what happens if default is not self._marker but
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
89 # there are no matching keys? Should (default, self.data[default])
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
90 # be returned???
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
91 return matching_keys
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
92
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
93
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
94 class AdminTool:
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
95 """ A collection of methods used in maintaining Roundup trackers.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
96
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
97 Typically these methods are accessed through the roundup-admin
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
98 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
99 loop for the roundup-admin script.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
100
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
101 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
102 given in the method docstring.
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
103
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
104 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
105 """
7182
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
106
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
107 # import here to make AdminTool.readline accessible or
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
108 # mockable from tests.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
109 try:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
110 import readline # noqa: I001, PLC0415
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
111 except ImportError:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
112 readline = None
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
113
7182
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
114 # 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
115 # 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
116 # 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
117 my_input = my_input
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
118
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
119 def __init__(self):
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
120 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
121 for k in AdminTool.__dict__:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
122 if k[:3] == 'do_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
123 self.commands[k[3:]] = getattr(self, k)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
124 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
125 for k in AdminTool.__dict__:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
126 if k[:5] == 'help_':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
127 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
128 self.tracker = None
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
129 self.tracker_home = ''
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
130 self.db = None
3889
f7766d5ba962 fix [SF#297014]: roundup-admin interactive tracks uncommitted state
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3803
diff changeset
131 self.db_uncommitted = False
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
132 self._default_savepoint_setting = 10000
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
133 self.force = None
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
134 self.settings = {
7549
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
135 'display_header': False,
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
136 'display_protected': False,
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
137 'indexer_backend': "as set in config.ini",
7802
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
138 'history_features': 0,
7795
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
139 'history_length': -1,
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
140 '_reopen_tracker': False,
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
141 'savepoint_limit': self._default_savepoint_setting,
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
142 'show_retired': "no",
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
143 '_retired_val': False,
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
144 'verbose': False,
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
145 '_inttest': 3,
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
146 '_floattest': 3.5,
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
147 }
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
148 self.settings_help = {
7549
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
149 'display_header':
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
150 _("Have 'display designator[,designator*]' show header inside\n"
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
151 " []'s before items. Includes retired/active status.\n"),
7549
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
152
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
153 'display_protected':
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
154 _("Have 'display designator' and 'specification class' show\n"
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
155 " protected fields: creator, id etc.\n"),
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
156
7802
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
157 'history_features':
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
158 _("Controls history options. It is a bitstring where setting\n"
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
159 " the bit disables the feature. A value of 0 (default)\n"
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
160 " enables all features. Value 1 disables loading of\n"
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
161 " history. Value 2 disables saving history. Value 4\n"
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
162 " disables loading init file. Since it is a bitstring a\n"
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
163 " value of 6 disables both loading init file and saving\n"
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
164 " history.\n"),
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
165
7796
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
166 'history_length':
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
167 _("Set the number of lines of history to keep for this session.\n"
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
168 " -1 is infinite.\n"),
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
169
7300
57f34b0b912c flake8 fixes
John Rouillard <rouilj@ieee.org>
parents: 7253
diff changeset
170 'indexer_backend':
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
171 _("Set indexer to use when running 'reindex' NYI\n"),
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
172
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
173 '_reopen_tracker':
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
174 _("Force reopening of tracker when running each command.\n"),
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
175
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
176 'savepoint_limit':
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
177 _("set the number of rows imported before a database commit is\n"
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
178 " done. Used only for imports on PostgreSQL.\n"),
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
179 'show_retired': _("Show retired items in table, list etc. "
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
180 "One of 'no', 'only', 'both'\n"),
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
181 '_retired_val': _("internal mapping for show_retired.\n"),
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
182 'verbose': _("Enable verbose output: tracing, descriptions...\n"),
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
183
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
184 '_inttest': "Integer valued setting. For testing only.\n",
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
185 '_floattest': "Float valued setting. For testing only.\n",
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
186 }
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
187
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
188 def get_class(self, classname):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
189 """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
190 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
191 try:
489
5db2dad23f09 [SF#500140] AdminTool.get_class() returns nothing
Richard Jones <richard@users.sourceforge.net>
parents: 484
diff changeset
192 return self.db.getclass(classname)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
193 except KeyError:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
194 raise UsageError(_('no such class "%(classname)s"') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
195
649
29f7e41ee437 Ran it through pychecker, made fixes
Richard Jones <richard@users.sourceforge.net>
parents: 626
diff changeset
196 def props_from_args(self, args):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
197 """ 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
198
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
199 The args list is specified as ``prop=value prop=value ...``.
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
200 A missing value is recorded as None.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
201 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
202 props = {}
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
203 for arg in args:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
204 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
205 # if = not in string, will return one element
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
206 if len(key_val) != 2:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
207 raise UsageError(_('argument "%(arg)s" not propname=value') %
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
208 locals())
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
209 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
210 if value:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
211 props[key] = value
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
212 else:
b0de30171e57 implemented set for all items in a class, and unset
Richard Jones <richard@users.sourceforge.net>
parents: 1103
diff changeset
213 props[key] = None
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
214 return props
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
215
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
216 def usage(self, message=''):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
217 """ Display a simple usage message.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
218 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
219 if message:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
220 message = _('Problem: %(message)s\n\n') % locals()
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
221 sys.stdout.write(_("""%(message)sUsage: roundup-admin [options] [<command> <arguments>]
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
222
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
223 Options:
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
224 -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
225 -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
226 -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
227 -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
228 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
229 -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
230 -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
231 Same as '-S " "'.
7546
534f8bdb8f94 Add -P pragma=value command line option to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7545
diff changeset
232 -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
233 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
234 -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
235 -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
236
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
237 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
238
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
239 Help:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
240 roundup-admin -h
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
241 roundup-admin help -- this help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
242 roundup-admin help <command> -- command-specific help
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
243 roundup-admin help all -- all available help
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
244 """) % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
245 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
246
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
247 def help_commands(self):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
248 """List the commands available with their help summary.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
249 """
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
250 sys.stdout.write(_('Commands: '))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
251 commands = ['']
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
252 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
253 h = _(command.__doc__).split('\n')[0]
8296
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
254 # ascii colon and space, U+003A ':' as ascii repr (for
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
255 # Chinese locales), 'fallback'
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
256 for seq in [': ', '\uff1a', 'fallback']:
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
257 if seq == 'fallback':
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
258 # command hasn't been printed yet so ...
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
259 commands.append(' ' + h.lstrip())
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
260 break
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
261 if seq in h:
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
262 commands.append(' ' + h.split(seq, 1)[1].lstrip())
4d3b371ed543 fix: issue1895197 - translated help texts in admin.py not displayed correctly.
John Rouillard <rouilj@ieee.org>
parents: 8240
diff changeset
263 break
8472
224ccb8b49ca refactor: change some classes to use __slots__
John Rouillard <rouilj@ieee.org>
parents: 8446
diff changeset
264
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
265 commands.sort()
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
266 commands.append(_(
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
267 """Commands may be abbreviated as long as the abbreviation
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
268 matches only one command, e.g. l == li == lis == list."""))
5110
87b0358790ed Adding some tests for admin.py. Specifically for issue2550572: setting
John Rouillard <rouilj@ieee.org>
parents: 5104
diff changeset
269 sys.stdout.write('\n'.join(commands) + '\n\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
270
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
271 indent_re = re.compile(r'^(\s+)\S+')
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
272
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
273 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
274 """ Produce an HTML command list.
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
275 """
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
276 commands = sorted(iter(self.commands.values()),
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
277 key=operator.attrgetter('__name__'))
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
278 print("<table>")
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1230
diff changeset
279 for command in commands:
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
280 h = _(command.__doc__).split('\n')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
281 name = command.__name__[3:]
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
282 # first line is "<name> <params and stuff>
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
283 usage = h[0][len(name) + 1:].replace('<','&lt;').replace('>','&gt;')[7:]
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
284 print("""
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
285 <tr><td valign=top><strong>%(name)s</strong></td>
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
286 <td><p><tt>%(usage)s</tt></p>
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
287 """ % locals())
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
288 indent = indent_re.match(h[1])
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
289 if indent: indent = len(indent.group(1)) # noqa: E701
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
290 lines_to_process = len(h[1:])
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
291 print('<p>')
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
292 for lineno, line in enumerate(h[1:]):
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
293 line = line.replace('<','&lt;').replace('>','&gt;')
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
294 if indent:
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
295 clean_line = line[indent:]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
296 else:
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
297 clean_line = line
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
298 if not clean_line:
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
299 print('</p><p>')
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
300 continue
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
301 if clean_line.startswith(' '): # indented example line
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
302 print("<pre>%s</pre>" % clean_line)
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
303 else:
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
304 print(clean_line)
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
305 if lineno == lines_to_process:
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
306 print('</p>')
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
307 print('</td></tr>\n')
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
308 print("</table>")
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
309
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
310 def help_all(self):
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
311 print(_("""
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
312 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
313 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
314 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
315 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
316 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
317 or on the command line as "-i tracker".
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
318
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
319 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
320
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
321 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
322 printed results:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
323 . Strings are, well, strings.
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
324 . 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
325 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
326 below.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
327 . 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
328 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
329 . 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
330 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
331 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
332 of nodes joined by commas is accepted.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
333
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
334 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
335 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
336 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
337 quotes. Examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
338 hello world (2 tokens: hello, world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
339 "hello world" (1 token: hello world)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
340 "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
341 Roch\\'e Compaan (2 tokens: Roch'e Compaan)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
342 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
343 \\\\ (1 token: \\)
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
344 \\n\\r\\t (1 token: a newline, carriage-return and tab)
7859
9a74dfeb8620 feat: can use escaped tokens inside quotes including quotes.
John Rouillard <rouilj@ieee.org>
parents: 7847
diff changeset
345 f "test\\"q" (2 tokens: f test"q)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
346
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
347 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
348 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
349 nodes.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
350
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
351 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
352 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
353 the -c) option.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
354
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
355 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
356 login may be specified as either "name" or "name:password".
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
357 . ROUNDUP_LOGIN environment variable
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
358 . the -u command-line option
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
359 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
360 command-line. (See admin guide before using -u.)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
361
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
362 Date format examples:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
363 "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
364 "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
365 "01-25" means <Date yyyy-01-25.00:00:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
366 "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
367 "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
368 "14:25" means <Date yyyy-mm-dd.19:25:00>
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
369 "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
370 "." means "right now"
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
371
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
372 Command help:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
373 """))
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
374 for name, command in list(self.commands.items()):
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
375 print(_('%s:') % name)
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
376 print(' ', _(command.__doc__))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
377
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
378 nl_re = re.compile('[\r\n]')
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
379 # indent_re defined above
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
380
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
381 def listTemplates(self, trace_search=False):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
382 """ List all the available templates.
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
383
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
384 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
385
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
386 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
387 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
388 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
389 2. <prefix>/share/roundup/templates/*
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
390 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
391 installed using setup.py without a prefix
6527
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
392 3. <roundup.admin.__file__>/../../<sys.prefix>/share/\
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
393 roundup/templates/* which is where they will be found if
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
394 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
395 4. <current working dir>/*
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
396 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
397 5. <current working dir>
1863
d2ad3309c415 Clarify listTemplates docstring...
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1775
diff changeset
398 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
399 """
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
400 # 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
401 # and <egg-directory>/share/roundup/templates
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
402 # -- 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
403 # like:
3894
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
404 # /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
405 # 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
406 # /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
407 # (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
408 #
44f2158fe76e Marek Kubica's patch to find templates installed by easy_install
Justus Pendleton <jpend@users.sourceforge.net>
parents: 3889
diff changeset
409 # 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
410 debug = False
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
411 templates = {}
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
412 if debug: print(__file__) # noqa: E701
4900
349a83aca61f Correctly locate templates in a virtualenv (issue2550841)
John Kristensen <john@jerrykan.com>
parents: 4781
diff changeset
413 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
414 path = __file__
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
415 # move up N elements in the path
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
416 for _i in range(N):
1652
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
417 path = os.path.dirname(path)
7fb3bf18babb attempt to fix the template finding
Richard Jones <richard@users.sourceforge.net>
parents: 1634
diff changeset
418 tdir = os.path.join(path, 'share', 'roundup', 'templates')
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
419 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
420 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
421 templates = init.listTemplates(tdir)
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
422 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
423 break
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
424
6524
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
425 # 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
426 # install dir. E.G. a wheel install
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
427 # 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
428 # to create a base path for searching.
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
429
6527
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
430 import sys
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
431 # __file__ should be something like:
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
432 # /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
433 # 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
434 # strip leading / to make os.path.join work right.
6527
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
435 path = __file__
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
436 for _N in 1, 2:
6527
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
437 path = os.path.dirname(path)
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
438 # path is /usr/local/lib/python3.10/site-packages
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
439 tdir = os.path.join(path, sys.prefix[1:], 'share',
5ad7fb912227 issue2551167 - update wheel support.
John Rouillard <rouilj@ieee.org>
parents: 6524
diff changeset
440 'roundup', 'templates')
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
441 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
442 if os.path.isdir(tdir):
f961dbbc3573 issue2551167 roundup issues when using pip install
John Rouillard <rouilj@ieee.org>
parents: 6491
diff changeset
443 templates.update(init.listTemplates(tdir))
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
444
6739
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
445 try:
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
446 # 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
447 # 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
448 # 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
449 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
450 'roundup', 'templates')
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
451 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
452 if os.path.isdir(tdir):
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
453 templates.update(init.listTemplates(tdir))
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
454 # 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
455
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
456 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
457 'roundup', 'templates')
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
458 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
459 if os.path.isdir(tdir):
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
460 templates.update(init.listTemplates(tdir))
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
461 except AttributeError:
00fe67eb8a91 Update locations templates and locale files are stored
John Rouillard <rouilj@ieee.org>
parents: 6658
diff changeset
462 pass # sys.base_prefix doesn't work under python2
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
463
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
464 # 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
465 templates.update(init.listTemplates(os.getcwd()))
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
466 if debug or trace_search: print(os.getcwd() + '/*') # noqa: E701
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
467
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
468 # 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
469 template = init.loadTemplateInfo(os.getcwd())
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
470 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
471 if template:
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
472 if debug: print(" Found template %s" % # noqa: E701
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
473 template['name'])
1593
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
474 templates[template['name']] = template
6318b21b0f73 more places to look for templates
Richard Jones <richard@users.sourceforge.net>
parents: 1591
diff changeset
475
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
476 return templates
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
477
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
478 def help_initopts(self):
1591
21312a7564fd moving templates around
Richard Jones <richard@users.sourceforge.net>
parents: 1570
diff changeset
479 templates = self.listTemplates()
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
480 print(_('Templates:'), ', '.join(templates))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
481 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
482 backends = roundup.backends.list_backends()
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
483 print(_('Back ends:'), ', '.join(backends))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
484
5163
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
485 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
486 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
487 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
488 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
489 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
490 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
491 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
492 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
493 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
494 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
495 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
496 return default
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
497 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
498
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
499 def do_commit(self, args): # noqa: ARG002
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
500 ''"""Usage: commit
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
501 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
502
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
503 The changes made during an interactive session are not
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
504 automatically written to the database - they must be committed
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
505 using this command.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
506
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
507 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
508 they are successful.
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 self.db.commit()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
511 self.db_uncommitted = False
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
512 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
513
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
514 def do_create(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
515 ''"""Usage: create classname property=value ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
516 Create a new entry of a given class.
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 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
519 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
520 command.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
521 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
522 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
523 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
524 from roundup import hyperdb
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
525
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
526 classname = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
527
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
528 # get the class
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
529 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
530
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
531 # now do a create
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
532 props = {}
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
533 properties = cl.getprops(protected=0)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
534 if len(args) == 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
535 # ask for the properties
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
536 for key in properties:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
537 if key == 'id': continue # noqa: E701
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
538 value = properties[key]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
539 name = value.__class__.__name__
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
540 if isinstance(value, hyperdb.Password):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
541 again = None
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
542 while value != again:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
543 value = getpass.getpass(_('%(propname)s (Password): ')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
544 %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
545 {'propname': key.capitalize()})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
546 again = getpass.getpass(_(' %(propname)s (Again): ')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
547 %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
548 {'propname': key.capitalize()})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
549 if value != again:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
550 print(_('Sorry, try again...'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
551 if value:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
552 props[key] = value
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
553 else:
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
554 value = self.my_input(_(
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
555 '%(propname)s (%(proptype)s): ') % {
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
556 'propname': key.capitalize(), 'proptype': name})
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
557 if value:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
558 props[key] = value
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
559 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
560 props = self.props_from_args(args[1:])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
561
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
562 # convert types
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
563 try:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
564 for propname in props:
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
565 props[propname] = hyperdb.rawToHyperdb(self.db, cl, None,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
566 propname,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
567 props[propname])
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
568 except hyperdb.HyperdbValueError as message:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
569 raise UsageError(message)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
570
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
571 # check for the key property
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
572 propname = cl.getkey()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
573 if propname and propname not in props:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
574 raise UsageError(_('you must provide the "%(propname)s" '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
575 'property.') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
576
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
577 # do the actual create
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
578 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
579 sys.stdout.write(cl.create(**props) + '\n')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
580 except (TypeError, IndexError, ValueError) as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
581 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
582 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
583 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
584
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
585 def do_display(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
586 ''"""Usage: display designator[,designator]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
587 Show the property values for the given node(s).
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 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
590 eg. bug1, user10, ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
591
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
592 This lists the properties and their associated values
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
593 for the given node.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
594 """
2889
accb3b411ef6 instructions and method for generating config.ini
Richard Jones <richard@users.sourceforge.net>
parents: 2856
diff changeset
595 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
596 raise UsageError(_('Not enough arguments supplied'))
7203
12a3cd86668f auto update 'password_pbkdf2_default_rounds' "
John Rouillard <rouilj@ieee.org>
parents: 7182
diff changeset
597
7588
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
598 display_protected = self.settings['display_protected']
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
599 display_header = self.settings['display_header']
7588
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
600
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
601 # decode the node designator
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
602 for designator in args[0].split(','):
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
603 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
604 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
605 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
606 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
607
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
608 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
609 cl = self.get_class(classname)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
610
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
611 # display the values
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
612 normal_props = sorted(cl.properties)
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
613
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
614 keys = sorted(cl.getprops()) if display_protected else normal_props
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
615
7588
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
616 if display_header:
7549
73dfa9df9fb0 issue685275 - show retired/unretired items in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7547
diff changeset
617 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
618 print('\n[%s (%s)]' % (designator, status))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
619 for key in keys:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
620 value = cl.get(nodeid, key)
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
621 # 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
622 # with space.
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
623 if display_protected or display_header: # noqa: SIM108
7588
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
624 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
625 else:
8329b2227adb fix: restore roundup-admin display output format w/o pragmas
John Rouillard <rouilj@ieee.org>
parents: 7566
diff changeset
626 protected = ""
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
627 print(_('%(protected)s%(key)s: %(value)s') % locals())
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
628
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
629 def do_export(self, args, export_files=True):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
630 ''"""Usage: export [[-]class[,class]] export_dir
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
631 Export the database and file content.
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
632
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
633 Database content is exported to colon separated files.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
634 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
635 use the exporttables command.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
636
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
637 Optionally limit the export to just the named classes
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
638 or exclude the named classes, if the 1st argument
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
639 starts with '-'.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
640
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
641 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
642 colon-separated-value files that are placed in the nominated
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
643 export_dir directory.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
644 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
645 # grab the directory to export to
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
646 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
647 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
648
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
649 export_dir = args[-1]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
650
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
651 # get the list of classes to export
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
652 if len(args) == 2:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
653 if args[0].startswith('-'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
654 classes = [c for c in self.db.classes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
655 if c not in args[0][1:].split(',')]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
656 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
657 classes = args[0].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
658 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
659 classes = self.db.classes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
660
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
661 class colon_separated(csv.excel):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
662 delimiter = ':'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
663
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
664 # make sure target dir exists
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
665 if not os.path.exists(export_dir):
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
666 os.makedirs(export_dir)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
667
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
668 # maximum csv field length exceeding configured size?
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
669 max_len = self.db.config.CSV_FIELD_SIZE
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
670
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
671 # do all the classes specified
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
672 for classname in classes:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
673 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
674
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
675 if not export_files and hasattr(cl, 'export_files'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
676 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
677 classname)
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
678
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
679 with open(os.path.join(export_dir, classname + '.csv'), 'w') as f:
7882
77c109725a7e fix: import/export under windows.
John Rouillard <rouilj@ieee.org>
parents: 7869
diff changeset
680 writer = csv.writer(f, colon_separated, lineterminator='\n')
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
681
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
682 propnames = cl.export_propnames()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
683 fields = propnames[:]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
684 fields.append('is retired')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
685 writer.writerow(fields)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
686
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
687 # 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
688 # with retired nodes first. Retired nodes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
689 # must occur before a non-retired node with
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
690 # the same key. Otherwise you get an
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
691 # IntegrityError: UNIQUE constraint failed:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
692 # _class.__retired__, _<class>._<keyname>
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
693 # on imports to rdbms.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
694 all_nodes = cl.getnodeids()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
695
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
696 classkey = cl.getkey()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
697 if classkey: # False sorts before True, so negate is_retired
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
698 keysort = lambda i: ( # noqa: E731
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
699 cl.get(i, classkey), # noqa: B023 cl is not loop var
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
700 not cl.is_retired(i), # noqa: B023 cl is not loop var
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
701 )
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
702 all_nodes.sort(key=keysort)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
703 # if there is no classkey no need to sort
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
704
7847
d523d5c648e9 feat: add Progress output for admin export/exporttables
John Rouillard <rouilj@ieee.org>
parents: 7832
diff changeset
705 for nodeid in support.Progress( "Exporting %s" %
d523d5c648e9 feat: add Progress output for admin export/exporttables
John Rouillard <rouilj@ieee.org>
parents: 7832
diff changeset
706 classname, all_nodes):
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
707 if self.verbose:
7847
d523d5c648e9 feat: add Progress output for admin export/exporttables
John Rouillard <rouilj@ieee.org>
parents: 7832
diff changeset
708 sys.stdout.write('\rExporting %s - %s ' %
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
709 (classname, nodeid))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
710 sys.stdout.flush()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
711 node = cl.getnode(nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
712 exp = cl.export_list(propnames, nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
713 lensum = sum([len(repr_export(node[p])) for
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
714 p in propnames])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
715 # 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
716 # 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
717 d = sum([len(x) for x in exp]) - lensum
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
718 if not d > 0:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
719 raise AssertionError("Bad assertion d > 0")
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
720 for p in propnames:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
721 ll = len(repr_export(node[p])) + d
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
722 if ll > max_len:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
723 max_len = ll
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
724 writer.writerow(exp)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
725 if export_files and hasattr(cl, 'export_files'):
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
726 cl.export_files(export_dir, nodeid)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
727
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
728 # export the journals
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
729 with open(os.path.join(export_dir,
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
730 classname + '-journals.csv'), 'w') as jf:
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
731 if self.verbose:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
732 sys.stdout.write("\nExporting Journal for %s\n" %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
733 classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
734 sys.stdout.flush()
7882
77c109725a7e fix: import/export under windows.
John Rouillard <rouilj@ieee.org>
parents: 7869
diff changeset
735 journals = csv.writer(jf, colon_separated, lineterminator='\n')
7847
d523d5c648e9 feat: add Progress output for admin export/exporttables
John Rouillard <rouilj@ieee.org>
parents: 7832
diff changeset
736 for row in support.Progress(" Writing journals",
d523d5c648e9 feat: add Progress output for admin export/exporttables
John Rouillard <rouilj@ieee.org>
parents: 7832
diff changeset
737 cl.export_journals()):
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
738 journals.writerow(row)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
739 if max_len > self.db.config.CSV_FIELD_SIZE:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
740 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
741 max_len, file=sys.stderr)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
742 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
743
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
744 def do_exporttables(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
745 ''"""Usage: exporttables [[-]class[,class]] export_dir
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
746 Export only the database to files, no file content.
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
747
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
748 Database content is exported to colon separated files.
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
749 The files below $TRACKER_HOME/db/files/ (which can be
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
750 archived separately) are not part of the export.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
751 To include the files, use the export command.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
752
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
753 Optionally limit the export to just the named classes
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
754 or exclude the named classes, if the 1st argument
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
755 starts with '-'.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
756
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
757 This action exports the current data from the database into
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
758 colon-separated-value files that are placed in the export_dir
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
759 destination directory.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
760 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
761 return self.do_export(args, export_files=False)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
762
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
763 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
764 ''"""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
765 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
766
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
767 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
768 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
769 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
770 '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
771 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
772 """
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
773 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
774 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
775 classname = args[0]
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
776 # get the class
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
777 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
778
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
779 # 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
780 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
781
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
782 # 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
783 # multiple , separated values become a list
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
784 for propname, prop_value in props.items():
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
785 values = prop_value.split(',') if ',' in prop_value \
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
786 else [prop_value]
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
787
6177
41907e1f9c3f Fix postgres/mysql testing; test filter.
John Rouillard <rouilj@ieee.org>
parents: 6176
diff changeset
788 props[propname] = []
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
789 # start handling transitive props
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
790 # 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
791 # start at issue
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
792 curclass = cl
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
793 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
794 if '.' in propname:
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
795 # 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
796 # 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
797 for pn in propname.split('.'):
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
798 try:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
799 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
800 # get classname for this link
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
801 try:
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
802 curclassname = curclass.getprops()[pn].classname
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
803 except KeyError:
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
804 raise UsageError(_(
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
805 "Class %(curclassname)s has "
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
806 "no property %(pn)s in %(propname)s.") %
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
807 locals())
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
808 # get class object
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
809 curclass = self.get_class(curclassname)
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
810 except AttributeError:
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
811 # 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
812 # 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
813 pass
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
814
6177
41907e1f9c3f Fix postgres/mysql testing; test filter.
John Rouillard <rouilj@ieee.org>
parents: 6176
diff changeset
815 for value in values:
6250
95183d73ac64 issue2550522 - add transitive searching to filter in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 6208
diff changeset
816 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
817 lastprop, value)
6177
41907e1f9c3f Fix postgres/mysql testing; test filter.
John Rouillard <rouilj@ieee.org>
parents: 6176
diff changeset
818 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
819
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
820 # now do the filter
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
821 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
822 try:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
823 output_items = cl.filter(None, **props)
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
824 if self.print_designator:
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
825 output_items = [classname + i for i in output_items]
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
826
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
827 if self.separator:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
828 print(self.separator.join(output_items))
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
829 else:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
830 print(output_items)
6176
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
831 except KeyError:
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
832 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
833 '"%(propname)s"') % locals())
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
834 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
835 raise UsageError(message)
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
836 return 0
d25638d1826c Add roundup-admin filter command; fix bad doc example; add tests
John Rouillard <rouilj@ieee.org>
parents: 6001
diff changeset
837
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
838 def do_find(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
839 ''"""Usage: find classname propname=value ...
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
840 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
841
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
842 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
843 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
844 value.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
845 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
846 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
847 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
848 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
849 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
850 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
851
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
852 # handle the propname=value argument
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
853 props = self.props_from_args(args[1:])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
854
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
855 # convert the user-input value to a value used for find()
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
856 for propname, prop_value in props.items():
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
857 values = prop_value.split(',') if ',' in prop_value \
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
858 else [prop_value]
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
859
2494
ea7fb2f416db fixed RDBMS Class.find() to handle None value in multiple find...
Richard Jones <richard@users.sourceforge.net>
parents: 2450
diff changeset
860 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
861 for value in values:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
862 val = hyperdb.rawToHyperdb(self.db, cl, None,
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
863 propname, value)
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
864 if isinstance(val, list):
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
865 for entry in val:
3314
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
866 d[entry] = 1
4372716a675a merge from maint-0-8
Richard Jones <richard@users.sourceforge.net>
parents: 3295
diff changeset
867 else:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
868 d[val] = 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
869
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
870 # now do the find
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
871 try:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
872 output_items = cl.find(**props)
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
873 if self.print_designator:
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
874 output_items = [classname + i for i in output_items]
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
875
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
876 if self.separator:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
877 print(self.separator.join(output_items))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
878 else:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
879 print(output_items)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
880 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
881 raise UsageError(_('%(classname)s has no property '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
882 '"%(propname)s"') % locals())
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5245
diff changeset
883 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
884 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
885 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
886
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
887 def do_genconfig(self, args, update=False):
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
888 ''"""Usage: genconfig filename
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
889 Create a new tracker config file with default values in filename.
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
890 See also updateconfig.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
891 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
892 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
893 raise UsageError(_('Not enough arguments supplied'))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
894
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
895 if update:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
896 # load current config for writing
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
897 config = CoreConfig(self.tracker_home)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
898
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
899 # change config to update settings to new defaults
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
900 # where prior defaults were chosen
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
901 default_ppdr = config._get_option(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
902 'PASSWORD_PBKDF2_DEFAULT_ROUNDS')._default_value
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
903
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
904 print("") # put a blank line before feedback
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
905 if config.PASSWORD_PBKDF2_DEFAULT_ROUNDS in [10000]:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
906 print(_("Changing option\n"
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
907 " 'password_pbkdf2_default_rounds'\n"
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
908 "from old default of %(old_number)s to new "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
909 "default of %(new_number)s.") % {
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
910 "old_number":
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
911 config.PASSWORD_PBKDF2_DEFAULT_ROUNDS,
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
912 "new_number": default_ppdr,
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
913 })
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
914 config.PASSWORD_PBKDF2_DEFAULT_ROUNDS = default_ppdr
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
915
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
916 if default_ppdr > config.PASSWORD_PBKDF2_DEFAULT_ROUNDS:
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
917 print(_("Update "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
918 "'password_pbkdf2_default_rounds' "
7869
eb1fbbd53b6c fix: roundup-admin updateconfig warn on mysql_{charset/collation} mismatch
John Rouillard <rouilj@ieee.org>
parents: 7859
diff changeset
919 "to a number equal to or larger\n than %s.\n") %
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
920 default_ppdr)
7869
eb1fbbd53b6c fix: roundup-admin updateconfig warn on mysql_{charset/collation} mismatch
John Rouillard <rouilj@ieee.org>
parents: 7859
diff changeset
921
eb1fbbd53b6c fix: roundup-admin updateconfig warn on mysql_{charset/collation} mismatch
John Rouillard <rouilj@ieee.org>
parents: 7859
diff changeset
922 if not config.RDBMS_MYSQL_COLLATION.startswith(
eb1fbbd53b6c fix: roundup-admin updateconfig warn on mysql_{charset/collation} mismatch
John Rouillard <rouilj@ieee.org>
parents: 7859
diff changeset
923 config.RDBMS_MYSQL_CHARSET + "_"):
eb1fbbd53b6c fix: roundup-admin updateconfig warn on mysql_{charset/collation} mismatch
John Rouillard <rouilj@ieee.org>
parents: 7859
diff changeset
924 print(_("Check the rdbms mysql_* settings. Your charset and "
eb1fbbd53b6c fix: roundup-admin updateconfig warn on mysql_{charset/collation} mismatch
John Rouillard <rouilj@ieee.org>
parents: 7859
diff changeset
925 "collations may need\n"
eb1fbbd53b6c fix: roundup-admin updateconfig warn on mysql_{charset/collation} mismatch
John Rouillard <rouilj@ieee.org>
parents: 7859
diff changeset
926 " to be changed. See upgrading instructions.\n"))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
927 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
928 # generate default config
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
929 config = CoreConfig()
6191
5713ddd87fd3 Fix help text.
John Rouillard <rouilj@ieee.org>
parents: 6187
diff changeset
930
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
931 config.save(args[0])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
932
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
933 def do_get(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
934 ''"""Usage: get property designator[,designator]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
935 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
936
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
937 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
938 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
939
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
940 Retrieves the property value of the nodes specified
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
941 by the designators.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
942 """
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
943 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
944 raise UsageError(_('Not enough arguments supplied'))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
945 propname = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
946 designators = args[1].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
947 linked_props = []
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
948 for designator in designators:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
949 # 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
950 try:
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
951 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
952 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
953 raise UsageError(message)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
954
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
955 # get the class
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
956 cl = self.get_class(classname)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
957 try:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
958 if not (self.separator or self.print_designator):
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
959 print(cl.get(nodeid, propname))
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
960 continue
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
961
7755
417c8ddc98ac fix: undo last minute edit and try to get make checkin clean.
John Rouillard <rouilj@ieee.org>
parents: 7754
diff changeset
962 properties = cl.getprops()
417c8ddc98ac fix: undo last minute edit and try to get make checkin clean.
John Rouillard <rouilj@ieee.org>
parents: 7754
diff changeset
963 prop_obj = properties[propname]
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
964 if not (isinstance(prop_obj,
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
965 (hyperdb.Link, hyperdb.Multilink))):
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
966 raise UsageError(_(
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
967 'property %s is not of type'
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
968 ' Multilink or Link so -d flag does not '
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
969 'apply.') % propname)
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
970 propclassname = self.db.getclass(
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
971 prop_obj.classname).classname
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
972
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
973 output_items = cl.get(nodeid, propname)
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
974 if self.print_designator:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
975 output_items = [propclassname + i for i in output_items]
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
976
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
977 if self.separator:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
978 print(self.separator.join(output_items))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
979 else:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
980 # default is to list each on a line
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
981 print('\n'.join(output_items))
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
982
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
983 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
984 raise UsageError(_('no such %(classname)s node '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
985 '"%(nodeid)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
986 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
987 raise UsageError(_('no such %(classname)s property '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
988 '"%(propname)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
989 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
990
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
991 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
992 ''"""Usage: help topic
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
993 Give help about topic.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
994
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
995 commands -- list commands
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
996 <command> -- help specific to a command
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
997 initopts -- init command options
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
998 all -- all available help
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
999 """
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1000 topic = args[0] if len(args) > 0 else 'help'
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1001
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1002 # try help_ methods
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1003 if topic in self.help:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1004 self.help[topic]()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1005 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1006
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1007 # try command docstrings
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1008 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1009 cmd_docs = self.commands.get(topic)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1010 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1011 print(_('Sorry, no help for "%(topic)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1012 return 1
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1013
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1014 # display the help for each match, removing the docstring indent
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1015 for _name, do_function in cmd_docs:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1016 lines = nl_re.split(_(do_function.__doc__))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1017 print(lines[0])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1018 indent = indent_re.match(lines[1])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1019 if indent: indent = len(indent.group(1)) # noqa: E701
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1020 for line in lines[1:]:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1021 if indent:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1022 print(line[indent:])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1023 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1024 print(line)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1025 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1026
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1027 def do_history(self, args):
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1028 ''"""Usage: history designator [skipquiet] [raw]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1029 Show the history entries of a designator.
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 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1032 eg. bug1, user10, ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1033
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1034 Lists the journal entries viewable by the user for the node
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1035 identified by the designator. If skipquiet is added, journal
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1036 entries for quiet properties are not shown. If raw is added,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1037 the output is the raw representation of the journal entries.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1038 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1039
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1040 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1041 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1042 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1043 classname, nodeid = hyperdb.splitDesignator(args[0])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1044 except hyperdb.DesignatorError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1045 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1046
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1047 valid_args = ['skipquiet', 'raw']
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1048
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1049 if len(args) >= 2:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1050 check = [a for a in args[1:] if a not in valid_args]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1051 if check:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1052 raise UsageError(
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1053 _("Unexpected argument(s): %s. "
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1054 "Expected 'skipquiet' or 'raw'.") % ", ".join(check))
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1055
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1056 skipquiet = 'skipquiet' in args[1:]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1057 raw = 'raw' in args[1:]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1058
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1059 getclass = self.db.getclass
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1060
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1061 def get_prop_name(key, prop_name):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1062 # getclass and classname from enclosing method
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1063 klass = getclass(classname)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1064 try:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1065 property_obj = klass.properties[prop_name]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1066 except KeyError:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1067 # the property has been removed from the schema.
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1068 return None
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1069 if isinstance(property_obj,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1070 (hyperdb.Link, hyperdb.Multilink)):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1071 prop_class = getclass(property_obj.classname)
7800
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1072 label_prop_name = prop_class.labelprop(default_to_id=True)
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1073 if label_prop_name not in ['id', 'title']:
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1074 # Don't return 'id', its value is the key. If name is
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1075 # empty, the caller will use the classname with the key
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1076 # as the identifier: show "issue23" not "23(23)".
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1077 # Also don't use the title. It's too long in most
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1078 # cases. show: "issue23" not "please help me with
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1079 # samba use athentication issue(23)"
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1080 return prop_class.get(key, label_prop_name)
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1081 # None indicates that there is no viable label_prop
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1082 return None
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1083 return None
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1084
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1085 def get_prop_class(prop_name):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1086 # getclass and classname from enclosing method
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1087 klass = getclass(classname)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1088 try:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1089 property_obj = klass.properties[prop_name]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1090 except KeyError:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1091 # the property has been removed from the schema.
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1092 return None
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1093 if isinstance(property_obj,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1094 (hyperdb.Link, hyperdb.Multilink)):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1095 prop_class = getclass(property_obj.classname)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1096 return prop_class.classname
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1097 return None # it's not a link
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1098
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1099 def _format_tuple_change(data, prop):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1100 ''' ('-', ['2', '4'] ->
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1101 "removed fred(2), jim(6)"
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1102 '''
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1103 if data[0] == '-':
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1104 op = _("removed")
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1105 elif data[0] == '+':
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1106 op = _("added")
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1107 else:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1108 raise ValueError(_("Unknown history set operation '%s'. "
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1109 "Expected +/-.") % op)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1110 op_params = data[1]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1111 name = get_prop_name(op_params[0], prop)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1112 if name is not None:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1113 list_items = ["%s(%s)" %
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1114 (get_prop_name(o, prop), o)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1115 for o in op_params]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1116 else:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1117 propclass = get_prop_class(prop)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1118 if propclass: # noqa: SIM108
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1119 list_items = ["%s%s" % (propclass, o)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1120 for o in op_params]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1121 else:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1122 list_items = op_params
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1123
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1124 return "%s: %s" % (op, ", ".join(list_items))
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1125
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1126 def format_report_class(_data):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1127 """Eat the empty data dictionary or None"""
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1128 return classname
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1129
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1130 def format_link(data):
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1131 '''data = ('issue', '157', 'dependson')'''
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1132 # .Hint added issue23 to superseder
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1133 f = _("added %(class)s%(item_id)s to %(propname)s")
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1134 return f % {
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1135 'class': data[0], 'item_id': data[1], 'propname': data[2]}
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1136
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1137 def format_set(data):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1138 '''data = set {'fyi': None, 'priority': '5'}
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1139 set {'fyi': '....\ned through cleanly', 'priority': '3'}
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1140 '''
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1141 result = []
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1142
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1143 # Note that set data is the old value. So don't use
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1144 # current/future tense in sentences.
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1145
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1146 for prop, value in data.items():
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1147 if isinstance(value, str):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1148 name = get_prop_name(value, prop)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1149 if name:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1150 result.append(
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1151 # .Hint read as: assignedto was admin(1)
7821
aa1fd8704469 fix(i18n): clean up translator hint
John Rouillard <rouilj@ieee.org>
parents: 7802
diff changeset
1152 # where assignedto is the property
aa1fd8704469 fix(i18n): clean up translator hint
John Rouillard <rouilj@ieee.org>
parents: 7802
diff changeset
1153 # admin is the key name for value 1
7800
2d4684e4702d fix: enhancement to history command output and % template fix.
John Rouillard <rouilj@ieee.org>
parents: 7799
diff changeset
1154 _("%(prop)s was %(name)s(%(value)s)") % {
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1155 "prop": prop, "name": name, "value": value})
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1156 else:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1157 # use repr so strings with embedded \n etc. don't
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1158 # generate newlines in output. Try to keep each
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1159 # journal entry on 1 line.
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1160 result.append(_("%(prop)s was %(value)s") % {
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1161 "prop": prop, "value": repr(value)})
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1162 elif isinstance(value, list):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1163 # test to see if there is a key prop.
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1164 # Assumption, geting None here means no key
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1165 # is defined for the property's class.
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1166 name = get_prop_name(value[0], prop)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1167 if name is not None:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1168 list_items = ["%s(%s)" %
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1169 (get_prop_name(v, prop), v)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1170 for v in value]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1171 else:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1172 prop_class = get_prop_class(prop)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1173 if prop_class: # noqa: SIM108
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1174 list_items = ["%s%s" % (prop_class, v)
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1175 for v in value]
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1176 else:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1177 list_items = value
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1178
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1179 result.append(_("%(prop)s was [%(value_list)s]") % {
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1180 "prop": prop, "value_list": ", ".join(list_items)})
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1181 elif isinstance(value, tuple):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1182 # operation data
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1183 decorated = [_format_tuple_change(data, prop)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1184 for data in value]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1185 result.append(# .Hint modified nosy: added demo(3)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1186 _("modified %(prop)s: %(how)s") % {
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1187 "prop": prop, "how": ", ".join(decorated)})
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1188 else:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1189 result.append(_("%(prop)s was %(value)s") % {
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1190 "prop": prop, "value": value})
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1191
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1192 return '; '.join(result)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1193
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1194 def format_unlink(data):
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1195 '''data = ('issue', '157', 'dependson')'''
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1196 return "removed %s%s from %s" % (data[0], data[1], data[2])
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1197
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1198 formatters = {
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1199 "create": format_report_class,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1200 "link": format_link,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1201 "restored": format_report_class,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1202 "retired": format_report_class,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1203 "set": format_set,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1204 "unlink": format_unlink,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1205 }
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1206
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1207 try:
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1208 # returns a tuple: (
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1209 # [0] = nodeid
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1210 # [1] = date
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1211 # [2] = userid
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1212 # [3] = operation
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1213 # [4] = details
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1214 raw_history = self.db.getclass(classname).history(nodeid,
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1215 skipquiet=skipquiet)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1216 if raw:
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1217 print(raw_history)
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1218 return 0
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1219
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1220 def make_readable(hist):
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1221 return "%s(%s) %s %s" % (self.db.user.get(hist[2], 'username'),
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1222 hist[1],
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1223 hist[3],
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1224 formatters.get(hist[3], lambda x: x)(
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1225 hist[4]))
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1226 printable_history = [make_readable(hist) for hist in raw_history]
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1227
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
1228 print("\n".join(printable_history))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1229 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1230 raise UsageError(_('no such class "%(classname)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1231 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1232 raise UsageError(_('no such %(classname)s node '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1233 '"%(nodeid)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1234 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1235
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1236 def do_import(self, args, import_files=True):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1237 ''"""Usage: import import_dir
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1238 Import a database and file contents from the directory.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1239
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1240 The directory should have the same format as one containing
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1241 the output of export. There are two files imported per class.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1242 The files used in the import are:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1243
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1244 <class>.csv
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1245 This must define the same properties as the class
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1246 (including having a "header" line with those
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1247 property names.)
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1248
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1249 <class>-journals.csv
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1250 This defines the journals for the items
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1251 being imported.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1252
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1253 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
1254 import file, thus replacing any existing content.
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 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
1257 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
1258 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
1259 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1260 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
1261 raise UsageError(_('Not enough arguments supplied'))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1262
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1263 if hasattr(csv, 'field_size_limit'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1264 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
1265
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
1266 # default value is 10000, only go through this if default
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
1267 # is different.
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1268 if self.settings['savepoint_limit'] != self._default_savepoint_setting:
7687
4dda4a9dfe0b doc: add comment on method to set savepoint_limit dynamically
John Rouillard <rouilj@ieee.org>
parents: 7668
diff changeset
1269 # create a new option on the fly in the config under the
4dda4a9dfe0b doc: add comment on method to set savepoint_limit dynamically
John Rouillard <rouilj@ieee.org>
parents: 7668
diff changeset
1270 # rdbms section. It is used by the postgresql backend's
4dda4a9dfe0b doc: add comment on method to set savepoint_limit dynamically
John Rouillard <rouilj@ieee.org>
parents: 7668
diff changeset
1271 # checkpoint_data method.
7668
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
1272 self.db.config.add_option(Option(self.db.config,
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
1273 "rdbms", "savepoint_limit"))
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
1274 self.db.config.options["RDBMS_SAVEPOINT_LIMIT"].set(
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
1275 self.settings['savepoint_limit'])
5b41018617f2 fix: out of memory error when importing under postgresql
John Rouillard <rouilj@ieee.org>
parents: 7650
diff changeset
1276
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1277 # directory to import from
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1278 import_dir = args[0]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1279
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1280 class colon_separated(csv.excel):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1281 delimiter = ':'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1282
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1283 # import all the files
8088
1045425c23b2 refactor!: replace os.listdir() with os.scandir()
John Rouillard <rouilj@ieee.org>
parents: 7998
diff changeset
1284 for dir_entry in os.scandir(import_dir):
1045425c23b2 refactor!: replace os.listdir() with os.scandir()
John Rouillard <rouilj@ieee.org>
parents: 7998
diff changeset
1285 filename = dir_entry.name
1045425c23b2 refactor!: replace os.listdir() with os.scandir()
John Rouillard <rouilj@ieee.org>
parents: 7998
diff changeset
1286 classname, ext = os.path.splitext(filename)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1287 # we only care about CSV files
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1288 if ext != '.csv' or classname.endswith('-journals'):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1289 continue
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1290
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1291 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1292
8224
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1293 maxid = self.import_class(dir_entry.path, colon_separated, cl,
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1294 import_dir, import_files)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1295
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1296 # import the journals
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1297 with open(os.path.join(import_dir, classname + '-journals.csv'), 'r') as f:
7882
77c109725a7e fix: import/export under windows.
John Rouillard <rouilj@ieee.org>
parents: 7869
diff changeset
1298 reader = csv.reader(f, colon_separated, lineterminator='\n')
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1299 cl.import_journals(reader)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1300
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1301 # (print to sys.stdout here to allow tests to squash it .. ugh)
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1302 print('setting', classname, maxid + 1, file=sys.stdout)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1303
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1304 # set the id counter
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1305 self.db.setid(classname, str(maxid + 1))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1306
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1307 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1308 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1309
8224
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1310 def import_class(self, filepath, csv_format_class, hyperdb_class,
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1311 import_dir, import_files):
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1312 """Import class given csv class filepath, csv_format_class and
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1313 hyperdb_class, directory for import, and boolean to import
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1314 files.
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1315
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1316 Optionally import files as well if import_files is True
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1317 otherwise just import database data.
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1318
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1319 Returns: maxid seen in csv file
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1320 """
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1321
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1322 maxid = 1
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1323
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1324 # ensure that the properties and the CSV file headings match
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1325 with open(filepath, 'r') as f:
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1326 reader = csv.reader(f, csv_format_class, lineterminator='\n')
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1327 file_props = None
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1328 # loop through the file and create a node for each entry
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1329 for n, r in enumerate(reader):
8541
7a7f6ee0a09e bug: import/importables fail to set newid correctly.
John Rouillard <rouilj@ieee.org>
parents: 8540
diff changeset
1330 # read the file header
8224
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1331 if file_props is None:
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1332 file_props = r
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1333 continue
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1334
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1335 if self.verbose:
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1336 sys.stdout.write('\rImporting %s - %s' % (
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1337 hyperdb_class.classname, n))
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1338 sys.stdout.flush()
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1339
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1340 # do the import and figure the current highest nodeid
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1341 nodeid = hyperdb_class.import_list(file_props, r)
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1342 if hasattr(hyperdb_class, 'import_files') and import_files:
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1343 hyperdb_class.import_files(import_dir, nodeid)
8541
7a7f6ee0a09e bug: import/importables fail to set newid correctly.
John Rouillard <rouilj@ieee.org>
parents: 8540
diff changeset
1344
7a7f6ee0a09e bug: import/importables fail to set newid correctly.
John Rouillard <rouilj@ieee.org>
parents: 8540
diff changeset
1345 maxid = max(maxid, int(nodeid))
8224
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1346
8541
7a7f6ee0a09e bug: import/importables fail to set newid correctly.
John Rouillard <rouilj@ieee.org>
parents: 8540
diff changeset
1347 # (print to sys.stdout here to allow tests to squash it .. ugh)
7a7f6ee0a09e bug: import/importables fail to set newid correctly.
John Rouillard <rouilj@ieee.org>
parents: 8540
diff changeset
1348 print(file=sys.stdout)
8224
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1349
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1350 return maxid
5913ec1673c2 refactor: extract code as method from do_import
John Rouillard <rouilj@ieee.org>
parents: 8119
diff changeset
1351
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1352 def do_importtables(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1353 ''"""Usage: importtables export_dir
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1354 This imports the database tables exported using exporttables.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1355
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1356 It does not import the content of files like msgs and files.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1357 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1358 return self.do_import(args, import_files=False)
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 def do_initialise(self, tracker_home, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1361 ''"""Usage: initialise [adminpw]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1362 Initialise a new Roundup tracker.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1363
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1364 The administrator details will be set at this step.
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 Execute the tracker's initialisation function dbinit.init()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1367 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1368 # password
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1369 if len(args) > 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1370 adminpw = args[1]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1371 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1372 adminpw = ''
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1373 confirm = 'x'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1374 while adminpw != confirm:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1375 adminpw = getpass.getpass(_('Admin Password: '))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1376 confirm = getpass.getpass(_(' Confirm: '))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1377
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1378 # make sure the tracker home is installed
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1379 if not os.path.exists(tracker_home):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1380 raise UsageError(_('Instance home does not exist') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1381 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1382 tracker = roundup.instance.open(tracker_home)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1383 except roundup.instance.TrackerError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1384 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
1385 except OptionValueError as e:
36916abe36e9 Handle traceback when OptionValueError raised during init.
John Rouillard <rouilj@ieee.org>
parents: 7397
diff changeset
1386 raise UsageError(e)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1387
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1388 # is there already a database?
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1389 if tracker.exists():
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1390 if not self.force:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1391 ok = self.my_input(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1392 """WARNING: The database is already initialised!
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1393 If you re-initialise it, you will lose all the data!
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1394 Erase it? Y/N: """))
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1395 if ok.strip().lower() != 'y':
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1396 return 0
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 # nuke it
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1399 tracker.nuke()
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 # GO
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1402 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1403 tracker.init(password.Password(adminpw, config=tracker.config),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1404 tx_Source='cli')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1405 except OptionUnsetError as e:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1406 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
1407 'error': str(e), 'tracker_home': tracker_home})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1408
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1409 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1410
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1411 def do_install(self, tracker_home, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1412 ''"""Usage: install [template [backend [key=val[,key=val]]]]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1413 Install a new Roundup tracker.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1414
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1415 The command will prompt for the tracker home directory
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1416 (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
1417 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
1418 as arguments, in that order.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1419
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1420 Command line arguments following the backend allows you to
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1421 pass initial values for config options. For example, passing
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1422 "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
1423 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
1424 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
1425 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
1426
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1427 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
1428 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
1429 initial database contents before running that command by editing
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1430 the tracker's dbinit.py module init() function.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1431
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1432 See also initopts help.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1433 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1434 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1435 raise UsageError(_('Not enough arguments supplied'))
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 # make sure the tracker home can be created
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1438 tracker_home = os.path.abspath(tracker_home)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1439 parent = os.path.split(tracker_home)[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1440 if not os.path.exists(parent):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1441 raise UsageError(_('Instance home parent directory "%(parent)s"'
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1442 ' does not exist') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1443
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1444 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
1445 # check for both old- and new-style configs
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1446 if list(filter(os.path.exists, [config_ini_file,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1447 os.path.join(tracker_home, 'config.py')])):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1448 if not self.force:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1449 ok = self.my_input(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1450 """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
1451 If you re-install it, you will lose all the data!
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1452 Erase it? Y/N: """) % locals())
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1453 if ok.strip().lower() != 'y':
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1454 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1455
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1456 # clear it out so the install isn't confused
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1457 shutil.rmtree(tracker_home)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1458
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1459 # select template
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1460 templates = self.listTemplates()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1461 template = self._get_choice(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1462 list_name=_('Templates:'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1463 prompt=_('Select template'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1464 options=templates,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1465 argument=len(args) > 1 and args[1] or '',
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1466 default='classic')
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 # select hyperdb backend
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1469 import roundup.backends
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1470 backends = roundup.backends.list_backends()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1471 backend = self._get_choice(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1472 list_name=_('Back ends:'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1473 prompt=_('Select backend'),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1474 options=backends,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1475 argument=len(args) > 2 and args[2] or '',
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1476 default='anydbm')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1477 # 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
1478
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1479 # Process configuration file definitions
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1480 if len(args) > 3:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1481 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1482 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
1483 except Exception:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1484 print(_('Error in configuration settings: "%s"') % args[3])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1485 raise
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1486 else:
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1487 defns = {}
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1488
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1489 defns['rdbms_backend'] = backend
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1490
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1491 # load config_ini.ini from template if it exists.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1492 # it sets parameters like template_engine that are
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1493 # template specific.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1494 template_config = UserConfig(templates[template]['path'] +
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1495 "/config_ini.ini")
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1496
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1497 # .keys() is required. UserConfig has no __iter__ or __next__
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1498 for k in template_config.keys(): # noqa: SIM118
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1499 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
1500 continue
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1501 defns[k] = template_config[k]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1502
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1503 # install!
8540
e8d1da6e3571 bug: fix traceback in roundup-admin init with bad config values
John Rouillard <rouilj@ieee.org>
parents: 8487
diff changeset
1504 try:
e8d1da6e3571 bug: fix traceback in roundup-admin init with bad config values
John Rouillard <rouilj@ieee.org>
parents: 8487
diff changeset
1505 init.install(tracker_home, templates[template]['path'], settings=defns)
e8d1da6e3571 bug: fix traceback in roundup-admin init with bad config values
John Rouillard <rouilj@ieee.org>
parents: 8487
diff changeset
1506 except ConfigurationError as e:
e8d1da6e3571 bug: fix traceback in roundup-admin init with bad config values
John Rouillard <rouilj@ieee.org>
parents: 8487
diff changeset
1507 raise UsageError(e)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1508
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1509 # 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
1510 # Ignore file not found - not all templates have
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1511 # config_ini.ini files.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1512 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1513 os.remove(tracker_home + "/config_ini.ini")
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1514 except OSError as e: # FileNotFound exception under py3
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1515 if e.errno == 2:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1516 pass
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1517 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1518 raise
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1519
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1520 print(_("""
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1521 ---------------------------------------------------------------------------
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1522 You should now edit the tracker configuration file:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1523 %(config_file)s""") % {"config_file": config_ini_file})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1524
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1525 # find list of options that need manual adjustments
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1526 # XXX config._get_unset_options() is marked as private
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1527 # (leading underscore). make it public or don't care?
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1528 need_set = CoreConfig(tracker_home)._get_unset_options()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1529 if need_set:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1530 print(_(" ... at a minimum, you must set following options:"))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1531 for section in need_set:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1532 print(" [%s]: %s" % (section, ", ".join(need_set[section])))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1533
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1534 # note about schema modifications
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1535 print(_("""
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1536 If you wish to modify the database schema,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1537 you should also edit the schema file:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1538 %(database_config_file)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1539 You may also change the database initialisation file:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1540 %(database_init_file)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1541 ... see the documentation on customizing for more information.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1542
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1543 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
1544 the above steps.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1545 ---------------------------------------------------------------------------
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1546 """) % {'database_config_file': os.path.join(tracker_home, 'schema.py'),
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1547 'database_init_file': os.path.join(tracker_home, 'initial_data.py')})
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1548 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1549
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1550 def do_list(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1551 ''"""Usage: list classname [property]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1552 List the instances of a class.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1553
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1554 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
1555 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
1556 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
1557 property, alphabetically.
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1558
2329
e128fd807054 fix invalid backslash escapes; wrap long lines
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2313
diff changeset
1559 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
1560 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
1561 for every class instance.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
1562 """
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1563 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
1564 raise UsageError(_('Too many arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1565 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
1566 raise UsageError(_('Not enough arguments supplied'))
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1567
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1568 retired = self.settings['_retired_val']
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1569
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1570 classname = args[0]
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1571
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1572 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1573 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1574
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1575 # figure the property
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1576 propname = args[1] if len(args) > 1 else cl.labelprop()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1577
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
1578 if self.separator:
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1579 if len(args) == 2:
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
1580 # create a list of propnames since user specified propname
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1581 proplist = []
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1582 try:
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1583 proplist = [cl.get(nodeid, propname) for nodeid in
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1584 cl.getnodeids(retired=retired)]
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1585 except KeyError:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1586 raise UsageError(_('%(classname)s has no property '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
1587 '"%(propname)s"') % locals())
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
1588 print(self.separator.join(proplist))
1676
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1589 else:
4856faf558a2 Get rid of TABs, use spaces instead.
Jean Jordaan <neaj@users.sourceforge.net>
parents: 1652
diff changeset
1590 # 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
1591 # otherwise
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1592 print(self.separator.join(cl.getnodeids(retired=retired)))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1593 else:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1594 try:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1595 for nodeid in cl.getnodeids(retired=retired):
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1596 value = cl.get(nodeid, propname)
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1597 print(_('%(nodeid)4s: %(value)s') % locals())
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1598 except KeyError:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1599 raise UsageError(_('%(classname)s has no property '
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1600 '"%(propname)s"') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1601 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
1602
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1603 def do_migrate(self, args): # noqa: ARG002 - args unused
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1604 ''"""Usage: migrate
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1605 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
1606 codebase.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1607
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1608 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
1609 you've installed the latest codebase.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1610
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1611 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
1612 and before any users access the tracker.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1613
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1614 This command will respond with either "Tracker updated" (if
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1615 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
1616 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
1617 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
1618 using anydbm).
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1619
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1620 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
1621 into the habit.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1622 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1623 if self.db.db_version_updated:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1624 print(_('Tracker updated to schema version %s.') %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1625 self.db.database_schema['version'])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1626 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1627 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1628 print(_('No migration action required. At schema version %s.') %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1629 self.db.database_schema['version'])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1630 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1631
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1632 def do_pack(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1633 ''"""Usage: pack period | date
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1634 Remove journal entries older than the date/period.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1635
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1636 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
1637 suffix "w" (for "week") means 7 days.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1638
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1639 "3y" means three years
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1640 "2y 1m" means two years and one month
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1641 "1m 25d" means one month and 25 days
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
1642 "2w 3d" means two weeks and three days
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1643
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1644 Date format is "YYYY-MM-DD" eg:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1645 2001-01-01
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1646
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1647 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1648 if len(args) != 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1649 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1650
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1651 # are we dealing with a period or a date
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1652 value = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1653 date_re = re.compile(r"""
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1654 (?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
1655 (?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
1656 """, re.VERBOSE)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1657 m = date_re.match(value)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1658 if not m:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1659 raise ValueError(_('Invalid format'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1660 m = m.groupdict()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1661 if m['period']:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1662 pack_before = date.Date(". - %s" % value)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1663 elif m['date']:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1664 pack_before = date.Date(value)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1665 self.db.pack(pack_before)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1666 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1667 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1668
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1669 def do_perftest(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1670 ''"""Usage: perftest [mode] [arguments]*
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1671 Time operations in Roundup.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1672
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1673 Supported arguments:
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1674
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1675 [password] [rounds=<integer>] [scheme=<scheme>]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1676
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1677 '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
1678 setting for 'password_pbkdf2_default_rounds' is the default
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1679 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
1680 thousands separator of ',' or '.'. 'scheme' is the default
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1681 coded into Roundup. List supported schemes by using 'scheme='.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1682
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1683 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1684 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
1685
8240
1189c742e4b3 fix: crash roundup-admin perftest password without rounds= argument.
John Rouillard <rouilj@ieee.org>
parents: 8224
diff changeset
1686 # default rounds from db.config is an int not str
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1687 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
1688 "scheme": password.Password.default_scheme}
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1689
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1690 print_supported_schemes = lambda: print(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1691 "Supported schemes (default is first, case "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1692 "sensitive):\n %s." %
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1693 ", ".join(password.Password.known_schemes))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1694
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1695 if (args[0].find("=") != -1):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1696 args.insert(0, 'password')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1697
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1698 props.update(self.props_from_args(args[1:]))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1699
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1700 if args[0] == "password":
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1701 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1702 # convert 10,000,000 or 10.000.000 to 10000000
8240
1189c742e4b3 fix: crash roundup-admin perftest password without rounds= argument.
John Rouillard <rouilj@ieee.org>
parents: 8224
diff changeset
1703 r = int(re.sub('[,.]', '', props['rounds'])) \
1189c742e4b3 fix: crash roundup-admin perftest password without rounds= argument.
John Rouillard <rouilj@ieee.org>
parents: 8224
diff changeset
1704 if not isinstance(props['rounds'], int) \
1189c742e4b3 fix: crash roundup-admin perftest password without rounds= argument.
John Rouillard <rouilj@ieee.org>
parents: 8224
diff changeset
1705 else props['rounds']
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1706 if r < 1000:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1707 print(_("Invalid 'rounds'. Must be larger than 999."))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1708 return
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1709 props['rounds'] = r
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1710 except (TypeError, ValueError):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1711 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
1712 props['rounds'])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1713 return
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1714 if props['scheme'] is None:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1715 print_supported_schemes()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1716 return
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1717
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1718 self.db.config.PASSWORD_PBKDF2_DEFAULT_ROUNDS = props['rounds']
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1719
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1720 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1721 tic = perf_counter()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1722 pw_hash = password.encodePassword(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1723 "this is a long password to hash",
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1724 props['scheme'],
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1725 None,
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1726 config=self.db.config,
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1727 )
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1728 toc = perf_counter()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1729 except password.PasswordValueError as e:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1730 print(e)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1731 print_supported_schemes()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1732 return
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1733
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1734 if props['scheme'].startswith('PBKDF2'):
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1735 (rounds, _salt, _raw_salt, _digest) = password.pbkdf2_unpack(
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1736 pw_hash)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1737 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1738 rounds = _("scheme does not support rounds.")
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1739
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1740 print(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1741 "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, "
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1742 "rounds: %(rounds)s") %
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
1743 {"time": toc - tic, "scheme": props['scheme'],
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1744 "rounds": rounds})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1745
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1746 def do_pragma(self, args):
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1747 ''"""Usage: pragma setting=value | 'list'
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1748 Set internal admin settings to a value.
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1749
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
1750 For example:
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1751
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1752 pragma verbose=True
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1753 pragma verbose=yes
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1754 pragma verbose=on
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1755 pragma verbose=1
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1756
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1757 will turn on verbose mode for roundup-admin.
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1758
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1759 pragma list
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1760
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1761 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
1762 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
1763 """
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1764 """
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1765 The following are to be implemented:
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1766 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
1767 (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
1768 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
1769 files. Use for faster database migration.
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1770 Replaces exporttables/importtables with
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1771 exportfiles=false then export/import
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
1772 """
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1773
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1774 if len(args) < 1:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1775 raise UsageError(_('Not enough arguments supplied'))
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1776
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1777 try:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1778 (setting, value) = args[0].split("=", 1)
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1779 except ValueError:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1780 if args[0] != "list":
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1781 raise UsageError(_(
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1782 'Argument must be setting=value, was given: %s.') %
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1783 args[0])
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1784
7773
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1785 print(_("Current settings and values "
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1786 "(NYI - not yet implemented):"))
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1787 is_verbose = self.settings['verbose']
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1788 for key in sorted(self.settings.keys()):
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1789 if key.startswith('_') and not is_verbose:
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1790 continue
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1791 print(" %s=%s" % (key, self.settings[key]))
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1792 if is_verbose:
7796
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
1793 try:
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
1794 print(" %s" % self.settings_help[key])
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
1795 except KeyError:
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
1796 print(_(" Help for this pragma is missing. "
5f3b49bb7742 add missing help text for history_length pragma. Also don't crash report missing text if text is missing
John Rouillard <rouilj@ieee.org>
parents: 7795
diff changeset
1797 "Please report it to the Roundup project.\n"))
7773
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1798
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
1799 return
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1800
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1801 if setting not in self.settings:
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1802 raise UsageError(_('Unknown setting %s. Try "pragma list".')
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1803 % setting)
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1804 if isinstance(self.settings[setting], bool):
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1805 value = value.lower()
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1806 if value in ("yes", "true", "on", "1"):
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1807 value = True
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1808 elif value in ("no", "false", "off", "0"):
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1809 value = False
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1810 else:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1811 raise UsageError(_(
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1812 'Incorrect value for boolean setting %(setting)s: '
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1813 '%(value)s.') % {"setting": setting, "value": value})
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1814 elif isinstance(self.settings[setting], int):
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1815 try:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1816 _val = int(value)
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1817 except ValueError:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1818 raise UsageError(_(
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1819 'Incorrect value for integer setting %(setting)s: '
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1820 '%(value)s.') % {"setting": setting, "value": value})
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1821 value = _val
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
1822 elif isinstance(self.settings[setting], str):
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1823 if setting == "show_retired":
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1824 if value not in ["no", "only", "both"]:
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1825 raise UsageError(_(
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1826 'Incorrect value for setting %(setting)s: '
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1827 '%(value)s. Should be no, both, or only.') % {
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1828 "setting": setting, "value": value})
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1829 if value == "both":
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1830 self.settings['_retired_val'] = None
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1831 elif value == "only": # numerical value not boolean
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1832 self.settings['_retired_val'] = True
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1833 else: # numerical value not boolean
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
1834 self.settings['_retired_val'] = False
7252
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1835 else:
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1836 raise UsageError(_('Internal error: pragma can not handle '
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1837 'values of type: %s') %
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1838 type(self.settings[setting]).__name__)
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1839 self.settings[setting] = value
9c067ed4568b add pragma command to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7250
diff changeset
1840
8440
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1841 # history_length has to be pushed to readline to have any effect.
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1842 if setting == "history_length":
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1843 self.readline.set_history_length(
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1844 self.settings['history_length'])
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1845
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1846 def do_readline(self, args):
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1847 ''"""Usage: readline initrc_line | 'emacs' | 'history' | 'reload' | 'vi'
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1848
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1849 Using 'reload' will reload the file ~/.roundup_admin_rlrc.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1850 'history' will show (and number) all commands in the history.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1851
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1852 You can change input mode using the 'emacs' or 'vi' parameters.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1853 The default is emacs. This is the same as using::
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1854
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1855 readline set editing-mode emacs
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1856
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1857 or::
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1858
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1859 readline set editing-mode vi
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1860
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1861 Any command that can be placed in a readline .inputrc file can
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1862 be executed using the readline command. You can assign
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1863 dump-variables to control O using::
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1864
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1865 readline Control-o: dump-variables
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1866
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1867 Assigning multi-key values also works.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1868
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1869 pyreadline3 support on windows:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1870
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1871 Mode switching doesn't work, emacs only.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1872
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1873 Binding single key commands works with::
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1874
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1875 readline Control-w: history-search-backward
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1876
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1877 Multiple key sequences don't work.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1878
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1879 Setting values may work. Difficult to tell because the library
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1880 has no way to view the live settings.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1881
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1882 """
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1883
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1884 # TODO: allow history 20 # most recent 20 commands
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1885 # history 100-200 # show commands 100-200
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1886
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1887 if not self.readline:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1888 print(_("Readline support is not available."))
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1889 return
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1890 # The if test allows pyreadline3 settings like:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1891 # bind_exit_key("Control-z") get through to
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1892 # parse_and_bind(). It is not obvious that this form of
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1893 # command is supported. Pyreadline3 is supposed to parse
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1894 # readline style commands, so we use those for emacs/vi.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1895 # Trying set-mode(...) as in the pyreadline3 init file
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1896 # didn't work in testing.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1897
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1898 if len(args) == 1 and args[0].find('(') == -1:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1899 if args[0] == "vi":
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1900 self.readline.parse_and_bind("set editing-mode vi")
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1901 print(_("Enabled vi mode."))
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1902 elif args[0] == "emacs":
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1903 self.readline.parse_and_bind("set editing-mode emacs")
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1904 print(_("Enabled emacs mode."))
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1905 elif args[0] == "history":
8440
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1906 history_size = self.readline.get_current_history_length()
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1907 print("history size", history_size)
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1908 print('\n'.join([
8440
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1909 "%3d %s" % ((i + 1),
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1910 self.readline.get_history_item(i + 1))
8440
254f70dfc585 bug, refactor, test: make pragma history_length work interactively
John Rouillard <rouilj@ieee.org>
parents: 8439
diff changeset
1911 for i in range(history_size)
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1912 ]))
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1913 elif args[0] == "reload":
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1914 try:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1915 # readline is a singleton. In testing previous
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1916 # tests using read_init_file are loading from ~
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1917 # not the test directory because it doesn't
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1918 # matter. But for reload we want to test with the
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1919 # init file under the test directory. Calling
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1920 # read_init_file() calls with the ~/.. init
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1921 # location and I can't seem to reset it
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1922 # or the readline state.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1923 # So call with explicit file here.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1924 self.readline.read_init_file(
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1925 self.get_readline_init_file())
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1926 except FileNotFoundError as e:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1927 # If user invoked reload explicitly, report
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1928 # if file not found.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1929 #
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1930 # DOES NOT WORK with pyreadline3. Exception
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1931 # is not raised if file is missing.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1932 #
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1933 # Also e.filename is None under cygwin. A
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1934 # simple test case does set e.filename
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1935 # correctly?? sigh. So I just call
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1936 # get_readline_init_file again to get
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1937 # filename.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1938 fn = e.filename or self.get_readline_init_file()
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1939 print(_("Init file %s not found.") % fn)
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1940 else:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1941 print(_("File %s reloaded.") %
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1942 self.get_readline_init_file())
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1943 else:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1944 print(_("Unknown readline parameter %s") % args[0])
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1945 return
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1946
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1947 self.readline.parse_and_bind(" ".join(args))
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1948 return
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
1949
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1950 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
1951 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
1952
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1953 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
1954 ''"""Usage: reindex [classname|classname:#-#|designator]*
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1955 Re-generate a tracker's search indexes.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1956
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1957 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
1958 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
1959
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1960 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
1961
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1962 reindex issue:23-1000
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1963
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1964 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
1965 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
1966 """
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1967 if args:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1968 for arg in args:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1969 m = desre.match(arg)
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1970 r = desrng.match(arg)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1971 if m:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1972 cl = self.get_class(m.group(1))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1973 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1974 cl.index(m.group(2))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1975 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1976 raise UsageError(_('no such item "%(designator)s"') % {
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1977 'designator': arg})
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1978 elif r:
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1979 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
1980 for item in support.Progress(
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1981 'Reindexing %s' % r.group(1),
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1982 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
1983 try:
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1984 cl.index(str(item))
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1985 except IndexError:
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1986 print(_('no such item "%(class)s%(id)s"') % {
7566
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
1987 'class': r.group(1),
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
1988 'id': item})
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
1989
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1990 else:
7395
312d52305583 - issue2551190 - Allow roundup-admin reindex to work in batches.
John Rouillard <rouilj@ieee.org>
parents: 7392
diff changeset
1991 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
1992 self.db.reindex(arg, show_progress=True)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1993 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1994 self.db.reindex(show_progress=True)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1995 return 0
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
1996
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1997 def do_restore(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1998 ''"""Usage: restore designator[,designator]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
1999 Restore the retired node specified by designator.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2000
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2001 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2002 eg. bug1, user10, ...
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
2003
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2004 The given nodes will become available for users again.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2005 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2006 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2007 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2008 designators = args[0].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2009 for designator in designators:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2010 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2011 classname, nodeid = hyperdb.splitDesignator(designator)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2012 except hyperdb.DesignatorError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2013 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2014 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2015 dbclass = self.db.getclass(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2016 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2017 raise UsageError(_('no such class "%(classname)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2018 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2019 dbclass.restore(nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2020 except KeyError as e:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2021 raise UsageError(e.args[0])
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2022 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2023 raise UsageError(_('no such %(classname)s node '
8105
e579aef218aa fix: broken translatable error message template
John Rouillard <rouilj@ieee.org>
parents: 8095
diff changeset
2024 '"%(nodeid)s"') % locals())
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2025 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2026 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2027
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2028 def do_retire(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2029 ''"""Usage: retire designator[,designator]*
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2030 Retire the node specified by designator.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2031
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2032 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2033 eg. bug1, user10, ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2034
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2035 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
2036 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
2037 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2038 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2039 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2040 designators = args[0].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2041 for designator in designators:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2042 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2043 classname, nodeid = hyperdb.splitDesignator(designator)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2044 except hyperdb.DesignatorError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2045 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2046 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2047 self.db.getclass(classname).retire(nodeid)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2048 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2049 raise UsageError(_('no such class "%(classname)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2050 except IndexError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2051 raise UsageError(_('no such %(classname)s node '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2052 '"%(nodeid)s"') % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2053 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2054 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2055
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2056 def do_rollback(self, args): # noqa: ARG002 - args unused
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2057 ''"""Usage: rollback
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2058 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
2059
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2060 The changes made during an interactive session are not
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2061 automatically written to the database - they must be committed
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2062 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
2063 immediately after would make no changes to the database.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2064 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2065 self.db.rollback()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2066 self.db_uncommitted = False
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2067 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2068
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2069 def do_security(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2070 ''"""Usage: security [Role name]
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2071 Display the Permissions available to one or all Roles.
6957
f924af12ef50 issue2551233 - create new roundup-admin command "templates"
John Rouillard <rouilj@ieee.org>
parents: 6818
diff changeset
2072
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2073 Also validates that any properties defined in a
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2074 permission are valid.
7379
40cab56a97f1 Document that security subcommand reports invalid properties.
John Rouillard <rouilj@ieee.org>
parents: 7375
diff changeset
2075
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2076 Run this after changing your permissions to catch
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2077 typos.
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2078 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2079 if len(args) == 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2080 role = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2081 try:
7650
4de48eadf5f4 bug: Fix roundup-admin security command. Lowercase optionalarg.
John Rouillard <rouilj@ieee.org>
parents: 7588
diff changeset
2082 roles = [(args[0].lower(),
4de48eadf5f4 bug: Fix roundup-admin security command. Lowercase optionalarg.
John Rouillard <rouilj@ieee.org>
parents: 7588
diff changeset
2083 self.db.security.role[args[0].lower()])]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2084 except KeyError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2085 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
2086 return 1
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2087 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2088 roles = list(self.db.security.role.items())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2089 role = self.db.config.NEW_WEB_USER_ROLES
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2090 if ',' in role:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2091 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
2092 % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2093 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2094 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
2095 % locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2096 role = self.db.config.NEW_EMAIL_USER_ROLES
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2097 if ',' in role:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2098 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
2099 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2100 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
2101 roles.sort()
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2102 for _rolename, role in roles:
8472
224ccb8b49ca refactor: change some classes to use __slots__
John Rouillard <rouilj@ieee.org>
parents: 8446
diff changeset
2103 sys.stdout.write(_('Role "%(name)s":\n') % role.props_dict())
8119
c12377fb4144 Change permission representation
Ralf Schlatterbeck <rsc@runtux.com>
parents: 8105
diff changeset
2104 for permission in role.permission_list():
8472
224ccb8b49ca refactor: change some classes to use __slots__
John Rouillard <rouilj@ieee.org>
parents: 8446
diff changeset
2105 d = permission.props_dict()
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2106 if permission.klass:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2107 if permission.properties:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2108 sys.stdout.write(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2109 ' %(description)s (%(name)s for "%(klass)s"' +
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2110 ': %(properties)s only)\n') % d)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2111 # verify that properties exist; report bad props
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2112 bad_props = []
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2113 cl = self.db.getclass(permission.klass)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2114 class_props = cl.getprops(protected=True)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2115 for p in permission.properties:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2116 if p in class_props:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2117 continue
7773
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
2118
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
2119 bad_props.append(p)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2120 if bad_props:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2121 sys.stdout.write(_(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2122 '\n **Invalid properties for %(class)s: '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2123 '%(props)s\n\n') % {
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2124 "class": permission.klass,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2125 "props": bad_props})
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2126 return 1
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2127 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2128 sys.stdout.write(_(' %(description)s (%(name)s for '
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2129 '"%(klass)s" only)\n') % d)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2130 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2131 sys.stdout.write(_(' %(description)s (%(name)s)\n') % d)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2132 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2133
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2134 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
2135 ''"""Usage: set items property=value [property=value ...]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2136 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
2137
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2138 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
2139 list of item designators (ie "designator[,designator,...]").
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2140
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2141 A designator is a classname and a nodeid concatenated,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2142 eg. bug1, user10, ...
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2143
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2144 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
2145 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
2146 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
2147 (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
2148 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
2149 as comma-separated numbers (ie "1,2,3").
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2150
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2151 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2152 import copy # needed for copying props list
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2153
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2154 if len(args) < 2:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2155 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2156 from roundup import hyperdb
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2157
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2158 designators = args[0].split(',')
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2159 if len(designators) == 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2160 designator = designators[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2161 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2162 designator = hyperdb.splitDesignator(designator)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2163 designators = [designator]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2164 except hyperdb.DesignatorError:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2165 cl = self.get_class(designator)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2166 designators = [(designator, x) for x in cl.list()]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2167 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2168 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2169 designators = [hyperdb.splitDesignator(x) for x in designators]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2170 except hyperdb.DesignatorError as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2171 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2172
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2173 # get the props from the args
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2174 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
2175
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2176 # now do the set for all the nodes
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2177 for classname, itemid in designators:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2178 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
2179 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2180
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2181 try:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2182 for key, value in list(props.items()):
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2183 # You must reinitialize the props every time though.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2184 # if props['nosy'] = '+admin' initally, it gets
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2185 # 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
2186 # in the db) after rawToHyperdb returns.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2187 # 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
2188 # designators if not reinitalized.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2189 props[key] = hyperdb.rawToHyperdb(self.db, cl, itemid,
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2190 key, value)
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2191 except hyperdb.HyperdbValueError as message:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2192 raise UsageError(message)
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2193
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2194 # try the set
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2195 try:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2196 cl.set(itemid, **props)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2197 except (TypeError, IndexError, ValueError) as message:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2198 raise UsageError(message)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2199 self.db_uncommitted = True
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2200 return 0
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2201
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2202 def do_specification(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2203 ''"""Usage: specification classname
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2204 Show the properties for a classname.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2205
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2206 This lists the properties for a given class.
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2207 """
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2208 if len(args) < 1:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2209 raise UsageError(_('Not enough arguments supplied'))
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2210 classname = args[0]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2211 # get the class
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2212 cl = self.get_class(classname)
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2213
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2214 # get the key property
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2215 keyprop = cl.getkey()
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2216 properties = cl.getprops() if self.settings['display_protected'] \
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2217 else cl.properties
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2218
7543
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
2219 for key in properties:
fc9daba984c0 - issue2551103 - add pragma 'display_protected' to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7439
diff changeset
2220 value = properties[key]
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2221 if keyprop == key:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2222 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
2223 locals())
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2224 else:
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2225 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
2226
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2227 def do_table(self, args):
4073
145b32238093 Revert docstring markup for use with gettext tool.
Stefan Seefeld <stefan@seefeld.name>
parents: 4067
diff changeset
2228 ''"""Usage: table classname [property[,property]*]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2229 List the instances of a class in tabular form.
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2230
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2231 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
2232 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
2233 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
2234 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
2235 For example::
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
2236
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2237 roundup> table priority id,name:10
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2238 Id Name
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2239 1 fatal-bug
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2240 2 bug
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2241 3 usability
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2242 4 feature
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
2243
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
2244 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
2245 leave a trailing : without a width on the property. For example::
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1916
diff changeset
2246
8393
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2247 roundup> table priority id,name:
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2248 Id Name
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2249 1 fata
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2250 2 bug
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2251 3 usab
e5d07fac0249 build: remove extra <p></p> generated by blank lines.
John Rouillard <rouilj@ieee.org>
parents: 8296
diff changeset
2252 4 feat
1544
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
2253
6db2cbcd390e finally, tables autosize columns [SF#609070]
Richard Jones <richard@users.sourceforge.net>
parents: 1539
diff changeset
2254 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
2255 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2256 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
2257 raise UsageError(_('Not enough arguments supplied'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2258 classname = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2259
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
2260 retired = self.settings['_retired_val']
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
2261
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2262 # get the class
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2263 cl = self.get_class(classname)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2264
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2265 # figure the property names to display
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2266 if len(args) > 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2267 prop_names = args[1].split(',')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2268 all_props = cl.getprops()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2269 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2270 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2271 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2272 propname, width = spec.split(':')
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2273 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
2274 raise UsageError(_('"%(spec)s" not '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2275 'name:width') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2276 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2277 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
2278 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
2279 raise UsageError(_('%(classname)s has no property '
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2280 '"%(propname)s"') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2281 else:
4357
13b3155869e0 Beginnings of a big code cleanup / modernisation to make 2to3 happy
Richard Jones <richard@users.sourceforge.net>
parents: 4299
diff changeset
2282 prop_names = cl.getprops()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2283
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2284 # now figure column widths
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2285 props = []
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2286 for spec in prop_names:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2287 if ':' in spec:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2288 name, width = spec.split(':')
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
2289 if width == '':
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2290 # 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
2291 props.append((name, len(name)))
1546
Richard Jones <richard@users.sourceforge.net>
parents: 1544
diff changeset
2292 else:
6198
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
2293 try:
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
2294 props.append((name, int(width)))
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
2295 except ValueError:
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
2296 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
2297 'integer width: "%(width)s"') %
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
2298 locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2299 else:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2300 # this is going to be slow
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2301 maxlen = len(spec)
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
2302 for nodeid in cl.getnodeids(retired=retired):
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2303 curlen = len(str(cl.get(nodeid, spec)))
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2304 if curlen > maxlen:
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2305 maxlen = curlen
6198
39513b36ca59 Add set tests. Test and fix table command.
John Rouillard <rouilj@ieee.org>
parents: 6195
diff changeset
2306 props.append((spec, maxlen))
2307
f786a1b9dbdf translatabe strings adjustments, postponed help text translation
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2215
diff changeset
2307
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2308 # now display the heading
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2309 print(' '.join([name.capitalize().ljust(width)
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2310 for name, width in props]))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2311
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2312 # and the table data
7547
c8c4514f4c3e issue685275 - show retired/unretire commands
John Rouillard <rouilj@ieee.org>
parents: 7546
diff changeset
2313 for nodeid in cl.getnodeids(retired=retired):
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2314 table_columns = []
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2315 for name, width in props:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2316 if name != 'id':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2317 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2318 value = str(cl.get(nodeid, name))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2319 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2320 # we already checked if the property is valid - a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2321 # KeyError here means the node just doesn't have a
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2322 # value for it
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2323 value = ''
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2324 else:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2325 value = str(nodeid)
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2326 f = '%%-%ds' % width
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2327 table_columns.append(f % value[:width])
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2328 print(' '.join(table_columns))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2329 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2330
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2331 def do_templates(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2332 ''"""Usage: templates [trace_search]
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2333 List templates and their installed directories.
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2334
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2335 With trace_search also list all directories that are
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2336 searched for templates.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2337 """
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2338 import textwrap
6431
ada1edcc9132 issue2551142 - Import ... unique constraint failure.
John Rouillard <rouilj@ieee.org>
parents: 6430
diff changeset
2339
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2340 trace_search = False
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2341 if args and args[0] == "trace_search":
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2342 trace_search = True
3669
07d1d8e22271 new "exporttables" command in roundup-admin [SF#1533791]
Richard Jones <richard@users.sourceforge.net>
parents: 3641
diff changeset
2343
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2344 templates = self.listTemplates(trace_search=trace_search)
3179
88dbe6b3d891 merge removal of rcsv
Richard Jones <richard@users.sourceforge.net>
parents: 2998
diff changeset
2345
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2346 for name in sorted(templates.keys()):
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2347 templates[name]['description'] = textwrap.fill(
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2348 "\n".join([line.lstrip() for line in
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2349 templates[name]['description'].split("\n")]),
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2350 70,
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2351 subsequent_indent=" ",
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2352 )
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2353 print("""
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2354 Name: %(name)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2355 Path: %(path)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2356 Desc: %(description)s
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2357 """ % 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
2358
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2359 def do_updateconfig(self, args):
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2360 ''"""Usage: updateconfig <filename>
8095
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2361 Merge existing tracker config with new settings.
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2362
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2363 Output the updated config file to <filename>. Use current
5aed4911836b docs: normalize all help strings and make html output look better.
John Rouillard <rouilj@ieee.org>
parents: 8091
diff changeset
2364 settings from existing roundup tracker in tracker home.
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2365 """
7250
ee972b3073cb alphabetize all do_X methods.
John Rouillard <rouilj@ieee.org>
parents: 7249
diff changeset
2366 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
2367
7392
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2368 def usageError_feedback(self, message, function):
8540
e8d1da6e3571 bug: fix traceback in roundup-admin init with bad config values
John Rouillard <rouilj@ieee.org>
parents: 8487
diff changeset
2369 print(_('\nError: %s') % message)
7392
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2370 print()
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2371 print(function.__doc__)
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2372 return 1
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2373
8487
b09ef85f0da6 feat: add nanoid pkg trace_id gen and decorator for setting processName
John Rouillard <rouilj@ieee.org>
parents: 8472
diff changeset
2374 @set_processName("roundup-admin")
8446
14c7c07b32d8 feature: add thread local trace_id and trace_reason to logging.
John Rouillard <rouilj@ieee.org>
parents: 8440
diff changeset
2375 @gen_trace_id()
8557
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
2376 @store_trace_reason("admin", extract=(
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
2377 '"roundup-admin(%s): "' % _safe_os_getlogin() +
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
2378 "'%s' % args[1][:2]"
f80c566f5726 feat: improve store_trace_reason with extract parameter
John Rouillard <rouilj@ieee.org>
parents: 8541
diff changeset
2379 ))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2380 def run_command(self, args):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2381 """Run a single command
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2382 """
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2383 command = args[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2384
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2385 # handle help now
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2386 if command == 'help':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2387 if len(args) > 1:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2388 self.do_help(args[1:])
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2389 else:
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2390 self.do_help(['help'])
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2391 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2392 if command == 'morehelp':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2393 self.do_help(['help'])
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2394 self.help_commands()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2395 self.help_all()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2396 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2397
7998
851ddd72f9ce issue2550983 - help_commands_html unused
John Rouillard <rouilj@ieee.org>
parents: 7882
diff changeset
2398 if command == 'htmlhelp':
851ddd72f9ce issue2550983 - help_commands_html unused
John Rouillard <rouilj@ieee.org>
parents: 7882
diff changeset
2399 self.help_commands_html()
851ddd72f9ce issue2550983 - help_commands_html unused
John Rouillard <rouilj@ieee.org>
parents: 7882
diff changeset
2400 return 0
851ddd72f9ce issue2550983 - help_commands_html unused
John Rouillard <rouilj@ieee.org>
parents: 7882
diff changeset
2401
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2402 # figure what the command is
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2403 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2404 functions = self.commands.get(command)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2405 except KeyError:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2406 # not a valid command
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
2407 print(_('Unknown command "%(command)s" ("help commands" for a '
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2408 'list)') % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2409 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2410
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2411 # check for multiple matches
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2412 if len(functions) > 1:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2413 print(_('Multiple commands match "%(command)s": %(list)s') %
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2414 {'command': command,
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2415 'list': ', '.join([i[0] for i in functions])})
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2416 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2417 command, function = functions[0]
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2418
7392
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2419 if command in ['genconfig', 'templates']:
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2420 try:
7773
ac2c034542e6 chore: reduce nesting if/elif/else blocks; uneeded var assignment
John Rouillard <rouilj@ieee.org>
parents: 7755
diff changeset
2421 return function(args[1:])
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2422 except UsageError as message:
7566
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
2423 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
2424
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2425 # make sure we have a tracker_home
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2426 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
2427 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
2428 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
2429 else:
6ae426092d7d Some patches from wking to make admin.py bypass checks like nuking a
John Rouillard <rouilj@ieee.org>
parents: 5110
diff changeset
2430 self.tracker_home = os.curdir
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2431
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
2432 # 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
2433 if command == 'initialise':
656
eae9b69a0115 [SF#527416] roundup-admin uses undefined value
Richard Jones <richard@users.sourceforge.net>
parents: 649
diff changeset
2434 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2435 return self.do_initialise(self.tracker_home, args)
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2436 except UsageError as message:
7566
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
2437 return self.usageError_feedback(message, function)
738
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
2438 elif command == 'install':
7e093cbaaa98 split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents: 698
diff changeset
2439 try:
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2440 return self.do_install(self.tracker_home, args)
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2441 except UsageError as message:
7566
df87f02c2930 flake8 fix indents.
John Rouillard <rouilj@ieee.org>
parents: 7549
diff changeset
2442 return self.usageError_feedback(message, function)
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2443
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2444 # get the tracker
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2445 try:
7253
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2446 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
2447 tracker = self.tracker
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2448 else:
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2449 if self.settings["verbose"]:
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2450 print("Reopening tracker")
393ae88bf7b1 Cache result of tracker open in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 7252
diff changeset
2451 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
2452 self.tracker = tracker
7544
4c90a57c89e3 initialize indexer_backend pragma from config.
John Rouillard <rouilj@ieee.org>
parents: 7543
diff changeset
2453 self.settings['indexer_backend'] = self.tracker.config['INDEXER']
4c90a57c89e3 initialize indexer_backend pragma from config.
John Rouillard <rouilj@ieee.org>
parents: 7543
diff changeset
2454
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2455 except ValueError as message: # noqa: F841 -- used from locals
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2456 self.tracker_home = ''
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2457 print(_("Error: Couldn't open tracker: %(message)s") % locals())
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2458 return 1
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2459 except NoConfigError as message: # noqa: F841 -- used from locals
5230
62a88d69ac52 Add new command updateconfig to admin command. This acts like
John Rouillard <rouilj@ieee.org>
parents: 5229
diff changeset
2460 self.tracker_home = ''
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2461 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
2462 return 1
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2463 # message used via locals
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2464 except ParsingOptionError as message: # noqa: F841 -- used from locals
6557
8687c096a945 Handle configparser.InterpolationSyntaxError
John Rouillard <rouilj@ieee.org>
parents: 6527
diff changeset
2465 print("%(message)s" % locals())
8687c096a945 Handle configparser.InterpolationSyntaxError
John Rouillard <rouilj@ieee.org>
parents: 6527
diff changeset
2466 return 1
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2467
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2468 # only open the database once!
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2469 if not self.db:
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
2470 self.db = tracker.open(self.name)
7439
f7dc37df61b7 fix typo in comment.
John Rouillard <rouilj@ieee.org>
parents: 7427
diff changeset
2471 # 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
2472 # 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
2473 # environment.
408fd477761f Add i18n object to roundupdb.Database
Ralf Schlatterbeck <rsc@runtux.com>
parents: 6585
diff changeset
2474 # 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
2475 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
2476
4781
6e9b9743de89 Implementation for:
John Rouillard <rouilj@ieee.org>
parents: 4486
diff changeset
2477 self.db.tx_Source = 'cli'
6e9b9743de89 Implementation for:
John Rouillard <rouilj@ieee.org>
parents: 4486
diff changeset
2478
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2479 # do the command
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2480 ret = 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2481 try:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2482 ret = function(args[1:])
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2483 except UsageError as message:
7392
bd6523c84a95 Fix test failure caused by making genconfig trackerless
John Rouillard <rouilj@ieee.org>
parents: 7380
diff changeset
2484 ret = self.usageError_feedback(message, function)
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2485 except Exception:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2486 import traceback
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2487 traceback.print_exc()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2488 ret = 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2489 return ret
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2490
7802
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2491 def history_features(self, feature):
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2492 """ self.settings['history_features'] = 0: load rc, load/save history
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2493 self.settings['history_features'] = 1: do not load history
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2494 self.settings['history_features'] = 2: do not save history
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2495 self.settings['history_features'] = 4: don't load rc
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2496 """
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2497
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2498 features = { # bit bashing
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2499 'load_history': 1,
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2500 'save_history': 2,
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2501 'load_rc': 4}
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2502
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2503 # setting the bit disables the feature, so use not.
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2504 return not self.settings['history_features'] & features[feature]
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2505
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2506 def get_readline_init_file(self):
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2507 return os.path.join(os.path.expanduser("~"),
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2508 ".roundup_admin_rlrc")
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2509
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2510 def interactive(self):
4067
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2511 """Run in an interactive mode
7309ac3b6e24 Uniformly use """...""" instead of '''...''' for comments.
Stefan Seefeld <stefan@seefeld.name>
parents: 4066
diff changeset
2512 """
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2513 print(_('Roundup %s ready for input.\nType "help" for help.')
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2514 % roundup_version)
7795
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2515
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2516 initfile = self.get_readline_init_file()
7795
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2517 histfile = os.path.join(os.path.expanduser("~"),
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2518 ".roundup_admin_history")
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2519
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2520 if self.readline:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2521 # clear any history that might be left over from caller
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2522 # when reusing AdminTool from tests or program.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2523 self.readline.clear_history()
7798
f84f7879c768 fix: handle case where readline init file is missing
John Rouillard <rouilj@ieee.org>
parents: 7797
diff changeset
2524 try:
7802
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2525 if self.history_features('load_rc'):
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2526 self.readline.read_init_file(initfile)
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2527 except FileNotFoundError:
7798
f84f7879c768 fix: handle case where readline init file is missing
John Rouillard <rouilj@ieee.org>
parents: 7797
diff changeset
2528 # file is optional
f84f7879c768 fix: handle case where readline init file is missing
John Rouillard <rouilj@ieee.org>
parents: 7797
diff changeset
2529 pass
f84f7879c768 fix: handle case where readline init file is missing
John Rouillard <rouilj@ieee.org>
parents: 7797
diff changeset
2530
7795
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2531 try:
7802
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2532 if self.history_features('load_history'):
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2533 self.readline.read_history_file(histfile)
7799
10da9e12c10f fix: replace FileNotFoundError with IOError
John Rouillard <rouilj@ieee.org>
parents: 7798
diff changeset
2534 except IOError: # FileNotFoundError under python3
7795
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2535 # no history file yet
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2536 pass
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2537
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2538 # Default history length is unlimited.
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2539 # Set persistently in readline init file
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2540 # Pragma history_length allows setting on a per
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2541 # invocation basis at startup
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2542 if self.settings['history_length'] != -1:
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2543 self.readline.set_history_length(
7795
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2544 self.settings['history_length'])
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2545
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2546 if hasattr(self.readline, 'backend'):
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2547 # FIXME after min 3.13 version; no backend prints pyreadline3
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2548 print(_("Readline enabled using %s.") % self.readline.backend)
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2549 else:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2550 print(_("Readline enabled using unknown library."))
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2551
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2552 else:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2553 print(_('Command history and line editing not available'))
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2554
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2555 autosave_enabled = sys.stdin.isatty() and sys.stdout.isatty()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2556 while 1:
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2557 try:
7182
0c6617db0b97 Add testing interactive mode to roundup_admin. remove redundant imports
John Rouillard <rouilj@ieee.org>
parents: 7178
diff changeset
2558 command = self.my_input('roundup> ')
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2559 # clear an input hook in case it was used to prefill
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2560 # buffer.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2561 self.readline.set_pre_input_hook()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2562 except EOFError:
5250
ac7fe3483206 Make admin.py 2/3-agnostic.
Eric S. Raymond <esr@thyrsus.com>
parents: 5248
diff changeset
2563 print(_('exit...'))
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2564 break
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2565 if not command: continue # noqa: E701
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2566 if command.startswith('!'): # Pull numbered command from history
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2567 print_only = command.endswith(":p")
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2568 try:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2569 hist_num = int(command[1:]) \
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2570 if not print_only else int(command[1:-2])
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2571 command = self.readline.get_history_item(hist_num)
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2572 except ValueError:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2573 # pass the unknown command
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2574 pass
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2575 else:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2576 if autosave_enabled and \
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2577 hasattr(self.readline, "replace_history_item"):
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2578 # history has the !23 input. Replace it if possible.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2579 # replace_history_item not supported by pyreadline3
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2580 # so !23 will show up in history not the command.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2581 self.readline.replace_history_item(
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2582 self.readline.get_current_history_length() - 1,
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2583 command)
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2584
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2585 if print_only:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2586 # fill the edit buffer with the command
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2587 # the user selected.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2588
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2589 # from https://stackoverflow.com/questions/8505163/is-it-possible-to-prefill-a-input-in-python-3s-command-line-interface
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2590 # This triggers:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2591 # B023 Function definition does not bind loop variable
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2592 # `command`
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2593 # in ruff. command will be the value of the command
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2594 # variable at the time the function is run.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2595 # Not the value at define time. This is ok since
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2596 # hook is run before command is changed by the
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2597 # return from (readline) input.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2598 def hook():
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2599 self.readline.insert_text(command) # noqa: B023
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2600 self.readline.redisplay()
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2601 self.readline.set_pre_input_hook(hook)
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2602 # we clear the hook after the next line is read.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2603 continue
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2604
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2605 if not autosave_enabled:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2606 # needed to make testing work and also capture
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2607 # commands received on stdin from file/other command
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2608 # output. Disable saving with pragma on command line:
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2609 # -P history_features=2.
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2610 self.readline.add_history(command)
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2611
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
2612 try:
7178
db06d4aeb978 unshadow stdlib token from roundup's token.
John Rouillard <rouilj@ieee.org>
parents: 7093
diff changeset
2613 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
2614 except ValueError:
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2615 continue # Ignore invalid quoted token
6959
3211745e8d7c flake8 fixes.
John Rouillard <rouilj@ieee.org>
parents: 6957
diff changeset
2616 if not args: continue # noqa: E701
8435
1a93dc58f975 feat: add 'q' as alias to quit to exit interactive roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8393
diff changeset
2617 if args[0] in ('q', 'quit', 'exit') and len(args) == 1:
1a93dc58f975 feat: add 'q' as alias to quit to exit interactive roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8393
diff changeset
2618 break # noqa: E701
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2619 self.run_command(args)
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2620
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2621 # 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
2622 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
2623 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
2624 if commit and commit[0].lower() == 'y':
8446
14c7c07b32d8 feature: add thread local trace_id and trace_reason to logging.
John Rouillard <rouilj@ieee.org>
parents: 8440
diff changeset
2625 self.run_command(["commit"])
7795
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2626
d7d68da9878f save roundup-admin history between sessions.
John Rouillard <rouilj@ieee.org>
parents: 7773
diff changeset
2627 # looks like histfile is saved with mode 600
8439
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2628 if self.readline and self.history_features('save_history'):
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2629 self.readline.write_history_file(histfile)
3bdae15252c6 feat: add support for ! history and readline command in roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 8435
diff changeset
2630
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2631 return 0
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2632
7752
b2dbab2b34bc fix(refactor): multiple fixups using ruff linter; more testing.
John Rouillard <rouilj@ieee.org>
parents: 7687
diff changeset
2633 def main(self): # noqa: PLR0912, PLR0911
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2634 try:
7546
534f8bdb8f94 Add -P pragma=value command line option to roundup-admin.
John Rouillard <rouilj@ieee.org>
parents: 7545
diff changeset
2635 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
2636 except getopt.GetoptError as e:
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2637 self.usage(str(e))
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2638 return 1
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2639
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2640 # handle command-line args
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2641 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
2642 self.name = 'admin'
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
2643 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
2644 if 'ROUNDUP_LOGIN' in os.environ:
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2645 login_env = os.environ['ROUNDUP_LOGIN'].split(':')
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2646 self.name = login_env[0]
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2647 if len(login_env) > 1:
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2648 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
2649 self.separator = None
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2650 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
2651 self.verbose = 0
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2652 for opt, arg in opts:
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
2653 if opt == '-h':
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2654 self.usage()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2655 return 0
7797
8bdf0484215c Summary: feat: roundup-admin history command has human interpretable output
John Rouillard <rouilj@ieee.org>
parents: 7796
diff changeset
2656 elif opt == '-v': # noqa: RET505 - allow elif after returns
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2657 print('%s (python %s)' % (roundup_version,
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2658 sys.version.split()[0]))
2186
3f89c8ffe4f1 version info in scripts
Richard Jones <richard@users.sourceforge.net>
parents: 2184
diff changeset
2659 return 0
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2660 elif opt == '-V':
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2661 self.verbose = 1
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2662 elif opt == '-i':
1098
c5819344714c more doc
Richard Jones <richard@users.sourceforge.net>
parents: 1096
diff changeset
2663 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
2664 elif opt == '-c':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2665 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
2666 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
2667 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2668 self.separator = ','
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2669 elif opt == '-S':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2670 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
2671 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
2672 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2673 self.separator = arg
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2674 elif opt == '-s':
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2675 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
2676 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
2677 return 1
1566
053065585406 added command-line functionality for roundup-adming (feature [SF#687664])
Richard Jones <richard@users.sourceforge.net>
parents: 1563
diff changeset
2678 self.separator = ' '
3602
064515f658e8 verbose output during import is optional now [SF#1475624]
Richard Jones <richard@users.sourceforge.net>
parents: 3544
diff changeset
2679 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
2680 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
2681 elif opt == '-P':
7802
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2682 try:
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2683 self.do_pragma([arg])
7c0a8088b053 feat: add support for controlling readline history features
John Rouillard <rouilj@ieee.org>
parents: 7800
diff changeset
2684 except UsageError as e:
7832
b530069f3120 chore(lint): formatting whitespace consolidate nested if ...
John Rouillard <rouilj@ieee.org>
parents: 7821
diff changeset
2685 print('\n%s\n' % e)
5979
33a7b10618a6 Add support for -u to roundup-admin
John Rouillard <rouilj@ieee.org>
parents: 5897
diff changeset
2686 elif opt == '-u':
6585
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2687 login_opt = arg.split(':')
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2688 self.name = login_opt[0]
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2689 if len(login_opt) > 1:
d4371b131c9c flake 8 improvements
John Rouillard <rouilj@ieee.org>
parents: 6557
diff changeset
2690 self.password = login_opt[1]
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2691
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2692 # if no command - go interactive
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2693 # 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
2694 ret = 0
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2695 try:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2696 if not args:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2697 self.interactive()
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2698 else:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2699 ret = self.run_command(args)
8446
14c7c07b32d8 feature: add thread local trace_id and trace_reason to logging.
John Rouillard <rouilj@ieee.org>
parents: 8440
diff changeset
2700 if self.db: self.run_command(["commit"]) # noqa: E701
1133
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2701 return ret
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2702 finally:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2703 if self.db:
36ec30d286ea Cleaned up CHANGES/TODO
Richard Jones <richard@users.sourceforge.net>
parents: 1108
diff changeset
2704 self.db.close()
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2705
6180
4f45ce95f016 pep8 changes.
John Rouillard <rouilj@ieee.org>
parents: 6177
diff changeset
2706
484
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2707 if __name__ == '__main__':
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2708 tool = AdminTool()
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2709 sys.exit(tool.main())
b35f229dd049 I18N'ed roundup admin...
Richard Jones <richard@users.sourceforge.net>
parents:
diff changeset
2710
2767
f6072f395f87 do_install: consider both old- and new-style layouts in reinstall check;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2736
diff changeset
2711 # vim: set filetype=python sts=4 sw=4 et si :

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