diff options
author | Mike Crute <mcrute@gmail.com> | 2010-07-09 20:19:35 -0400 |
---|---|---|
committer | Mike Crute <mcrute@gmail.com> | 2010-07-09 20:19:35 -0400 |
commit | e41afb1e9e0d26650f0ea30f3308c0bb471cc2c6 (patch) | |
tree | 4e638cf1cc07112872661af2c7a294b9d27371b9 | |
parent | d33473d1686a2a77bacf6eabe9275b0e5e11c83a (diff) | |
download | snakeplan-e41afb1e9e0d26650f0ea30f3308c0bb471cc2c6.tar.bz2 snakeplan-e41afb1e9e0d26650f0ea30f3308c0bb471cc2c6.tar.xz snakeplan-e41afb1e9e0d26650f0ea30f3308c0bb471cc2c6.zip |
Re-arranging some stuff and updating the boilerplate files.
-rw-r--r-- | AUTHORS | 9 | ||||
-rw-r--r-- | INSTALL | 1 | ||||
-rw-r--r-- | LICENSE | 175 | ||||
-rw-r--r-- | NOTICE | 14 | ||||
-rw-r--r-- | README | 12 | ||||
-rw-r--r-- | TODO (renamed from snakeplan/TODO.txt) | 1 | ||||
-rwxr-xr-x | ez_setup.py | 272 | ||||
-rwxr-xr-x | setup.py | 51 | ||||
-rw-r--r--[-rwxr-xr-x] | snakeplan/__init__.py | 3 | ||||
-rw-r--r-- | snakeplan/data.json | 1 | ||||
-rw-r--r-- | snakeplan/readme_urls.txt | 42 | ||||
-rw-r--r--[-rwxr-xr-x] | snakeplan/settings.py | 0 | ||||
-rw-r--r-- | snakeplan/test_data.json | 1 | ||||
-rw-r--r--[-rwxr-xr-x] | snakeplan/urls.py | 0 |
14 files changed, 538 insertions, 44 deletions
@@ -0,0 +1,9 @@ | |||
1 | Lead Developer: | ||
2 | * Mike Crute | ||
3 | |||
4 | Contributors: | ||
5 | * Benjamin Smith | ||
6 | * Christopher Miller | ||
7 | * Matthew Wilson | ||
8 | * David Stanek | ||
9 | * Mike Pirnat | ||
@@ -0,0 +1 @@ | |||
TODO: Install docs | |||
@@ -0,0 +1,175 @@ | |||
1 | |||
2 | Apache License | ||
3 | Version 2.0, January 2004 | ||
4 | http://www.apache.org/licenses/ | ||
5 | |||
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||
7 | |||
8 | 1. Definitions. | ||
9 | |||
10 | "License" shall mean the terms and conditions for use, reproduction, | ||
11 | and distribution as defined by Sections 1 through 9 of this document. | ||
12 | |||
13 | "Licensor" shall mean the copyright owner or entity authorized by | ||
14 | the copyright owner that is granting the License. | ||
15 | |||
16 | "Legal Entity" shall mean the union of the acting entity and all | ||
17 | other entities that control, are controlled by, or are under common | ||
18 | control with that entity. For the purposes of this definition, | ||
19 | "control" means (i) the power, direct or indirect, to cause the | ||
20 | direction or management of such entity, whether by contract or | ||
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||
22 | outstanding shares, or (iii) beneficial ownership of such entity. | ||
23 | |||
24 | "You" (or "Your") shall mean an individual or Legal Entity | ||
25 | exercising permissions granted by this License. | ||
26 | |||
27 | "Source" form shall mean the preferred form for making modifications, | ||
28 | including but not limited to software source code, documentation | ||
29 | source, and configuration files. | ||
30 | |||
31 | "Object" form shall mean any form resulting from mechanical | ||
32 | transformation or translation of a Source form, including but | ||
33 | not limited to compiled object code, generated documentation, | ||
34 | and conversions to other media types. | ||
35 | |||
36 | "Work" shall mean the work of authorship, whether in Source or | ||
37 | Object form, made available under the License, as indicated by a | ||
38 | copyright notice that is included in or attached to the work | ||
39 | (an example is provided in the Appendix below). | ||
40 | |||
41 | "Derivative Works" shall mean any work, whether in Source or Object | ||
42 | form, that is based on (or derived from) the Work and for which the | ||
43 | editorial revisions, annotations, elaborations, or other modifications | ||
44 | represent, as a whole, an original work of authorship. For the purposes | ||
45 | of this License, Derivative Works shall not include works that remain | ||
46 | separable from, or merely link (or bind by name) to the interfaces of, | ||
47 | the Work and Derivative Works thereof. | ||
48 | |||
49 | "Contribution" shall mean any work of authorship, including | ||
50 | the original version of the Work and any modifications or additions | ||
51 | to that Work or Derivative Works thereof, that is intentionally | ||
52 | submitted to Licensor for inclusion in the Work by the copyright owner | ||
53 | or by an individual or Legal Entity authorized to submit on behalf of | ||
54 | the copyright owner. For the purposes of this definition, "submitted" | ||
55 | means any form of electronic, verbal, or written communication sent | ||
56 | to the Licensor or its representatives, including but not limited to | ||
57 | communication on electronic mailing lists, source code control systems, | ||
58 | and issue tracking systems that are managed by, or on behalf of, the | ||
59 | Licensor for the purpose of discussing and improving the Work, but | ||
60 | excluding communication that is conspicuously marked or otherwise | ||
61 | designated in writing by the copyright owner as "Not a Contribution." | ||
62 | |||
63 | "Contributor" shall mean Licensor and any individual or Legal Entity | ||
64 | on behalf of whom a Contribution has been received by Licensor and | ||
65 | subsequently incorporated within the Work. | ||
66 | |||
67 | 2. Grant of Copyright License. Subject to the terms and conditions of | ||
68 | this License, each Contributor hereby grants to You a perpetual, | ||
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
70 | copyright license to reproduce, prepare Derivative Works of, | ||
71 | publicly display, publicly perform, sublicense, and distribute the | ||
72 | Work and such Derivative Works in Source or Object form. | ||
73 | |||
74 | 3. Grant of Patent License. Subject to the terms and conditions of | ||
75 | this License, each Contributor hereby grants to You a perpetual, | ||
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
77 | (except as stated in this section) patent license to make, have made, | ||
78 | use, offer to sell, sell, import, and otherwise transfer the Work, | ||
79 | where such license applies only to those patent claims licensable | ||
80 | by such Contributor that are necessarily infringed by their | ||
81 | Contribution(s) alone or by combination of their Contribution(s) | ||
82 | with the Work to which such Contribution(s) was submitted. If You | ||
83 | institute patent litigation against any entity (including a | ||
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work | ||
85 | or a Contribution incorporated within the Work constitutes direct | ||
86 | or contributory patent infringement, then any patent licenses | ||
87 | granted to You under this License for that Work shall terminate | ||
88 | as of the date such litigation is filed. | ||
89 | |||
90 | 4. Redistribution. You may reproduce and distribute copies of the | ||
91 | Work or Derivative Works thereof in any medium, with or without | ||
92 | modifications, and in Source or Object form, provided that You | ||
93 | meet the following conditions: | ||
94 | |||
95 | (a) You must give any other recipients of the Work or | ||
96 | Derivative Works a copy of this License; and | ||
97 | |||
98 | (b) You must cause any modified files to carry prominent notices | ||
99 | stating that You changed the files; and | ||
100 | |||
101 | (c) You must retain, in the Source form of any Derivative Works | ||
102 | that You distribute, all copyright, patent, trademark, and | ||
103 | attribution notices from the Source form of the Work, | ||
104 | excluding those notices that do not pertain to any part of | ||
105 | the Derivative Works; and | ||
106 | |||
107 | (d) If the Work includes a "NOTICE" text file as part of its | ||
108 | distribution, then any Derivative Works that You distribute must | ||
109 | include a readable copy of the attribution notices contained | ||
110 | within such NOTICE file, excluding those notices that do not | ||
111 | pertain to any part of the Derivative Works, in at least one | ||
112 | of the following places: within a NOTICE text file distributed | ||
113 | as part of the Derivative Works; within the Source form or | ||
114 | documentation, if provided along with the Derivative Works; or, | ||
115 | within a display generated by the Derivative Works, if and | ||
116 | wherever such third-party notices normally appear. The contents | ||
117 | of the NOTICE file are for informational purposes only and | ||
118 | do not modify the License. You may add Your own attribution | ||
119 | notices within Derivative Works that You distribute, alongside | ||
120 | or as an addendum to the NOTICE text from the Work, provided | ||
121 | that such additional attribution notices cannot be construed | ||
122 | as modifying the License. | ||
123 | |||
124 | You may add Your own copyright statement to Your modifications and | ||
125 | may provide additional or different license terms and conditions | ||
126 | for use, reproduction, or distribution of Your modifications, or | ||
127 | for any such Derivative Works as a whole, provided Your use, | ||
128 | reproduction, and distribution of the Work otherwise complies with | ||
129 | the conditions stated in this License. | ||
130 | |||
131 | 5. Submission of Contributions. Unless You explicitly state otherwise, | ||
132 | any Contribution intentionally submitted for inclusion in the Work | ||
133 | by You to the Licensor shall be under the terms and conditions of | ||
134 | this License, without any additional terms or conditions. | ||
135 | Notwithstanding the above, nothing herein shall supersede or modify | ||
136 | the terms of any separate license agreement you may have executed | ||
137 | with Licensor regarding such Contributions. | ||
138 | |||
139 | 6. Trademarks. This License does not grant permission to use the trade | ||
140 | names, trademarks, service marks, or product names of the Licensor, | ||
141 | except as required for reasonable and customary use in describing the | ||
142 | origin of the Work and reproducing the content of the NOTICE file. | ||
143 | |||
144 | 7. Disclaimer of Warranty. Unless required by applicable law or | ||
145 | agreed to in writing, Licensor provides the Work (and each | ||
146 | Contributor provides its Contributions) on an "AS IS" BASIS, | ||
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||
148 | implied, including, without limitation, any warranties or conditions | ||
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||
150 | PARTICULAR PURPOSE. You are solely responsible for determining the | ||
151 | appropriateness of using or redistributing the Work and assume any | ||
152 | risks associated with Your exercise of permissions under this License. | ||
153 | |||
154 | 8. Limitation of Liability. In no event and under no legal theory, | ||
155 | whether in tort (including negligence), contract, or otherwise, | ||
156 | unless required by applicable law (such as deliberate and grossly | ||
157 | negligent acts) or agreed to in writing, shall any Contributor be | ||
158 | liable to You for damages, including any direct, indirect, special, | ||
159 | incidental, or consequential damages of any character arising as a | ||
160 | result of this License or out of the use or inability to use the | ||
161 | Work (including but not limited to damages for loss of goodwill, | ||
162 | work stoppage, computer failure or malfunction, or any and all | ||
163 | other commercial damages or losses), even if such Contributor | ||
164 | has been advised of the possibility of such damages. | ||
165 | |||
166 | 9. Accepting Warranty or Additional Liability. While redistributing | ||
167 | the Work or Derivative Works thereof, You may choose to offer, | ||
168 | and charge a fee for, acceptance of support, warranty, indemnity, | ||
169 | or other liability obligations and/or rights consistent with this | ||
170 | License. However, in accepting such obligations, You may act only | ||
171 | on Your own behalf and on Your sole responsibility, not on behalf | ||
172 | of any other Contributor, and only if You agree to indemnify, | ||
173 | defend, and hold each Contributor harmless for any liability | ||
174 | incurred by, or claims asserted against, such Contributor by reason | ||
175 | of your accepting any such warranty or additional liability. | ||
@@ -0,0 +1,14 @@ | |||
1 | SnakePlan Project Management System | ||
2 | Copyright 2010 Michael Crute | ||
3 | |||
4 | Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | you may not use this file except in compliance with the License. | ||
6 | You may obtain a copy of the License at | ||
7 | |||
8 | http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | |||
10 | Unless required by applicable law or agreed to in writing, software | ||
11 | distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | See the License for the specific language governing permissions and | ||
14 | limitations under the License. | ||
@@ -0,0 +1,12 @@ | |||
1 | SnakePlan | ||
2 | ========= | ||
3 | |||
4 | SnakePlan is a web-based tool used to manage agile software development | ||
5 | projects. The general approach was taken from the venerable but aging and | ||
6 | unmaintained xplanner. | ||
7 | |||
8 | The concept was created by Mike Pirnat and Mike Crute at PyCon 2009. | ||
9 | |||
10 | SnakePlan is written in Python using Django. | ||
11 | |||
12 | The project is just getting started so there isn't much else to say just yet! | ||
diff --git a/snakeplan/TODO.txt b/TODO index 06cc314..16c8ec5 100644 --- a/snakeplan/TODO.txt +++ b/TODO | |||
@@ -7,3 +7,4 @@ Work To Do | |||
7 | * Header linking back to the main page | 7 | * Header linking back to the main page |
8 | * Authentication on the user pages. | 8 | * Authentication on the user pages. |
9 | * UI Design -- HARDCORE BITCH | 9 | * UI Design -- HARDCORE BITCH |
10 | * Installation docs | ||
diff --git a/ez_setup.py b/ez_setup.py new file mode 100755 index 0000000..89cf056 --- /dev/null +++ b/ez_setup.py | |||
@@ -0,0 +1,272 @@ | |||
1 | #!python | ||
2 | """Bootstrap setuptools installation | ||
3 | |||
4 | If you want to use setuptools in your package's setup.py, just include this | ||
5 | file in the same directory with it, and add this to the top of your setup.py:: | ||
6 | |||
7 | from ez_setup import use_setuptools | ||
8 | use_setuptools() | ||
9 | |||
10 | If you want to require a specific version of setuptools, set a download | ||
11 | mirror, or use an alternate download directory, you can do so by supplying | ||
12 | the appropriate options to ``use_setuptools()``. | ||
13 | |||
14 | This file can also be run as a script to install or upgrade setuptools. | ||
15 | """ | ||
16 | import sys | ||
17 | DEFAULT_VERSION = "0.6c8" | ||
18 | DEFAULT_URL = "http://pypi.python.org/packages/%s/s/setuptools/" % sys.version[:3] | ||
19 | |||
20 | md5_data = { | ||
21 | 'setuptools-0.6b1-py2.3.egg': '8822caf901250d848b996b7f25c6e6ca', | ||
22 | 'setuptools-0.6b1-py2.4.egg': 'b79a8a403e4502fbb85ee3f1941735cb', | ||
23 | 'setuptools-0.6b2-py2.3.egg': '5657759d8a6d8fc44070a9d07272d99b', | ||
24 | 'setuptools-0.6b2-py2.4.egg': '4996a8d169d2be661fa32a6e52e4f82a', | ||
25 | 'setuptools-0.6b3-py2.3.egg': 'bb31c0fc7399a63579975cad9f5a0618', | ||
26 | 'setuptools-0.6b3-py2.4.egg': '38a8c6b3d6ecd22247f179f7da669fac', | ||
27 | 'setuptools-0.6b4-py2.3.egg': '62045a24ed4e1ebc77fe039aa4e6f7e5', | ||
28 | 'setuptools-0.6b4-py2.4.egg': '4cb2a185d228dacffb2d17f103b3b1c4', | ||
29 | 'setuptools-0.6c1-py2.3.egg': 'b3f2b5539d65cb7f74ad79127f1a908c', | ||
30 | 'setuptools-0.6c1-py2.4.egg': 'b45adeda0667d2d2ffe14009364f2a4b', | ||
31 | 'setuptools-0.6c2-py2.3.egg': 'f0064bf6aa2b7d0f3ba0b43f20817c27', | ||
32 | 'setuptools-0.6c2-py2.4.egg': '616192eec35f47e8ea16cd6a122b7277', | ||
33 | 'setuptools-0.6c3-py2.3.egg': 'f181fa125dfe85a259c9cd6f1d7b78fa', | ||
34 | 'setuptools-0.6c3-py2.4.egg': 'e0ed74682c998bfb73bf803a50e7b71e', | ||
35 | 'setuptools-0.6c3-py2.5.egg': 'abef16fdd61955514841c7c6bd98965e', | ||
36 | 'setuptools-0.6c4-py2.3.egg': 'b0b9131acab32022bfac7f44c5d7971f', | ||
37 | 'setuptools-0.6c4-py2.4.egg': '2a1f9656d4fbf3c97bf946c0a124e6e2', | ||
38 | 'setuptools-0.6c4-py2.5.egg': '8f5a052e32cdb9c72bcf4b5526f28afc', | ||
39 | 'setuptools-0.6c5-py2.3.egg': 'ee9fd80965da04f2f3e6b3576e9d8167', | ||
40 | 'setuptools-0.6c5-py2.4.egg': 'afe2adf1c01701ee841761f5bcd8aa64', | ||
41 | 'setuptools-0.6c5-py2.5.egg': 'a8d3f61494ccaa8714dfed37bccd3d5d', | ||
42 | 'setuptools-0.6c6-py2.3.egg': '35686b78116a668847237b69d549ec20', | ||
43 | 'setuptools-0.6c6-py2.4.egg': '3c56af57be3225019260a644430065ab', | ||
44 | 'setuptools-0.6c6-py2.5.egg': 'b2f8a7520709a5b34f80946de5f02f53', | ||
45 | 'setuptools-0.6c7-py2.3.egg': '209fdf9adc3a615e5115b725658e13e2', | ||
46 | 'setuptools-0.6c7-py2.4.egg': '5a8f954807d46a0fb67cf1f26c55a82e', | ||
47 | 'setuptools-0.6c7-py2.5.egg': '45d2ad28f9750e7434111fde831e8372', | ||
48 | 'setuptools-0.6c8-py2.3.egg': '50759d29b349db8cfd807ba8303f1902', | ||
49 | 'setuptools-0.6c8-py2.4.egg': 'cba38d74f7d483c06e9daa6070cce6de', | ||
50 | 'setuptools-0.6c8-py2.5.egg': '1721747ee329dc150590a58b3e1ac95b', | ||
51 | } | ||
52 | |||
53 | import sys, os | ||
54 | |||
55 | def _validate_md5(egg_name, data): | ||
56 | if egg_name in md5_data: | ||
57 | from md5 import md5 | ||
58 | digest = md5(data).hexdigest() | ||
59 | if digest != md5_data[egg_name]: | ||
60 | print >>sys.stderr, ( | ||
61 | "md5 validation of %s failed! (Possible download problem?)" | ||
62 | % egg_name | ||
63 | ) | ||
64 | sys.exit(2) | ||
65 | return data | ||
66 | |||
67 | |||
68 | def use_setuptools( | ||
69 | version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, | ||
70 | download_delay=15 | ||
71 | ): | ||
72 | """Automatically find/download setuptools and make it available on sys.path | ||
73 | |||
74 | `version` should be a valid setuptools version number that is available | ||
75 | as an egg for download under the `download_base` URL (which should end with | ||
76 | a '/'). `to_dir` is the directory where setuptools will be downloaded, if | ||
77 | it is not already available. If `download_delay` is specified, it should | ||
78 | be the number of seconds that will be paused before initiating a download, | ||
79 | should one be required. If an older version of setuptools is installed, | ||
80 | this routine will print a message to ``sys.stderr`` and raise SystemExit in | ||
81 | an attempt to abort the calling script. | ||
82 | """ | ||
83 | was_imported = 'pkg_resources' in sys.modules or 'setuptools' in sys.modules | ||
84 | def do_download(): | ||
85 | egg = download_setuptools(version, download_base, to_dir, download_delay) | ||
86 | sys.path.insert(0, egg) | ||
87 | import setuptools; setuptools.bootstrap_install_from = egg | ||
88 | try: | ||
89 | import pkg_resources | ||
90 | except ImportError: | ||
91 | return do_download() | ||
92 | try: | ||
93 | pkg_resources.require("setuptools>="+version); return | ||
94 | except pkg_resources.VersionConflict, e: | ||
95 | if was_imported: | ||
96 | print >>sys.stderr, ( | ||
97 | "The required version of setuptools (>=%s) is not available, and\n" | ||
98 | "can't be installed while this script is running. Please install\n" | ||
99 | " a more recent version first, using 'easy_install -U setuptools'." | ||
100 | "\n\n(Currently using %r)" | ||
101 | ) % (version, e.args[0]) | ||
102 | sys.exit(2) | ||
103 | else: | ||
104 | del pkg_resources, sys.modules['pkg_resources'] # reload ok | ||
105 | return do_download() | ||
106 | except pkg_resources.DistributionNotFound: | ||
107 | return do_download() | ||
108 | |||
109 | def download_setuptools( | ||
110 | version=DEFAULT_VERSION, download_base=DEFAULT_URL, to_dir=os.curdir, | ||
111 | delay = 15 | ||
112 | ): | ||
113 | """Download setuptools from a specified location and return its filename | ||
114 | |||
115 | `version` should be a valid setuptools version number that is available | ||
116 | as an egg for download under the `download_base` URL (which should end | ||
117 | with a '/'). `to_dir` is the directory where the egg will be downloaded. | ||
118 | `delay` is the number of seconds to pause before an actual download attempt. | ||
119 | """ | ||
120 | import urllib2, shutil | ||
121 | egg_name = "setuptools-%s-py%s.egg" % (version,sys.version[:3]) | ||
122 | url = download_base + egg_name | ||
123 | saveto = os.path.join(to_dir, egg_name) | ||
124 | src = dst = None | ||
125 | if not os.path.exists(saveto): # Avoid repeated downloads | ||
126 | try: | ||
127 | from distutils import log | ||
128 | if delay: | ||
129 | log.warn(""" | ||
130 | --------------------------------------------------------------------------- | ||
131 | This script requires setuptools version %s to run (even to display | ||
132 | help). I will attempt to download it for you (from | ||
133 | %s), but | ||
134 | you may need to enable firewall access for this script first. | ||
135 | I will start the download in %d seconds. | ||
136 | |||
137 | (Note: if this machine does not have network access, please obtain the file | ||
138 | |||
139 | %s | ||
140 | |||
141 | and place it in this directory before rerunning this script.) | ||
142 | ---------------------------------------------------------------------------""", | ||
143 | version, download_base, delay, url | ||
144 | ); from time import sleep; sleep(delay) | ||
145 | log.warn("Downloading %s", url) | ||
146 | src = urllib2.urlopen(url) | ||
147 | # Read/write all in one block, so we don't create a corrupt file | ||
148 | # if the download is interrupted. | ||
149 | data = _validate_md5(egg_name, src.read()) | ||
150 | dst = open(saveto,"wb"); dst.write(data) | ||
151 | finally: | ||
152 | if src: src.close() | ||
153 | if dst: dst.close() | ||
154 | return os.path.realpath(saveto) | ||
155 | |||
156 | |||
157 | |||
158 | |||
159 | |||
160 | |||
161 | |||
162 | |||
163 | |||
164 | |||
165 | |||
166 | |||
167 | |||
168 | |||
169 | |||
170 | |||
171 | |||
172 | |||
173 | |||
174 | |||
175 | |||
176 | |||
177 | |||
178 | |||
179 | |||
180 | |||
181 | |||
182 | |||
183 | |||
184 | |||
185 | |||
186 | |||
187 | |||
188 | |||
189 | |||
190 | |||
191 | def main(argv, version=DEFAULT_VERSION): | ||
192 | """Install or upgrade setuptools and EasyInstall""" | ||
193 | try: | ||
194 | import setuptools | ||
195 | except ImportError: | ||
196 | egg = None | ||
197 | try: | ||
198 | egg = download_setuptools(version, delay=0) | ||
199 | sys.path.insert(0,egg) | ||
200 | from setuptools.command.easy_install import main | ||
201 | return main(list(argv)+[egg]) # we're done here | ||
202 | finally: | ||
203 | if egg and os.path.exists(egg): | ||
204 | os.unlink(egg) | ||
205 | else: | ||
206 | if setuptools.__version__ == '0.0.1': | ||
207 | print >>sys.stderr, ( | ||
208 | "You have an obsolete version of setuptools installed. Please\n" | ||
209 | "remove it from your system entirely before rerunning this script." | ||
210 | ) | ||
211 | sys.exit(2) | ||
212 | |||
213 | req = "setuptools>="+version | ||
214 | import pkg_resources | ||
215 | try: | ||
216 | pkg_resources.require(req) | ||
217 | except pkg_resources.VersionConflict: | ||
218 | try: | ||
219 | from setuptools.command.easy_install import main | ||
220 | except ImportError: | ||
221 | from easy_install import main | ||
222 | main(list(argv)+[download_setuptools(delay=0)]) | ||
223 | sys.exit(0) # try to force an exit | ||
224 | else: | ||
225 | if argv: | ||
226 | from setuptools.command.easy_install import main | ||
227 | main(argv) | ||
228 | else: | ||
229 | print "Setuptools version",version,"or greater has been installed." | ||
230 | print '(Run "ez_setup.py -U setuptools" to reinstall or upgrade.)' | ||
231 | |||
232 | def update_md5(filenames): | ||
233 | """Update our built-in md5 registry""" | ||
234 | |||
235 | import re | ||
236 | from md5 import md5 | ||
237 | |||
238 | for name in filenames: | ||
239 | base = os.path.basename(name) | ||
240 | f = open(name,'rb') | ||
241 | md5_data[base] = md5(f.read()).hexdigest() | ||
242 | f.close() | ||
243 | |||
244 | data = [" %r: %r,\n" % it for it in md5_data.items()] | ||
245 | data.sort() | ||
246 | repl = "".join(data) | ||
247 | |||
248 | import inspect | ||
249 | srcfile = inspect.getsourcefile(sys.modules[__name__]) | ||
250 | f = open(srcfile, 'rb'); src = f.read(); f.close() | ||
251 | |||
252 | match = re.search("\nmd5_data = {\n([^}]+)}", src) | ||
253 | if not match: | ||
254 | print >>sys.stderr, "Internal error!" | ||
255 | sys.exit(2) | ||
256 | |||
257 | src = src[:match.start(1)] + repl + src[match.end(1):] | ||
258 | f = open(srcfile,'w') | ||
259 | f.write(src) | ||
260 | f.close() | ||
261 | |||
262 | |||
263 | if __name__=='__main__': | ||
264 | if len(sys.argv)>2 and sys.argv[1]=='--md5update': | ||
265 | update_md5(sys.argv[2:]) | ||
266 | else: | ||
267 | main(sys.argv[1:]) | ||
268 | |||
269 | |||
270 | |||
271 | |||
272 | |||
diff --git a/setup.py b/setup.py new file mode 100755 index 0000000..0598e9d --- /dev/null +++ b/setup.py | |||
@@ -0,0 +1,51 @@ | |||
1 | #!/usr/bin/env python | ||
2 | # vim: set filencoding=utf8 | ||
3 | |||
4 | # Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | # you may not use this file except in compliance with the License. | ||
6 | # You may obtain a copy of the License at | ||
7 | # | ||
8 | # http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | # | ||
10 | # Unless required by applicable law or agreed to in writing, software | ||
11 | # distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | # See the License for the specific language governing permissions and | ||
14 | # limitations under the License. | ||
15 | |||
16 | """ | ||
17 | SnakePlan Setup Script | ||
18 | |||
19 | @author: Mike Crute (mcrute@gmail.com) | ||
20 | @organization: SoftGroup Interactive, Inc. | ||
21 | @date: July 09, 2010 | ||
22 | """ | ||
23 | |||
24 | import snakeplan | ||
25 | from setuptools import setup, find_packages | ||
26 | |||
27 | |||
28 | setup( | ||
29 | name='snakeplan', | ||
30 | version=snakeplan.__version__, | ||
31 | packages=find_packages(), | ||
32 | description='Open source agile project management', | ||
33 | author='Mike Crute', | ||
34 | author_email='mcrute@gmail.com', | ||
35 | url='http://snakeplan.googlecode.com', | ||
36 | include_package_data=True, | ||
37 | install_requires=[ | ||
38 | 'django>=1.0', | ||
39 | ], | ||
40 | classifiers=[ | ||
41 | "Development Status :: 2 - Pre-Alpha", | ||
42 | "Environment :: Web Environment", | ||
43 | "Framework :: Django", | ||
44 | "Operating System :: OS Independent", | ||
45 | "Intended Audience :: Developers", | ||
46 | "License :: OSI Approved :: Apache Software License", | ||
47 | "Topic :: Software Development", | ||
48 | "Programming Language :: Python", | ||
49 | ], | ||
50 | long_description=open('README', "r").read(), | ||
51 | ) | ||
diff --git a/snakeplan/__init__.py b/snakeplan/__init__.py index e69de29..f544271 100755..100644 --- a/snakeplan/__init__.py +++ b/snakeplan/__init__.py | |||
@@ -0,0 +1,3 @@ | |||
1 | from distutils.version import StrictVersion | ||
2 | |||
3 | __version__ = StrictVersion('0.1') | ||
diff --git a/snakeplan/data.json b/snakeplan/data.json deleted file mode 100644 index 89b1e1d..0000000 --- a/snakeplan/data.json +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | [{"pk": 22, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 8}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_message", "name": "Can add message", "content_type": 4}}, {"pk": 1, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "change_message", "name": "Can change message", "content_type": 4}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "delete_message", "name": "Can delete message", "content_type": 4}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 5}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 5}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "add_iteration", "name": "Can add iteration", "content_type": 10}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_loggedtime", "name": "Can add logged time", "content_type": 13}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "add_project", "name": "Can add project", "content_type": 9}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "add_story", "name": "Can add story", "content_type": 11}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_task", "name": "Can add task", "content_type": 12}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_iteration", "name": "Can change iteration", "content_type": 10}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "change_loggedtime", "name": "Can change logged time", "content_type": 13}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "change_project", "name": "Can change project", "content_type": 9}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "change_story", "name": "Can change story", "content_type": 11}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "change_task", "name": "Can change task", "content_type": 12}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_iteration", "name": "Can delete iteration", "content_type": 10}}, {"pk": 39, "model": "auth.permission", "fields": {"codename": "delete_loggedtime", "name": "Can delete logged time", "content_type": 13}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "delete_project", "name": "Can delete project", "content_type": 9}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "delete_story", "name": "Can delete story", "content_type": 11}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "delete_task", "name": "Can delete task", "content_type": 12}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 6}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 6}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 7}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 7}}, {"pk": 1, "model": "auth.user", "fields": {"username": "root", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2010-02-20 11:18:45", "groups": [], "user_permissions": [], "password": "sha1$f2493$0f7b2e4387894d47810c9c885d9efc9b9043a6c7", "email": "root@example.com", "date_joined": "2010-02-20 11:18:22"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "iteration", "name": "iteration", "app_label": "projects"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "loggedtime", "name": "logged time", "app_label": "projects"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "message", "name": "message", "app_label": "auth"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "project", "name": "project", "app_label": "projects"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "story", "name": "story", "app_label": "projects"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "task", "name": "task", "app_label": "projects"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": "8b4e9c8d3c261624901394dd2613bde4", "model": "sessions.session", "fields": {"expire_date": "2010-03-06 11:18:45", "session_data": "gAJ9cQEoVRJfYXV0aF91c2VyX2JhY2tlbmRxAlUpZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5k\ncy5Nb2RlbEJhY2tlbmRxA1UNX2F1dGhfdXNlcl9pZHEESwF1LjZjMTMyZDUxODcwZTdhZGExZTM4\nNTE0YWY1OWI0MmI4\n"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 3, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:21:35", "object_repr": "Release 0.1", "object_id": "2", "change_message": "", "user": 1, "content_type": 10}}, {"pk": 2, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:21:09", "object_repr": "Backlog", "object_id": "1", "change_message": "", "user": 1, "content_type": 10}}, {"pk": 1, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:20:47", "object_repr": "Snakeplan", "object_id": "1", "change_message": "", "user": 1, "content_type": 9}}, {"pk": 1, "model": "projects.project", "fields": {"active": true, "hidden": false, "name": "Snakeplan", "wiki_link": "", "description": "Development of snakeplan."}}, {"pk": 1, "model": "projects.iteration", "fields": {"status": 0, "name": "Backlog", "end_date": "2025-02-20", "project": 1, "days_worked": "0", "start_date": "2010-02-20", "description": ""}}, {"pk": 2, "model": "projects.iteration", "fields": {"status": 0, "name": "Release 0.1", "end_date": "2010-03-20", "project": 1, "days_worked": "0", "start_date": "2010-02-20", "description": ""}}] | ||
diff --git a/snakeplan/readme_urls.txt b/snakeplan/readme_urls.txt deleted file mode 100644 index 6a12fc1..0000000 --- a/snakeplan/readme_urls.txt +++ /dev/null | |||
@@ -1,42 +0,0 @@ | |||
1 | ====== ======================== ======================================== | ||
2 | Method URL What it does | ||
3 | ====== ======================== ======================================== | ||
4 | GET /modelname/ Lists model instances, using filters | ||
5 | like ?key=value1&key=value2 | ||
6 | |||
7 | GET /modelname/search displays a search form | ||
8 | |||
9 | GET /modelname/id displays a readonly instance | ||
10 | |||
11 | GET /modelname/edit/id displays an edit form | ||
12 | |||
13 | POST /modelname/update/id updates an instance and redirects | ||
14 | |||
15 | POST /modelname/upsert Updates or inserts an instance and | ||
16 | redirects | ||
17 | |||
18 | GET /modelname/upsert Draws a form to do an upsert. | ||
19 | |||
20 | GET /modelname/upsertform Draws a form to do an upsert. | ||
21 | |||
22 | GET /modelname/create displays an insert form | ||
23 | |||
24 | GET /modelname/insertform displays an insert form | ||
25 | |||
26 | GET /modelname/remove/id displays a form that posts to | ||
27 | /model/delete/id | ||
28 | |||
29 | POST /modelname/insert inserts a new record and redirects | ||
30 | |||
31 | POST /modelname/delete/id deletes a record and redirects | ||
32 | |||
33 | GET /modelname/bulk/edit display a bulk edit ui | ||
34 | |||
35 | POST /modelname/bulk/update performs a bulk update and redirect | ||
36 | |||
37 | GET /modelname/bulk/create display a bulk insert form | ||
38 | |||
39 | POST /modelname/bulk/insert performs a bulk insert and redirect | ||
40 | |||
41 | POST /modelname/bulk/delete performs a bulk delete and redirect | ||
42 | ====== ======================== ======================================== | ||
diff --git a/snakeplan/settings.py b/snakeplan/settings.py index 0a9d681..0a9d681 100755..100644 --- a/snakeplan/settings.py +++ b/snakeplan/settings.py | |||
diff --git a/snakeplan/test_data.json b/snakeplan/test_data.json deleted file mode 100644 index 78d5b04..0000000 --- a/snakeplan/test_data.json +++ /dev/null | |||
@@ -1 +0,0 @@ | |||
1 | [{"pk": 22, "model": "auth.permission", "fields": {"codename": "add_logentry", "name": "Can add log entry", "content_type": 8}}, {"pk": 23, "model": "auth.permission", "fields": {"codename": "change_logentry", "name": "Can change log entry", "content_type": 8}}, {"pk": 24, "model": "auth.permission", "fields": {"codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8}}, {"pk": 4, "model": "auth.permission", "fields": {"codename": "add_group", "name": "Can add group", "content_type": 2}}, {"pk": 10, "model": "auth.permission", "fields": {"codename": "add_message", "name": "Can add message", "content_type": 4}}, {"pk": 1, "model": "auth.permission", "fields": {"codename": "add_permission", "name": "Can add permission", "content_type": 1}}, {"pk": 7, "model": "auth.permission", "fields": {"codename": "add_user", "name": "Can add user", "content_type": 3}}, {"pk": 5, "model": "auth.permission", "fields": {"codename": "change_group", "name": "Can change group", "content_type": 2}}, {"pk": 11, "model": "auth.permission", "fields": {"codename": "change_message", "name": "Can change message", "content_type": 4}}, {"pk": 2, "model": "auth.permission", "fields": {"codename": "change_permission", "name": "Can change permission", "content_type": 1}}, {"pk": 8, "model": "auth.permission", "fields": {"codename": "change_user", "name": "Can change user", "content_type": 3}}, {"pk": 6, "model": "auth.permission", "fields": {"codename": "delete_group", "name": "Can delete group", "content_type": 2}}, {"pk": 12, "model": "auth.permission", "fields": {"codename": "delete_message", "name": "Can delete message", "content_type": 4}}, {"pk": 3, "model": "auth.permission", "fields": {"codename": "delete_permission", "name": "Can delete permission", "content_type": 1}}, {"pk": 9, "model": "auth.permission", "fields": {"codename": "delete_user", "name": "Can delete user", "content_type": 3}}, {"pk": 13, "model": "auth.permission", "fields": {"codename": "add_contenttype", "name": "Can add content type", "content_type": 5}}, {"pk": 14, "model": "auth.permission", "fields": {"codename": "change_contenttype", "name": "Can change content type", "content_type": 5}}, {"pk": 15, "model": "auth.permission", "fields": {"codename": "delete_contenttype", "name": "Can delete content type", "content_type": 5}}, {"pk": 28, "model": "auth.permission", "fields": {"codename": "add_iteration", "name": "Can add iteration", "content_type": 10}}, {"pk": 37, "model": "auth.permission", "fields": {"codename": "add_loggedtime", "name": "Can add logged time", "content_type": 13}}, {"pk": 25, "model": "auth.permission", "fields": {"codename": "add_project", "name": "Can add project", "content_type": 9}}, {"pk": 31, "model": "auth.permission", "fields": {"codename": "add_story", "name": "Can add story", "content_type": 11}}, {"pk": 34, "model": "auth.permission", "fields": {"codename": "add_task", "name": "Can add task", "content_type": 12}}, {"pk": 29, "model": "auth.permission", "fields": {"codename": "change_iteration", "name": "Can change iteration", "content_type": 10}}, {"pk": 38, "model": "auth.permission", "fields": {"codename": "change_loggedtime", "name": "Can change logged time", "content_type": 13}}, {"pk": 26, "model": "auth.permission", "fields": {"codename": "change_project", "name": "Can change project", "content_type": 9}}, {"pk": 32, "model": "auth.permission", "fields": {"codename": "change_story", "name": "Can change story", "content_type": 11}}, {"pk": 35, "model": "auth.permission", "fields": {"codename": "change_task", "name": "Can change task", "content_type": 12}}, {"pk": 30, "model": "auth.permission", "fields": {"codename": "delete_iteration", "name": "Can delete iteration", "content_type": 10}}, {"pk": 39, "model": "auth.permission", "fields": {"codename": "delete_loggedtime", "name": "Can delete logged time", "content_type": 13}}, {"pk": 27, "model": "auth.permission", "fields": {"codename": "delete_project", "name": "Can delete project", "content_type": 9}}, {"pk": 33, "model": "auth.permission", "fields": {"codename": "delete_story", "name": "Can delete story", "content_type": 11}}, {"pk": 36, "model": "auth.permission", "fields": {"codename": "delete_task", "name": "Can delete task", "content_type": 12}}, {"pk": 16, "model": "auth.permission", "fields": {"codename": "add_session", "name": "Can add session", "content_type": 6}}, {"pk": 17, "model": "auth.permission", "fields": {"codename": "change_session", "name": "Can change session", "content_type": 6}}, {"pk": 18, "model": "auth.permission", "fields": {"codename": "delete_session", "name": "Can delete session", "content_type": 6}}, {"pk": 19, "model": "auth.permission", "fields": {"codename": "add_site", "name": "Can add site", "content_type": 7}}, {"pk": 20, "model": "auth.permission", "fields": {"codename": "change_site", "name": "Can change site", "content_type": 7}}, {"pk": 21, "model": "auth.permission", "fields": {"codename": "delete_site", "name": "Can delete site", "content_type": 7}}, {"pk": 1, "model": "auth.user", "fields": {"username": "root", "first_name": "", "last_name": "", "is_active": true, "is_superuser": true, "is_staff": true, "last_login": "2010-02-20 11:18:45", "groups": [], "user_permissions": [], "password": "sha1$f2493$0f7b2e4387894d47810c9c885d9efc9b9043a6c7", "email": "root@example.com", "date_joined": "2010-02-20 11:18:22"}}, {"pk": 5, "model": "contenttypes.contenttype", "fields": {"model": "contenttype", "name": "content type", "app_label": "contenttypes"}}, {"pk": 2, "model": "contenttypes.contenttype", "fields": {"model": "group", "name": "group", "app_label": "auth"}}, {"pk": 10, "model": "contenttypes.contenttype", "fields": {"model": "iteration", "name": "iteration", "app_label": "projects"}}, {"pk": 8, "model": "contenttypes.contenttype", "fields": {"model": "logentry", "name": "log entry", "app_label": "admin"}}, {"pk": 13, "model": "contenttypes.contenttype", "fields": {"model": "loggedtime", "name": "logged time", "app_label": "projects"}}, {"pk": 4, "model": "contenttypes.contenttype", "fields": {"model": "message", "name": "message", "app_label": "auth"}}, {"pk": 1, "model": "contenttypes.contenttype", "fields": {"model": "permission", "name": "permission", "app_label": "auth"}}, {"pk": 9, "model": "contenttypes.contenttype", "fields": {"model": "project", "name": "project", "app_label": "projects"}}, {"pk": 6, "model": "contenttypes.contenttype", "fields": {"model": "session", "name": "session", "app_label": "sessions"}}, {"pk": 7, "model": "contenttypes.contenttype", "fields": {"model": "site", "name": "site", "app_label": "sites"}}, {"pk": 11, "model": "contenttypes.contenttype", "fields": {"model": "story", "name": "story", "app_label": "projects"}}, {"pk": 12, "model": "contenttypes.contenttype", "fields": {"model": "task", "name": "task", "app_label": "projects"}}, {"pk": 3, "model": "contenttypes.contenttype", "fields": {"model": "user", "name": "user", "app_label": "auth"}}, {"pk": "8b4e9c8d3c261624901394dd2613bde4", "model": "sessions.session", "fields": {"expire_date": "2010-03-06 11:18:45", "session_data": "gAJ9cQEoVRJfYXV0aF91c2VyX2JhY2tlbmRxAlUpZGphbmdvLmNvbnRyaWIuYXV0aC5iYWNrZW5k\ncy5Nb2RlbEJhY2tlbmRxA1UNX2F1dGhfdXNlcl9pZHEESwF1LjZjMTMyZDUxODcwZTdhZGExZTM4\nNTE0YWY1OWI0MmI4\n"}}, {"pk": 1, "model": "sites.site", "fields": {"domain": "example.com", "name": "example.com"}}, {"pk": 7, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:25:33", "object_repr": "A user can add a task to a story", "object_id": "4", "change_message": "", "user": 1, "content_type": 11}}, {"pk": 6, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:25:05", "object_repr": "A user can add a story to an iteration", "object_id": "3", "change_message": "", "user": 1, "content_type": 11}}, {"pk": 5, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:24:47", "object_repr": "A user can add an iteration to a project", "object_id": "2", "change_message": "", "user": 1, "content_type": 11}}, {"pk": 4, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:24:07", "object_repr": "A user can add a project", "object_id": "1", "change_message": "", "user": 1, "content_type": 11}}, {"pk": 3, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:21:35", "object_repr": "Release 0.1", "object_id": "2", "change_message": "", "user": 1, "content_type": 10}}, {"pk": 2, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:21:09", "object_repr": "Backlog", "object_id": "1", "change_message": "", "user": 1, "content_type": 10}}, {"pk": 1, "model": "admin.logentry", "fields": {"action_flag": 1, "action_time": "2010-02-20 11:20:47", "object_repr": "Snakeplan", "object_id": "1", "change_message": "", "user": 1, "content_type": 9}}, {"pk": 1, "model": "projects.project", "fields": {"active": true, "hidden": false, "name": "Snakeplan", "wiki_link": "", "description": "Development of snakeplan."}}, {"pk": 1, "model": "projects.iteration", "fields": {"status": 0, "name": "Backlog", "end_date": "2025-02-20", "project": 1, "days_worked": "0", "start_date": "2010-02-20", "description": ""}}, {"pk": 2, "model": "projects.iteration", "fields": {"status": 0, "name": "Release 0.1", "end_date": "2010-03-20", "project": 1, "days_worked": "0", "start_date": "2010-02-20", "description": ""}}, {"pk": 1, "model": "projects.story", "fields": {"customer": null, "status": 0, "name": "A user can add a project", "iteration": 1, "priority": 1, "tracker": null, "disposition": 0, "order": 1, "description": ""}}, {"pk": 2, "model": "projects.story", "fields": {"customer": null, "status": 0, "name": "A user can add an iteration to a project", "iteration": 1, "priority": 2, "tracker": null, "disposition": 0, "order": 2, "description": ""}}, {"pk": 3, "model": "projects.story", "fields": {"customer": null, "status": 0, "name": "A user can add a story to an iteration", "iteration": 1, "priority": 3, "tracker": null, "disposition": 0, "order": 3, "description": ""}}, {"pk": 4, "model": "projects.story", "fields": {"customer": null, "status": 0, "name": "A user can add a task to a story", "iteration": 1, "priority": 4, "tracker": null, "disposition": 0, "order": 4, "description": ""}}] | ||
diff --git a/snakeplan/urls.py b/snakeplan/urls.py index e2620d6..e2620d6 100755..100644 --- a/snakeplan/urls.py +++ b/snakeplan/urls.py | |||