Mercurial > p > roundup > code
annotate roundup/init.py @ 5639:f576957cbb1f
Add support for prev/next/self links when returning paginated results.
To do this:
1) change "data" envelope from an array to a dict
2) move the "data" array to the "collection" property,
which is an array of elements in the collection.
3) add @links dict keyed by link relation: self, next, prev.
Each relation is an array of dicts with uri and rel keys.
In this case there is only one element, but there is nothing
preventing a relation from having multiple url's. So this follows
the formatting needed for the general case.
Relations are present only if it makes sense. So first page has no
prev and last page has no next.
4) add @total_size with number of element selected if they were
not paginated. Replicates data in X-Count-Total header.
Changed index to start at 1. So the first page is page_index 1 and not
page_index 0. (So I am no longer surprised when I set page_index to 1
and am missing a bunch of records 8-)).
Also a small fixup, json response ends with a newline so printing
the data, or using curl makes sure that anything printing after the
json output (like shell prompts) is on a new line.
Tests added for all cases.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Sat, 09 Mar 2019 11:06:10 -0500 |
| parents | 64b05e24dbd8 |
| children | 8bd93c8e98a6 |
| rev | line source |
|---|---|
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
1 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/) |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
3 # This module is free software, and you may redistribute it and/or modify |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
4 # under the same terms as Python, so long as this copyright message and |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
5 # disclaimer are retained in their original form. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
6 # |
| 214 | 7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR |
|
213
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
10 # POSSIBILITY OF SUCH DAMAGE. |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
11 # |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS" |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE, |
|
d45384bc6420
Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents:
208
diff
changeset
|
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. |
|
2766
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
17 # |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
18 """Init (create) a roundup instance. |
|
406
bdc2ea127ae9
Added module docstrings to all modules.
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
388
diff
changeset
|
19 """ |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
20 from __future__ import print_function |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
21 __docformat__ = 'restructuredtext' |
|
26
c7c14960f413
Final commit of Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
25
diff
changeset
|
22 |
|
4818
edb171528a7d
init.loadTemplateInfo: replace rfc822 with email.parser (Python 3 compatible)
anatoly techtonik <techtonik@gmail.com>
parents:
4817
diff
changeset
|
23 import os, errno, email.parser |
|
edb171528a7d
init.loadTemplateInfo: replace rfc822 with email.parser (Python 3 compatible)
anatoly techtonik <techtonik@gmail.com>
parents:
4817
diff
changeset
|
24 |
|
204
c1461733cbf9
Instances are now opened by a special function...
Richard Jones <richard@users.sourceforge.net>
parents:
201
diff
changeset
|
25 |
|
2766
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
26 from roundup import install_util, password |
|
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
27 from roundup.configuration import CoreConfig |
|
2953
1e7a3c001c6a
ignore old-style tracker templates [SF#1071402]; remove unused imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2889
diff
changeset
|
28 from roundup.i18n import _ |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
29 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
30 def copytree(src, dst, symlinks=0): |
|
388
2d92f93072f9
Code using copyDigestedFile() that passes unit tests
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
270
diff
changeset
|
31 """Recursively copy a directory tree using copyDigestedFile(). |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
32 |
|
4026
c8b0a23ba38d
Fix issue2550493: hide 'hidden' files.
Stefan Seefeld <stefan@seefeld.name>
parents:
3432
diff
changeset
|
33 The destination directory is allowed to exist. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
34 |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
35 If the optional symlinks flag is true, symbolic links in the |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
36 source tree result in symbolic links in the destination tree; if |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
37 it is false, the contents of the files pointed to by symbolic |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
38 links are copied. |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
39 |
|
1103
db787cef1385
handled some XXXs
Richard Jones <richard@users.sourceforge.net>
parents:
1085
diff
changeset
|
40 This was copied from shutil.py in std lib. |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
41 """ |
|
4026
c8b0a23ba38d
Fix issue2550493: hide 'hidden' files.
Stefan Seefeld <stefan@seefeld.name>
parents:
3432
diff
changeset
|
42 |
|
c8b0a23ba38d
Fix issue2550493: hide 'hidden' files.
Stefan Seefeld <stefan@seefeld.name>
parents:
3432
diff
changeset
|
43 # Prevent 'hidden' files (those starting with '.') from being considered. |
|
c8b0a23ba38d
Fix issue2550493: hide 'hidden' files.
Stefan Seefeld <stefan@seefeld.name>
parents:
3432
diff
changeset
|
44 names = [f for f in os.listdir(src) if not f.startswith('.')] |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
45 try: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
46 os.mkdir(dst) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5041
diff
changeset
|
47 except OSError as error: |
|
113
2ab86442799a
Replaced errno integers with their module values.
Richard Jones <richard@users.sourceforge.net>
parents:
70
diff
changeset
|
48 if error.errno != errno.EEXIST: raise |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
49 for name in names: |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
50 srcname = os.path.join(src, name) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
51 dstname = os.path.join(dst, name) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
52 if symlinks and os.path.islink(srcname): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
53 linkto = os.readlink(srcname) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
54 os.symlink(linkto, dstname) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
55 elif os.path.isdir(srcname): |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
56 copytree(srcname, dstname, symlinks) |
|
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
57 else: |
|
388
2d92f93072f9
Code using copyDigestedFile() that passes unit tests
Jürgen Hermann <jhermann@users.sourceforge.net>
parents:
270
diff
changeset
|
58 install_util.copyDigestedFile(srcname, dstname) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
59 |
|
3432
3876b94ffe8c
install: accept configuration setting overrides
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2953
diff
changeset
|
60 def install(instance_home, template, settings={}): |
|
738
7e093cbaaa98
split instance initialisation into two steps...
Richard Jones <richard@users.sourceforge.net>
parents:
406
diff
changeset
|
61 '''Install an instance using the named template and backend. |
|
208
1894a28a1e66
Added documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
62 |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
63 'instance_home' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
64 the directory to place the instance data in |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
65 'template' |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
66 the directory holding the template to use in creating the instance data |
|
3432
3876b94ffe8c
install: accept configuration setting overrides
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2953
diff
changeset
|
67 'settings' |
|
3876b94ffe8c
install: accept configuration setting overrides
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2953
diff
changeset
|
68 config.ini setting overrides (dictionary) |
|
208
1894a28a1e66
Added documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
69 |
|
1894a28a1e66
Added documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
70 The instance_home directory will be created using the files found in |
|
2862
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
71 the named template (roundup.templates.<name>). A usual instance_home |
|
208
1894a28a1e66
Added documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
72 contains: |
|
1894a28a1e66
Added documentation.
Richard Jones <richard@users.sourceforge.net>
parents:
204
diff
changeset
|
73 |
|
2862
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
74 config.ini |
|
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
75 tracker configuration file |
|
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
76 schema.py |
|
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
77 database schema definition |
|
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
78 initial_data.py |
|
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
79 database initialization script, used to populate the database |
|
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
80 with 'roundup-admin init' command |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
81 interfaces.py |
|
2862
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
82 (optional, not installed from standard templates) defines |
|
22c459281026
tracker layout notes in install() docstring updated for new layout
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2766
diff
changeset
|
83 the CGI Client and mail gateway MailGW classes that are |
|
2005
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
84 used by roundup.cgi, roundup-server and roundup-mailgw. |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
85 db/ |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
86 the actual database that stores the instance's data |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
87 html/ |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
88 the html templates that are used by the CGI Client |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
89 detectors/ |
|
fc52d57c6c3e
documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents:
1916
diff
changeset
|
90 the auditor and reactor modules for this instance |
| 2700 | 91 extensions/ |
| 92 code extensions to Roundup | |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
93 ''' |
|
1591
21312a7564fd
moving templates around
Richard Jones <richard@users.sourceforge.net>
parents:
1467
diff
changeset
|
94 # At the moment, it's just a copy |
|
190
996eaf90c01e
Instance import now imports the instance using imp.load_module...
Richard Jones <richard@users.sourceforge.net>
parents:
127
diff
changeset
|
95 copytree(template, instance_home) |
|
25
4cf1daf2f2eb
More Grande Splite
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
96 |
|
1916
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
97 # rename the tempate in the TEMPLATE-INFO.txt file |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
98 ti = loadTemplateInfo(instance_home) |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
99 ti['name'] = ti['name'] + '-' + os.path.split(instance_home)[1] |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
100 saveTemplateInfo(instance_home, ti) |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
101 |
|
2766
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
102 # if there is no config.ini or old-style config.py |
|
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
103 # installed from the template, write default config text |
|
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
104 config_ini_file = os.path.join(instance_home, CoreConfig.INI_FILE) |
|
2953
1e7a3c001c6a
ignore old-style tracker templates [SF#1071402]; remove unused imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2889
diff
changeset
|
105 if not os.path.isfile(config_ini_file): |
|
3432
3876b94ffe8c
install: accept configuration setting overrides
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2953
diff
changeset
|
106 config = CoreConfig(settings=settings) |
|
2766
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
107 config.save(config_ini_file) |
|
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
108 |
|
1916
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
109 |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
110 def listTemplates(dir): |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
111 ''' List all the Roundup template directories in a given directory. |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
112 |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
113 Find all the dirs that contain a TEMPLATE-INFO.txt and parse it. |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
114 |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
115 Return a list of dicts of info about the templates. |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
116 ''' |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
117 ret = {} |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
118 for idir in os.listdir(dir): |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
119 idir = os.path.join(dir, idir) |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
120 ti = loadTemplateInfo(idir) |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
121 if ti: |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
122 ret[ti['name']] = ti |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
123 return ret |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
124 |
|
4817
785bd25371d3
init.loadTemplateInfo: Cleanup code
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
125 def loadTemplateInfo(path): |
|
1916
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
126 ''' Attempt to load a Roundup template from the indicated directory. |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
127 |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
128 Return None if there's no template, otherwise a template info |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
129 dictionary. |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
130 ''' |
|
4817
785bd25371d3
init.loadTemplateInfo: Cleanup code
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
131 tif = os.path.join(path, 'TEMPLATE-INFO.txt') |
|
785bd25371d3
init.loadTemplateInfo: Cleanup code
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
132 if not os.path.exists(tif): |
|
1916
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
133 return None |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
134 |
|
4817
785bd25371d3
init.loadTemplateInfo: Cleanup code
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
135 if os.path.exists(os.path.join(path, 'config.py')): |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
136 print(_("WARNING: directory '%s'\n" |
|
2953
1e7a3c001c6a
ignore old-style tracker templates [SF#1071402]; remove unused imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2889
diff
changeset
|
137 "\tcontains old-style template - ignored" |
|
5376
64b05e24dbd8
Python 3 preparation: convert print to a function.
Joseph Myers <jsm@polyomino.org.uk>
parents:
5248
diff
changeset
|
138 ) % os.path.abspath(path)) |
|
2953
1e7a3c001c6a
ignore old-style tracker templates [SF#1071402]; remove unused imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2889
diff
changeset
|
139 return None |
|
1e7a3c001c6a
ignore old-style tracker templates [SF#1071402]; remove unused imports
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2889
diff
changeset
|
140 |
|
1916
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
141 # load up the template's information |
|
4895
c86bc9646652
Revert changes in commit 785bd25371
John Kristensen <john@jerrykan.com>
parents:
4818
diff
changeset
|
142 try: |
|
c86bc9646652
Revert changes in commit 785bd25371
John Kristensen <john@jerrykan.com>
parents:
4818
diff
changeset
|
143 f = open(tif) |
|
4818
edb171528a7d
init.loadTemplateInfo: replace rfc822 with email.parser (Python 3 compatible)
anatoly techtonik <techtonik@gmail.com>
parents:
4817
diff
changeset
|
144 m = email.parser.Parser().parse(f, True) |
|
1916
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
145 ti = {} |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
146 ti['name'] = m['name'] |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
147 ti['description'] = m['description'] |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
148 ti['intended-for'] = m['intended-for'] |
|
4817
785bd25371d3
init.loadTemplateInfo: Cleanup code
anatoly techtonik <techtonik@gmail.com>
parents:
4570
diff
changeset
|
149 ti['path'] = path |
|
4895
c86bc9646652
Revert changes in commit 785bd25371
John Kristensen <john@jerrykan.com>
parents:
4818
diff
changeset
|
150 finally: |
|
c86bc9646652
Revert changes in commit 785bd25371
John Kristensen <john@jerrykan.com>
parents:
4818
diff
changeset
|
151 f.close() |
|
1916
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
152 return ti |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
153 |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
154 def writeHeader(name, value): |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
155 ''' Write an rfc822-compatible header line, making it wrap reasonably |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
156 ''' |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
157 out = [name.capitalize() + ':'] |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
158 n = len(out[0]) |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
159 for word in value.split(): |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
160 if len(word) + n > 74: |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
161 out.append('\n') |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
162 n = 0 |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
163 out.append(' ' + word) |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
164 n += len(out[-1]) |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
165 return ''.join(out) + '\n' |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
166 |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
167 def saveTemplateInfo(dir, info): |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
168 ''' Save the template info (dict of values) to the TEMPLATE-INFO.txt |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
169 file in the indicated directory. |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
170 ''' |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
171 ti = os.path.join(dir, 'TEMPLATE-INFO.txt') |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
172 f = open(ti, 'w') |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
173 try: |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
174 for name in 'name description intended-for path'.split(): |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
175 f.write(writeHeader(name, info[name])) |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
176 finally: |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
177 f.close() |
|
d157b9b56ebf
implemented munging of template name for installed trackers
Richard Jones <richard@users.sourceforge.net>
parents:
1728
diff
changeset
|
178 |
|
2766
b2cd472919c8
if there is no config installed from the template, write default config text;
Alexander Smishlajev <a1s@users.sourceforge.net>
parents:
2700
diff
changeset
|
179 # vim: set filetype=python sts=4 sw=4 et si : |
