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