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