Merge lp:~jml/gtg/doc-generation into lp:~gtg/gtg/old-trunk
- doc-generation
- Merge into old-trunk
Proposed by
Jonathan Lange
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~jml/gtg/doc-generation |
Merge into: | lp:~gtg/gtg/old-trunk |
Diff against target: | None lines |
To merge this branch: | bzr merge lp:~jml/gtg/doc-generation |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Bertrand Rousseau (community) | Approve | ||
Review via email: mp+9020@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Jonathan Lange (jml) wrote : | # |
Revision history for this message
Bertrand Rousseau (bertrand-rousseau) : | # |
review:
Approve
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file '.bzrignore' | |||
2 | --- .bzrignore 2009-07-14 12:13:25 +0000 | |||
3 | +++ .bzrignore 2009-07-19 05:37:47 +0000 | |||
4 | @@ -35,3 +35,4 @@ | |||
5 | 35 | 35 | ||
6 | 36 | debug_data | 36 | debug_data |
7 | 37 | _trial_temp | 37 | _trial_temp |
8 | 38 | doc/api | ||
9 | 38 | 39 | ||
10 | === modified file 'GTG/core/requester.py' | |||
11 | --- GTG/core/requester.py 2009-07-14 13:09:19 +0000 | |||
12 | +++ GTG/core/requester.py 2009-07-19 07:16:20 +0000 | |||
13 | @@ -18,24 +18,18 @@ | |||
14 | 18 | # ----------------------------------------------------------------------------- | 18 | # ----------------------------------------------------------------------------- |
15 | 19 | 19 | ||
16 | 20 | 20 | ||
24 | 21 | #Requester is a pure View object. It will not do anything but it will | 21 | class Requester: |
18 | 22 | #be used by any Interface to handle the requests to the datastore | ||
19 | 23 | |||
20 | 24 | #There could be multiple requester. It means that a requester should never | ||
21 | 25 | #Hold any data except a reference to its datastore. | ||
22 | 26 | |||
23 | 27 | class Requester : | ||
25 | 28 | """A view on a GTG datastore. | 22 | """A view on a GTG datastore. |
26 | 29 | 23 | ||
29 | 30 | `Requester` is a stateless object that simply provides a nice API for user | 24 | L{Requester} is a stateless object that simply provides a nice API for |
30 | 31 | interfaces to use for datastore operations. | 25 | user interfaces to use for datastore operations. |
31 | 32 | 26 | ||
33 | 33 | Multiple `Requester`s can exist on the same datastore, so they should | 27 | Multiple L{Requester}s can exist on the same datastore, so they should |
34 | 34 | never have state of their own. | 28 | never have state of their own. |
35 | 35 | """ | 29 | """ |
36 | 36 | 30 | ||
37 | 37 | def __init__(self, datastore): | 31 | def __init__(self, datastore): |
39 | 38 | """Construct a `Requester`.""" | 32 | """Construct a L{Requester}.""" |
40 | 39 | self.ds = datastore | 33 | self.ds = datastore |
41 | 40 | 34 | ||
42 | 41 | def connect(self, signal, func): | 35 | def connect(self, signal, func): |
43 | @@ -49,12 +43,12 @@ | |||
44 | 49 | return self.ds.has_task(tid) | 43 | return self.ds.has_task(tid) |
45 | 50 | 44 | ||
46 | 51 | def get_task(self, tid): | 45 | def get_task(self, tid): |
53 | 52 | """Get the task with the given 'tid'. | 46 | """Get the task with the given C{tid}. |
54 | 53 | 47 | ||
55 | 54 | If no such task exists, create it and force the tid to be 'tid'. | 48 | If no such task exists, create it and force the tid to be C{tid}. |
56 | 55 | 49 | ||
57 | 56 | :param tid: The task id. | 50 | @param tid: The task id. |
58 | 57 | :return: A task. | 51 | @return: A task. |
59 | 58 | """ | 52 | """ |
60 | 59 | task = self.ds.get_task(tid) | 53 | task = self.ds.get_task(tid) |
61 | 60 | return task | 54 | return task |
62 | @@ -64,10 +58,10 @@ | |||
63 | 64 | 58 | ||
64 | 65 | Note: this modifies the datastore. | 59 | Note: this modifies the datastore. |
65 | 66 | 60 | ||
68 | 67 | :param pid: The project where the new task will be created. | 61 | @param pid: The project where the new task will be created. |
69 | 68 | :param tags: The tags for the new task. If not provided, then the | 62 | @param tags: The tags for the new task. If not provided, then the |
70 | 69 | task will have no tags. | 63 | task will have no tags. |
72 | 70 | :param newtask: 'True' if this is creating a task, 'False' if | 64 | @param newtask: C{True} if this is creating a task, C{False} if |
73 | 71 | importing an existing task. | 65 | importing an existing task. |
74 | 72 | """ | 66 | """ |
75 | 73 | # XXX: The docs don't make it clear why you'd ever need to pass in | 67 | # XXX: The docs don't make it clear why you'd ever need to pass in |
76 | @@ -83,7 +77,7 @@ | |||
77 | 83 | 77 | ||
78 | 84 | Note: this modifies the datastore. | 78 | Note: this modifies the datastore. |
79 | 85 | 79 | ||
81 | 86 | :param tid: The id of the task to be deleted. | 80 | @param tid: The id of the task to be deleted. |
82 | 87 | """ | 81 | """ |
83 | 88 | self.ds.delete_task(tid) | 82 | self.ds.delete_task(tid) |
84 | 89 | 83 | ||
85 | @@ -93,19 +87,19 @@ | |||
86 | 93 | 87 | ||
87 | 94 | By default, returns a list of all the tids of all active tasks. | 88 | By default, returns a list of all the tids of all active tasks. |
88 | 95 | 89 | ||
90 | 96 | :param tags: A list of tags. If provided, restricts the list of | 90 | @param tags: A list of tags. If provided, restricts the list of |
91 | 97 | returned tasks to those that have one or more of these tags. | 91 | returned tasks to those that have one or more of these tags. |
93 | 98 | :param status: A list of statuses. If provided, restricts the list of | 92 | @param status: A list of statuses. If provided, restricts the list of |
94 | 99 | returned tasks to those that are in one of these states. | 93 | returned tasks to those that are in one of these states. |
98 | 100 | :param notag_only: If True, only include tasks without tags. Defaults | 94 | @param notag_only: If True, only include tasks without tags. Defaults |
99 | 101 | to False. | 95 | to C{False}. |
100 | 102 | :param started_only: If True, only include tasks that have been | 96 | @param started_only: If True, only include tasks that have been |
101 | 103 | started. That is, tasks that have an already-passed start date or | 97 | started. That is, tasks that have an already-passed start date or |
104 | 104 | tasks with no startdate. Defaults to 'True'. | 98 | tasks with no startdate. Defaults to C{True}. |
105 | 105 | :param is_root: If True, only include tasks that have no parent in the | 99 | @param is_root: If True, only include tasks that have no parent in the |
106 | 106 | current selection. Defaults to False. | 100 | current selection. Defaults to False. |
107 | 107 | 101 | ||
109 | 108 | :return: A list of task ids (tids). | 102 | @return: A list of task ids (tids). |
110 | 109 | """ | 103 | """ |
111 | 110 | l_tasks = [] | 104 | l_tasks = [] |
112 | 111 | for tid in self.ds.all_tasks(): | 105 | for tid in self.ds.all_tasks(): |
113 | @@ -152,12 +146,12 @@ | |||
114 | 152 | workable=False): | 146 | workable=False): |
115 | 153 | """Return a list of task ids for all active tasks. | 147 | """Return a list of task ids for all active tasks. |
116 | 154 | 148 | ||
118 | 155 | See `get_tasks_list` for more information about the parameters. | 149 | See L{get_tasks_list} for more information about the parameters. |
119 | 156 | 150 | ||
121 | 157 | :param workable: If True, then only include tasks with no pending | 151 | @param workable: If C{True}, then only include tasks with no pending |
122 | 158 | subtasks and that can be done directly and exclude any tasks that | 152 | subtasks and that can be done directly and exclude any tasks that |
125 | 159 | have a 'nonworkview' tag which is not explicitly provided in the | 153 | have a C{nonworkview} tag which is not explicitly provided in the |
126 | 160 | 'tags' parameter. Defaults to False. | 154 | C{tags} parameter. Defaults to C{False}. |
127 | 161 | """ | 155 | """ |
128 | 162 | l_tasks = [] | 156 | l_tasks = [] |
129 | 163 | if workable: | 157 | if workable: |
130 | @@ -198,7 +192,7 @@ | |||
131 | 198 | 192 | ||
132 | 199 | "Closed" means either "done", "dismissed" or "deleted". | 193 | "Closed" means either "done", "dismissed" or "deleted". |
133 | 200 | 194 | ||
135 | 201 | See `get_tasks_list` for more information about the parameters. | 195 | See L{get_tasks_list} for more information about the parameters. |
136 | 202 | """ | 196 | """ |
137 | 203 | closed = ["Done", "Dismiss", "Deleted"] | 197 | closed = ["Done", "Dismiss", "Deleted"] |
138 | 204 | return self.get_tasks_list( | 198 | return self.get_tasks_list( |
139 | @@ -224,8 +218,8 @@ | |||
140 | 224 | 218 | ||
141 | 225 | Note: this modifies the datastore. | 219 | Note: this modifies the datastore. |
142 | 226 | 220 | ||
145 | 227 | :param tagname: The name of the new tag. | 221 | @param tagname: The name of the new tag. |
146 | 228 | :return: The newly-created tag. | 222 | @return: The newly-created tag. |
147 | 229 | """ | 223 | """ |
148 | 230 | return self.ds.get_tagstore().new_tag(tagname) | 224 | return self.ds.get_tagstore().new_tag(tagname) |
149 | 231 | 225 | ||
150 | @@ -235,8 +229,8 @@ | |||
151 | 235 | def get_all_tags(self): | 229 | def get_all_tags(self): |
152 | 236 | """Return a list of every tag that was ever used.""" | 230 | """Return a list of every tag that was ever used.""" |
153 | 237 | return list(self.ds.get_tagstore().get_all_tags()) | 231 | return list(self.ds.get_tagstore().get_all_tags()) |
156 | 238 | 232 | ||
157 | 239 | def get_notag_tag(self) : | 233 | def get_notag_tag(self): |
158 | 240 | return self.ds.get_tagstore().get_notag_tag() | 234 | return self.ds.get_tagstore().get_notag_tag() |
159 | 241 | 235 | ||
160 | 242 | def get_alltag_tag(self): | 236 | def get_alltag_tag(self): |
161 | @@ -245,7 +239,7 @@ | |||
162 | 245 | def get_used_tags(self): | 239 | def get_used_tags(self): |
163 | 246 | """Return tags currently used by a task. | 240 | """Return tags currently used by a task. |
164 | 247 | 241 | ||
166 | 248 | :return: A list of tags used by a task. | 242 | @return: A list of tags used by a task. |
167 | 249 | """ | 243 | """ |
168 | 250 | # FIXME: it should be only active and visible tasks. | 244 | # FIXME: it should be only active and visible tasks. |
169 | 251 | l = [] | 245 | l = [] |
170 | 252 | 246 | ||
171 | === modified file 'GTG/core/tagstore.py' | |||
172 | --- GTG/core/tagstore.py 2009-07-17 11:39:38 +0000 | |||
173 | +++ GTG/core/tagstore.py 2009-07-19 07:18:04 +0000 | |||
174 | @@ -150,22 +150,22 @@ | |||
175 | 150 | ######################### Tag ########################################### | 150 | ######################### Tag ########################################### |
176 | 151 | 151 | ||
177 | 152 | class Tag: | 152 | class Tag: |
179 | 153 | """A short name that can be applied to Tasks. | 153 | """A short name that can be applied to L{Task}s. |
180 | 154 | 154 | ||
181 | 155 | I mean, surely you must know what a tag is by now. Think Gmail, | 155 | I mean, surely you must know what a tag is by now. Think Gmail, |
182 | 156 | del.icio.us, Flickr et al. | 156 | del.icio.us, Flickr et al. |
183 | 157 | 157 | ||
185 | 158 | A tag is defined by its name, which in most cases is '@something'. A tag | 158 | A tag is defined by its name, which in most cases is C{@something}. A tag |
186 | 159 | can also have multiple arbitrary attributes. The only attribute enforced | 159 | can also have multiple arbitrary attributes. The only attribute enforced |
188 | 160 | for tags is 'name', which always matches `Tag.get_name()`. | 160 | for tags is C{name}, which always matches L{Tag.get_name()}. |
189 | 161 | """ | 161 | """ |
190 | 162 | 162 | ||
191 | 163 | def __init__(self, name, save_cllbk=None): | 163 | def __init__(self, name, save_cllbk=None): |
192 | 164 | """Construct a tag. | 164 | """Construct a tag. |
193 | 165 | 165 | ||
195 | 166 | :param name: The name of the tag. Should be a string, generally a | 166 | @param name: The name of the tag. Should be a string, generally a |
196 | 167 | short one. | 167 | short one. |
198 | 168 | :param save_cllbk: A nullary callable, called whenever an attribute | 168 | @param save_cllbk: A nullary callable, called whenever an attribute |
199 | 169 | is set. | 169 | is set. |
200 | 170 | """ | 170 | """ |
201 | 171 | self._name = str(name) | 171 | self._name = str(name) |
202 | @@ -179,10 +179,10 @@ | |||
203 | 179 | def set_attribute(self, att_name, att_value): | 179 | def set_attribute(self, att_name, att_value): |
204 | 180 | """Set an arbitrary attribute. | 180 | """Set an arbitrary attribute. |
205 | 181 | 181 | ||
207 | 182 | This will call the 'save_cllbk' callback passed to the constructor. | 182 | This will call the C{save_cllbk} callback passed to the constructor. |
208 | 183 | 183 | ||
211 | 184 | :param att_name: The name of the attribute. | 184 | @param att_name: The name of the attribute. |
212 | 185 | :param att_value: The value of the attribute. Will be converted to a | 185 | @param att_value: The value of the attribute. Will be converted to a |
213 | 186 | string. | 186 | string. |
214 | 187 | """ | 187 | """ |
215 | 188 | if att_name == "name": | 188 | if att_name == "name": |
216 | @@ -198,16 +198,16 @@ | |||
217 | 198 | self._save() | 198 | self._save() |
218 | 199 | 199 | ||
219 | 200 | def get_attribute(self, att_name): | 200 | def get_attribute(self, att_name): |
221 | 201 | """Get the attribute 'att_name'. | 201 | """Get the attribute C{att_name}. |
222 | 202 | 202 | ||
224 | 203 | Returns None if there is no attribute matching 'att_name'. | 203 | Returns C{None} if there is no attribute matching C{att_name}. |
225 | 204 | """ | 204 | """ |
226 | 205 | return self._attributes.get(att_name, None) | 205 | return self._attributes.get(att_name, None) |
227 | 206 | 206 | ||
228 | 207 | def get_all_attributes(self, butname=False): | 207 | def get_all_attributes(self, butname=False): |
229 | 208 | """Return a list of all attribute names. | 208 | """Return a list of all attribute names. |
230 | 209 | 209 | ||
232 | 210 | :param butname: If True, exclude 'name' from the list of attribute | 210 | @param butname: If True, exclude C{name} from the list of attribute |
233 | 211 | names. | 211 | names. |
234 | 212 | """ | 212 | """ |
235 | 213 | attributes = self._attributes.keys() | 213 | attributes = self._attributes.keys() |
236 | 214 | 214 | ||
237 | === modified file 'GTG/taskeditor/taskview.py' | |||
238 | --- GTG/taskeditor/taskview.py 2009-07-13 09:20:43 +0000 | |||
239 | +++ GTG/taskeditor/taskview.py 2009-07-19 05:57:00 +0000 | |||
240 | @@ -395,9 +395,10 @@ | |||
241 | 395 | 395 | ||
242 | 396 | #This function is called so frequently that we should optimize it more. | 396 | #This function is called so frequently that we should optimize it more. |
243 | 397 | def modified(self,buff=None,full=False) : #pylint: disable-msg=W0613 | 397 | def modified(self,buff=None,full=False) : #pylint: disable-msg=W0613 |
247 | 398 | """ | 398 | """Called when the buffer has been modified. |
248 | 399 | This function is called when the buffer has been modified, | 399 | |
249 | 400 | it reflects the changes by: | 400 | It reflects the changes by: |
250 | 401 | |||
251 | 401 | 1. Applying the title style on the first line | 402 | 1. Applying the title style on the first line |
252 | 402 | 2. Changing the name of the window if title change | 403 | 2. Changing the name of the window if title change |
253 | 403 | """ | 404 | """ |
254 | 404 | 405 | ||
255 | === modified file 'HACKING' | |||
256 | --- HACKING 2009-07-14 12:13:11 +0000 | |||
257 | +++ HACKING 2009-07-19 07:15:57 +0000 | |||
258 | @@ -122,3 +122,39 @@ | |||
259 | 122 | 6. Update ``AUTHORS`` if the patch author is not already in there. | 122 | 6. Update ``AUTHORS`` if the patch author is not already in there. |
260 | 123 | 123 | ||
261 | 124 | 7. Merge the branch into trunk, then commit! | 124 | 7. Merge the branch into trunk, then commit! |
262 | 125 | |||
263 | 126 | |||
264 | 127 | Documentation | ||
265 | 128 | ------------- | ||
266 | 129 | |||
267 | 130 | We'd love it so much if you could improve the docstrings that you find in GTG. | ||
268 | 131 | |||
269 | 132 | We use the docstring conventions outlined in PEP 8 | ||
270 | 133 | <http://www.python.org/dev/peps/pep-0008/> and PEP 257 | ||
271 | 134 | <http://www.python.org/dev/peps/pep-0257/>, except modified to support epytext | ||
272 | 135 | markup. Information on epytext markup can be found at | ||
273 | 136 | <http://epydoc.sourceforge.net/epytext.html>. | ||
274 | 137 | |||
275 | 138 | You can generate the API docs by running:: | ||
276 | 139 | |||
277 | 140 | make apidocs | ||
278 | 141 | |||
279 | 142 | This builds the API documentation inside ``doc/api`` in your working tree. If | ||
280 | 143 | you are running GNOME, you can open it in your browser with:: | ||
281 | 144 | |||
282 | 145 | gnome-open doc/api/index.html | ||
283 | 146 | |||
284 | 147 | You can also run:: | ||
285 | 148 | |||
286 | 149 | make edit-apidocs | ||
287 | 150 | |||
288 | 151 | To launch a pydoctor server at http://localhost:8080/ that will let you edit | ||
289 | 152 | API documentation in place. The feature has a few rough edges, but can be | ||
290 | 153 | really useful for editing and extending API docs. To actually apply your edits | ||
291 | 154 | to the tree:: | ||
292 | 155 | |||
293 | 156 | wget http://localhost:8080/rawBigDiff -q -O- | bzr patch | ||
294 | 157 | |||
295 | 158 | Remember, docstrings should be written for people who don't know much about | ||
296 | 159 | the code. Focus on ''why'' things are the way they are, and on describing | ||
297 | 160 | ''what'' they are in the first place. | ||
298 | 125 | 161 | ||
299 | === modified file 'Makefile' | |||
300 | --- Makefile 2009-07-14 12:15:18 +0000 | |||
301 | +++ Makefile 2009-07-19 07:25:32 +0000 | |||
302 | @@ -7,6 +7,7 @@ | |||
303 | 7 | clean: | 7 | clean: |
304 | 8 | rm -rf _trial_temp | 8 | rm -rf _trial_temp |
305 | 9 | rm -rf debug_data | 9 | rm -rf debug_data |
306 | 10 | rm -rf doc/api | ||
307 | 10 | find . -name '*.pyc' -print0 | xargs -0 rm -f | 11 | find . -name '*.pyc' -print0 | xargs -0 rm -f |
308 | 11 | find . -name '*~' -print0 | xargs -0 rm -f | 12 | find . -name '*~' -print0 | xargs -0 rm -f |
309 | 12 | 13 | ||
310 | @@ -19,7 +20,20 @@ | |||
311 | 19 | find . -name '*.py' -print0 | xargs -0 ./scripts/pep8.py | 20 | find . -name '*.py' -print0 | xargs -0 ./scripts/pep8.py |
312 | 20 | find . -name '*.py' -print0 | xargs -0 ./scripts/pep8.py --repeat | wc -l | 21 | find . -name '*.py' -print0 | xargs -0 ./scripts/pep8.py --repeat | wc -l |
313 | 21 | 22 | ||
314 | 23 | # Build API documentation. | ||
315 | 24 | apidocs: | ||
316 | 25 | pydoctor --add-package GTG --make-html --html-output=doc/api \ | ||
317 | 26 | --project-name=GTG --project-url=http://gtg.fritalk.com/ \ | ||
318 | 27 | -q -q --verbose-about=epydoc2stan2 --verbose-about=epydoc2stan2 | ||
319 | 28 | |||
320 | 29 | edit-apidocs: | ||
321 | 30 | pydoctor --add-package GTG --make-html --html-output=doc/api \ | ||
322 | 31 | --project-name=GTG --project-url=http://gtg.fritalk.com/ \ | ||
323 | 32 | -q -q --verbose-about=epydoc2stan2 --verbose-about=epydoc2stan2 \ | ||
324 | 33 | --verbose-about=server --verbose-about=server --local-only \ | ||
325 | 34 | --server --edit | ||
326 | 35 | |||
327 | 22 | # Check for coding standard violations & flakes. | 36 | # Check for coding standard violations & flakes. |
328 | 23 | lint: pyflakes pep8 | 37 | lint: pyflakes pep8 |
329 | 24 | 38 | ||
331 | 25 | .PHONY: check lint pyflakes pep8 | 39 | .PHONY: check lint pyflakes pep8 apidocs |
332 | 26 | 40 | ||
333 | === modified file 'README' | |||
334 | --- README 2009-07-14 13:02:39 +0000 | |||
335 | +++ README 2009-07-19 07:26:30 +0000 | |||
336 | @@ -1,11 +1,11 @@ | |||
337 | 1 | ====== Getting Things GNOME! ====== | 1 | ====== Getting Things GNOME! ====== |
338 | 2 | 2 | ||
343 | 3 | Getting Things GNOME! (GTG) is a personal organizer for the GNOME desktop | 3 | Getting Things GNOME! (GTG) is a personal organizer for the GNOME desktop |
344 | 4 | environment inspired by the Getting Things Done (GTD) methodology. GTG is | 4 | environment inspired by the Getting Things Done (GTD) methodology. GTG is |
345 | 5 | designed with flexibility, adaptability, and ease of use in mind so it can be | 5 | designed with flexibility, adaptability, and ease of use in mind so it can be |
346 | 6 | used as more than just GTD software. | 6 | used as more than just GTD software. |
347 | 7 | 7 | ||
349 | 8 | GTG is intended to help you track everything you needto do and need to know, | 8 | GTG is intended to help you track everything you needto do and need to know, |
350 | 9 | from small tasks to large projects. | 9 | from small tasks to large projects. |
351 | 10 | 10 | ||
352 | 11 | ===== Dependencies ===== | 11 | ===== Dependencies ===== |
353 | @@ -16,23 +16,28 @@ | |||
354 | 16 | * python ConfigObj | 16 | * python ConfigObj |
355 | 17 | * python gobject | 17 | * python gobject |
356 | 18 | * python XDG | 18 | * python XDG |
358 | 19 | Please refer to your system documentation for information on how to install | 19 | |
359 | 20 | To generate the API documentation, you'll also need to install 'pydoctor'. | ||
360 | 21 | |||
361 | 22 | Please refer to your system documentation for information on how to install | ||
362 | 20 | these modules if they're not currently available. | 23 | these modules if they're not currently available. |
363 | 21 | 24 | ||
365 | 22 | To install these packages on Debian-based systems, execute the following | 25 | To install these packages on Debian-based systems, execute the following |
366 | 23 | command: | 26 | command: |
367 | 24 | $ sudo aptitude install python-gtk2 python-glade2 python-xdg python-gobject\ | 27 | $ sudo aptitude install python-gtk2 python-glade2 python-xdg python-gobject\ |
369 | 25 | python-configobj | 28 | python-configobj python-pydoctor |
370 | 29 | |||
371 | 30 | Note that the python-pydoctor package is broken in karmic. | ||
372 | 26 | 31 | ||
373 | 27 | ===== Installing and Running ===== | 32 | ===== Installing and Running ===== |
374 | 28 | 33 | ||
375 | 29 | To install GTG, either unpack the tarball: | 34 | To install GTG, either unpack the tarball: |
377 | 30 | 35 | ||
378 | 31 | $ tar xzvf gtg.tar.gz | 36 | $ tar xzvf gtg.tar.gz |
379 | 32 | 37 | ||
381 | 33 | or check out our bazaar branch for a development version (we try to keep those | 38 | or check out our bazaar branch for a development version (we try to keep those |
382 | 34 | unbroken and ready for production use): | 39 | unbroken and ready for production use): |
384 | 35 | 40 | ||
385 | 36 | $ bzr branch lp:gtg | 41 | $ bzr branch lp:gtg |
386 | 37 | 42 | ||
387 | 38 | To run GTG, either execute it directly from the source folder: | 43 | To run GTG, either execute it directly from the source folder: |
388 | @@ -59,7 +64,7 @@ | |||
389 | 59 | 64 | ||
390 | 60 | ===== Quick add ===== | 65 | ===== Quick add ===== |
391 | 61 | 66 | ||
393 | 62 | In the quickadd line you can use "attribue:argument" with any title. | 67 | In the quickadd line you can use "attribute:argument" with any title. |
394 | 63 | Valid attributes are: "tags", "defer", "due" | 68 | Valid attributes are: "tags", "defer", "due" |
395 | 64 | E.g.: | 69 | E.g.: |
396 | 65 | "due:friday task description" | 70 | "due:friday task description" |
This branch adds 'make apidocs' and 'make edit-apidocs' targets to the Makefile and updates the HACKING file to explain how docstrings & API docs should work. I've also updated the README file to indicate the new optional dependencies.
To build the docs, you'll need pydoctor & its dependencies. pydoctor is best retrieved from lp:pydoctor. If you can't figure out how to get it running from the README & HACKING docs, then the documentation needs to be improved.
The rest of the branch is fixes to docstrings that we found when I tried to generate the docs.
An example build of the API docs can be found at http:// static. mumak.net/ gtg-api/.