Codebase list etm / c862b15
New upstream release. Debian Janitor 1 year, 2 months ago
14 changed file(s) with 487 addition(s) and 437 deletion(s). Raw diff Collapse all Expand all
0 Metadata-Version: 1.1
0 Metadata-Version: 2.1
11 Name: etmtk
2 Version: 3.2.30
2 Version: 3.2.39
33 Summary: event and task manager
4 Home-page: http://people.duke.edu/~dgraham/etmtk
4 Home-page: https://github.com/dagraham/etm-tk
55 Author: Daniel A Graham
6 Author-email: daniel.graham@duke.edu
6 Author-email: dnlgrhm@gmail.com
77 License: License :: OSI Approved :: GNU General Public License (GPL)
88 Description: manage events and tasks using simple text files
99 Platform: Any
2525 Classifier: Programming Language :: Python :: 3.3
2626 Classifier: Programming Language :: Python :: 3.4
2727 Classifier: Programming Language :: Python :: 3.5
28 Classifier: Programming Language :: Python :: 3.6
2829 Classifier: Topic :: Office/Business
2930 Classifier: Topic :: Office/Business :: News/Diary
3031 Classifier: Topic :: Office/Business :: Scheduling
32 Provides-Extra: icalendar
0 etm (3.2.39-1) UNRELEASED; urgency=low
1
2 * New upstream release.
3
4 -- Debian Janitor <janitor@jelmer.uk> Sat, 25 Feb 2023 16:29:46 -0000
5
06 etm (3.2.30-4) unstable; urgency=medium
17
28 [ Debian Janitor ]
77 # from etmTk import view
88 from etmTk.data import setup_logging
99 import codecs
10 import yaml
10 import ruamel.yaml as yaml
1111 import locale
1212 import gettext
1313 import platform
0 # Recent changes as of Fri Mar 31 09:35:30 EDT 2017:
1 - 8 minutes ago (HEAD -> master, tag: 3.2.30) Dan Graham
0 # Recent changes as of Thu Oct 3 17:41:10 EDT 2019:
1 - 5 minutes ago (HEAD -> master, tag: 3.2.39) Dan Graham
2 7b37fa3 2019-10-03 17:36:24 -0400
3 Merge branch 'master' of https://github.com/dagraham/etm-tk Tagged
4 version 3.2.39 [2019-10-03 17:36:24 -0400].
5
6 - 7 minutes ago Dan Graham
7 91a1676 2019-10-03 17:34:34 -0400
8 cleanup
9
10 - 23 minutes ago (origin/master) dagraham
11 eb03f6f 2019-10-03 17:18:33 -0400
12 Merge pull request #70 from cipharius/patch/fix-font-colors
13
14 Fix broken Tk Treeview item fg/bg colors
15 - 27 minutes ago dagraham
16 6232ac5 2019-10-03 17:14:28 -0400
17 Merge pull request #71 from
18 cipharius/feature/handle-item-linebreaks
19
20 Wrap item summary newlines in treeview
21 - 3 days ago cipharius
22 bdc452e 2019-10-01 10:28:43 +0300
23 Wrap item summary newlines in treeview
24
25 - 3 days ago cipharius
26 1199f9e 2019-10-01 10:02:23 +0300
27 Fix broken tkinter Treeview item fg/bg colors
28
29 Since Python3.7.3, there has appeared an issue with tkinter
30 Treeview item colors. A workaround exists which can be found at:
31 https://bugs.python.org/issue36468
32
33 - 9 months ago Dan Graham
34 753616c 2019-01-06 10:03:27 -0500
35 Merge branch 'master' of https://github.com/dagraham/etm-tk
36
37 - 9 months ago Dan Graham
38 54cecda 2019-01-06 10:03:02 -0500
39 tagged 3.2.38
40
41 - 9 months ago (tag: 3.2.38) dagraham
42 b8d991f 2019-01-06 09:09:33 -0500
43 Merge pull request #67 from kbulygin/master Tagged version 3.2.38
44 [2019-01-06 09:09:33 -0500].
45
46 - 9 months ago (export-json) dagraham
47 81bbde2 2019-01-06 09:09:33 -0500
48 Merge pull request #67 from kbulygin/master
49
50 Fixing an UnboundLocalError, requiring ruamel.yaml
51 - 9 months ago Kirill Bulygin
52 92377a3 2019-01-04 16:42:59 +0500
53 Changing PyYaml to (the actually used) ruamel.yaml
54
55 The current master revision in the parent repo is
56 https://github.com/dagraham/etm-tk/commit/47a8f34607d40ed75aa4072394d7be123cdef4b1
57 (dated 2018-12-03), so the version of ruamel.yaml (0.15.80) is
58 chosen as the current version for that date (according to
59 https://pypi.org/project/ruamel.yaml/#history).
60 - 9 months ago Kirill Bulygin
61 09ae310 2019-01-04 15:58:22 +0500
62 Fixing an UnboundLocalError for "where"
63 - 10 months ago (export) Dan Graham
64 47a8f34 2018-12-03 11:00:22 -0500
65 Merge branch 'master' of https://github.com/dagraham/etm-tk
66
67 - 10 months ago Dan Graham
68 7a42a79 2018-12-03 10:59:15 -0500
69 Cleaned up export_json
70
71 - 10 months ago Dan Graham
72 604f757 2018-12-03 10:37:11 -0500
73 export_json tweaks
74
75 - 1 year ago (tag: v3.2.37) dagraham
76 4be27f4 2018-09-23 12:54:31 -0400
77 Add files via upload
78 - 1 year ago Dan Graham
79 e2ccac0 2018-09-23 11:54:39 -0400
80 CHANGES
81
82 - 1 year ago (tag: 3.2.37) Dan Graham
83 d00f1b7 2018-09-23 11:06:33 -0400
84 Replaced yaml.load with yaml.safe_load Tagged version 3.2.37
85 [2018-09-23 11:06:33 -0400].
86
87 - 1 year, 6 months ago Dan Graham
88 e1a2798 2018-03-24 13:58:28 -0400
89 Merge branch 'master' of https://github.com/dagraham/etm-tk
90
91 - 1 year, 6 months ago Dan Graham
92 7c2a271 2018-03-24 13:58:11 -0400
93 remove freq 'l' and append '+' to 's'
94
95 - 1 year, 6 months ago Dan Graham
96 89e4e59 2018-03-23 18:02:06 -0400
97 Merge branch 'master' of https://github.com/dagraham/etm-tk
98
99 - 1 year, 6 months ago Dan Graham
100 2f1c41a 2018-03-23 18:01:46 -0400
101 CHANGES, ...
102
103 - 1 year, 6 months ago (tag: 3.2.36) Dan Graham
104 a219190 2018-03-23 17:36:34 -0400
105 removed extraneous print from export_json. Tagged version 3.2.36
106 [2018-03-23 17:36:34 -0400].
107
108 - 1 year, 6 months ago Dan Graham
109 433cd0b 2018-03-23 17:36:34 -0400
110 removed extraneous print from export_json.
111
112 - 1 year, 6 months ago Dan Graham
113 df29f61 2018-03-23 17:32:23 -0400
114 patched CHANGES
115
116 - 1 year, 6 months ago Dan Graham
117 9a763aa 2018-03-23 17:23:31 -0400
118 Fixed bug in binding for countdown timer. Fixed bug in
119 export_json.
120
121 - 1 year, 7 months ago (tag: 3.2.35) Dan Graham
122 6e8b778 2018-03-16 11:36:19 -0400
123 Cleaned up duplicate alerts in export_json Tagged version 3.2.35
124 [2018-03-16 11:36:19 -0400].
125
126 - 1 year, 7 months ago Dan Graham
127 ea61619 2018-03-16 11:36:19 -0400
128 Cleaned up duplicate alerts in export_json
129
130 - 1 year, 7 months ago (tag: 3.2.34) Dan Graham
131 f3abcfe 2018-03-13 16:23:15 -0400
132 CHANGES, ... Tagged version 3.2.34 [2018-03-13 16:23:15 -0400].
133
134 - 1 year, 7 months ago (tag: 3.2.33p1) Dan Graham
135 5451786 2018-03-13 16:20:38 -0400
136 merged Tagged version 3.2.33p1 [2018-03-13 16:20:38 -0400].
137
138 - 1 year, 7 months ago Dan Graham
139 b1ef507 2018-03-13 15:53:07 -0400
140 Merge branch 'master' of https://github.com/dagraham/etm-tk
141
142 - 1 year, 7 months ago Dan Graham
143 f7794d0 2018-03-13 15:52:43 -0400
144 data.py
145
146 - 1 year, 7 months ago Dan Graham
147 4fdde26 2018-03-13 15:50:42 -0400
148 CHANGES and docs/conf.py
149
150 - 1 year, 7 months ago Dan Graham
151 977a78c 2018-03-13 15:48:47 -0400
152 Merge branch 'master' of https://github.com/dagraham/etm-tk
153
154 - 1 year, 7 months ago (origin/export-json) Dan Graham
155 9b00ca7 2018-03-13 15:25:48 -0400
156 fixed bug in exporting alerts to json.
157
158 - 1 year, 7 months ago (tag: 3.2.33) Dan Graham
159 fe9a866 2018-03-08 15:16:24 -0500
160 document tweaks Tagged version 3.2.33 [2018-03-08 15:16:24 -0500].
161
162 - 1 year, 7 months ago (tag: 3.2.32p1) Dan Graham
163 8cd923d 2018-03-08 14:55:43 -0500
164 fixed bug in hsh2ical Tagged version 3.2.32p1 [2018-03-08 14:55:43
165 -0500].
166
167 - 1 year, 7 months ago (tag: 3.2.32) Dan Graham
168 88ed8da 2018-03-08 14:39:39 -0500
169 export_json seems to give the desired result. Tagged version
170 3.2.32 [2018-03-08 14:39:39 -0500].
171
172 - 1 year, 7 months ago Dan Graham
173 342219e 2018-03-08 14:39:39 -0500
174 export_json seems to give the desired result.
175
176 - 1 year, 7 months ago Dan Graham
177 06e4b08 2018-03-05 10:59:06 -0500
178 More export_json tweaks.
179
180 - 1 year, 7 months ago Dan Graham
181 3223760 2018-02-24 11:47:12 -0500
182 More tweaks on export_json.
183
184 - 1 year, 7 months ago Dan Graham
185 17ad2b3 2018-02-22 12:52:52 -0500
186 export_json now switches 't' to 'c' in rrules.
187
188 - 1 year, 7 months ago Dan Graham
189 7130d43 2018-02-22 11:48:46 -0500
190 Added a png file and cleaned up extraneous files.
191
192 - 1 year, 7 months ago Dan Graham
193 a469ac1 2018-02-22 11:43:19 -0500
194 export_json now uses the new etm-mvc item types
195
196 - 1 year, 7 months ago Dan Graham
197 067b2b3 2018-02-22 10:34:46 -0500
198 Ready to work on export-json
199
200 - 1 year, 8 months ago Dan Graham
201 c93a7cb 2018-02-16 21:29:27 -0500
202 Auto-commit: saved ATKEYS.rst
203
204 - 1 year, 8 months ago Dan Graham
205 8a46a91 2018-02-16 16:16:18 -0500
206 Auto-commit: saved ATKEYS.rst
207
208 - 2 years, 2 months ago Dan Graham
209 d971c97 2017-08-10 17:13:17 -0400
210 Packaging changes requested for Debian/Solus
211
212 Updated path for appdata.xml to /usr/share/metainfo and removed
213 .xpm icon from package.
214
215 - 2 years, 2 months ago (tag: 3.2.31) Dan Graham
216 050ec13 2017-08-10 16:27:53 -0400
217 Auto-commit: saved setup.py Tagged version 3.2.31 [2017-08-10
218 16:27:53 -0400].
219
220 - 2 years, 6 months ago Dan Graham
221 3027d50 2017-03-31 11:04:15 -0400
222 Auto-commit: saved
223 fugitive:///Users/dag/etm-tk/.git//0/etmTk/data.py
224
225 - 2 years, 6 months ago Dan Graham
226 0997bc9 2017-03-31 10:55:04 -0400
227 Auto-commit: saved
228 fugitive:///Users/dag/etm-tk/.git//0/etmTk/data.py
229
230 - 2 years, 6 months ago Dan Graham
231 aad1112 2017-03-31 10:50:22 -0400
232 Auto-commit: saved
233 fugitive:///Users/dag/etm-tk/.git//0/etmTk/data.py
234
235 - 2 years, 6 months ago Dan Graham
236 aac9e52 2017-03-31 10:48:22 -0400
237 Auto-commit: saved
238 fugitive:///Users/dag/etm-tk/.git//0/etmTk/data.py
239
240 - 2 years, 6 months ago Dan Graham
241 ce692a2 2017-03-31 10:13:26 -0400
242 Auto-commit: saved /Users/dag/etm-tk/setup.py
243
244 - 2 years, 6 months ago Dan Graham
245 cffbcdc 2017-03-31 09:39:54 -0400
246 Updated conf.py, CHANGES and etm.1
247
248 - 2 years, 6 months ago (tag: 3.2.30) Dan Graham
2249 4d8cdae 2017-03-31 09:28:19 -0400
3250 Incorporated unicode fixes from Sebastian. Merged export-json.
4251 Tagged version 3.2.30 [2017-03-31 09:28:19 -0400].
5252
6 - 25 minutes ago Dan Graham
253 - 2 years, 6 months ago Dan Graham
7254 400626d 2017-03-31 09:10:29 -0400
8255 Auto-commit: saved data.py
9256
10 - 29 minutes ago Dan Graham
257 - 2 years, 6 months ago Dan Graham
11258 3706c2d 2017-03-31 09:07:09 -0400
12259 Auto-commit: saved data.py
13260
14 - 54 minutes ago Dan Graham
261 - 2 years, 6 months ago Dan Graham
15262 8a66e16 2017-03-31 08:41:30 -0400
16263 Auto-commit: saved
17264 fugitive:///Users/dag/etm-tk/.git//0/etmTk/data.py
18265
19 - 67 minutes ago Dan Graham
266 - 2 years, 6 months ago Dan Graham
20267 6d07cf0 2017-03-31 08:29:11 -0400
21268 Auto-commit: saved data.py
22269
23 - 68 minutes ago Dan Graham
270 - 2 years, 6 months ago Dan Graham
24271 d2ae945 2017-03-31 08:28:13 -0400
25272 Auto-commit: saved data.py
26273
27 - 68 minutes ago Dan Graham
274 - 2 years, 6 months ago Dan Graham
28275 fd01f91 2017-03-31 08:27:33 -0400
29276 Auto-commit: saved data.py
30277
31 - 77 minutes ago Dan Graham
278 - 2 years, 6 months ago Dan Graham
32279 9f5cc21 2017-03-31 08:18:44 -0400
33280 Auto-commit: saved data.py
34281
35 - 15 hours ago (tag: 3.2.29) Dan Graham
282 - 2 years, 6 months ago (tag: 3.2.29) Dan Graham
36283 44a7600 2017-03-30 19:03:50 -0400
37284 Auto-commit: saved data.py Tagged version 3.2.29 [2017-03-30
38285 19:03:50 -0400].
39286
40 - 15 hours ago Dan Graham
287 - 2 years, 6 months ago Dan Graham
41288 bdd200f 2017-03-30 18:19:52 -0400
42289 Auto-commit: saved data.py
43290
44 - 16 hours ago (export-json) Dan Graham
291 - 2 years, 6 months ago Dan Graham
45292 24c693d 2017-03-30 18:03:51 -0400
46293 Back to master
47294
48 - 16 hours ago Dan Graham
295 - 2 years, 6 months ago Dan Graham
49296 41f3f98 2017-03-30 17:58:00 -0400
50297 Auto-commit: saved .gitignore
51298
52 - 16 hours ago Dan Graham
299 - 2 years, 6 months ago Dan Graham
53300 a9a3945 2017-03-30 17:19:56 -0400
54301 Auto-commit: saved data.py
55302
56 - 16 hours ago Dan Graham
303 - 2 years, 6 months ago Dan Graham
57304 134bd7f 2017-03-30 17:15:53 -0400
58305 Auto-commit: saved data.py
59306
60 - 6 months ago (tag: 3.2.28p3) Dan Graham
307 - 3 years ago (tag: 3.2.28p3) Dan Graham
61308 759a8d8 2016-10-05 09:05:13 -0400
62309 Unicode fix provided for lst2str by Sebastian. Tagged version
63310 3.2.28p1 [2016-10-05 09:05:13 -0400]. Tagged version 3.2.28p2
64311 [2016-10-05 09:05:13 -0400]. Tagged version 3.2.28p3 [2016-10-05
65312 09:05:13 -0400].
66313
67 - 6 months ago (origin/export-json) Dan Graham
314 - 3 years ago Dan Graham
68315 9bc0b9f 2016-10-04 21:44:28 -0400
69316 Added rst docs using sphinx.
70317
71 - 6 months ago (tag: 3.2.28) Dan Graham
318 - 3 years ago (tag: 3.2.28) Dan Graham
72319 6fb8f22 2016-10-04 17:24:51 -0400
73320 import version into conf.py Tagged version 3.2.28 [2016-10-04
74321 17:24:51 -0400].
75322
76 - 6 months ago Dan Graham
323 - 3 years ago Dan Graham
77324 d5898ed 2016-10-04 17:21:53 -0400
78325 removed keybindings.rst
79326
80 - 6 months ago Dan Graham
327 - 3 years ago Dan Graham
81328 b5e7617 2016-10-04 16:45:58 -0400
82329 Added rst docs using sphinx.
83330
84 - 6 months ago Dan Graham
331 - 3 years ago Dan Graham
85332 f533975 2016-10-04 16:22:28 -0400
86333 Added export_json.
87334
88 - 8 months ago (no_etmdir) Dan Graham
335 - 3 years, 2 months ago (no_etmdir) Dan Graham
89336 a53f82c 2016-08-03 06:46:19 -0400
90337 Only write colors.cfg if etmdir exists.
91338
92 - 8 months ago Dan Graham
339 - 3 years, 2 months ago Dan Graham
93340 0757f9b 2016-08-03 06:44:58 -0400
94341 Only write colors.cfg if etmdir exists.
95342
96 - 9 months ago Dan Graham
343 - 3 years, 3 months ago Dan Graham
97344 db97a2e 2016-07-13 17:31:14 -0400
98345 Generate id's in export_json using random choice of seconds from
99346 modification time to last access time. Fixed bug in creating
100347 histories for jobs.
101348
102 - 9 months ago Dan Graham
349 - 3 years, 3 months ago Dan Graham
103350 b2b4e7f 2016-07-12 20:35:57 -0400
104351 Added hsh2entry to update "entry" in export_json.
105352
106 - 9 months ago Dan Graham
353 - 3 years, 3 months ago Dan Graham
107354 1cc880d 2016-07-12 18:38:34 -0400
108355 Added alerts.
109356
110 - 9 months ago Dan Graham
357 - 3 years, 3 months ago Dan Graham
111358 0a38559 2016-07-12 18:37:36 -0400
112359 Implemented export_json with a binding in view.py. Handles jobs
113360 with ids and prereqs, rrulestr, datetime and timedelta formatting,
114361 finish and history. Missing currently is an update for entry.
115362
116 - 10 months ago (origin/master) Dan Graham
363 - 3 years, 4 months ago Dan Graham
117364 a847007 2016-06-06 10:56:28 -0400
118365 Fixed itemtype missing key error when entering "=" default
119366 entries.
120367
121 - 10 months ago (tag: 3.2.27) Dan Graham
368 - 3 years, 4 months ago (tag: 3.2.27) Dan Graham
122369 2fb7c10 2016-05-23 15:04:24 -0400
123370 Fixed timezone bug in processing dated reports with rrules. Tagged
124371 version 3.2.27 [2016-05-23 15:04:24 -0400].
125372
126 - 11 months ago Dan Graham
373 - 3 years, 5 months ago Dan Graham
127374 b5b1d4d 2016-04-26 11:16:34 -0400
128375 Removed version info conflicts.
129376
130 - 11 months ago Dan Graham
377 - 3 years, 5 months ago Dan Graham
131378 d1b86f8 2016-04-26 11:07:42 -0400
132379 Merge remote-tracking branch 'origin/master'
133380
137384 # etmTk/v.py
138385 # etmTk/version.py
139386
140 - 11 months ago Dan Graham
387 - 3 years, 5 months ago Dan Graham
141388 ab4b5e9 2016-04-26 11:06:36 -0400
142389 Coordinated versions with github
143390
144 - 1 year ago (tag: 3.2.26) Dan Graham
391 - 3 years, 6 months ago (tag: 3.2.26) Dan Graham
145392 74262ed 2016-03-28 10:39:48 -0400
146393 Fixed @f entry when editing this instance of a repeating task.
147394 Tagged version 3.2.25 [2016-03-28 10:39:48 -0400]. Tagged version
148395 3.2.25p1 [2016-03-28 10:39:48 -0400]. Tagged version 3.2.26
149396 [2016-03-28 10:39:48 -0400].
150397
151 - 1 year ago Dan Graham
398 - 3 years, 6 months ago Dan Graham
152399 5d5f261 2016-03-28 10:39:48 -0400
153400 Fixed @f entry when editing this instance of a repeating task.
154401 Tagged version 3.2.25 [2016-03-28 10:39:48 -0400]. Tagged version
155402 3.2.25p1 [2016-03-28 10:39:48 -0400].
156403
157 - 1 year ago Dan Graham
404 - 3 years, 6 months ago Dan Graham
158405 a4cabe7 2016-03-28 10:39:48 -0400
159406 Fixed @f entry when editing this instance of a repeating task.
160407
161 - 1 year ago Dan Graham
408 - 3 years, 6 months ago Dan Graham
162409 ef32f89 2016-03-27 15:59:44 -0400
163410 Fix for dateutil 2.5.1 in getInstance.
164411
165 - 1 year, 2 months ago Dan Graham
412 - 3 years, 8 months ago Dan Graham
166413 50d2a52 2016-02-04 15:57:41 -0500
167414 Merge remote-tracking branch 'origin/master'
168415
172419 # etmTk/v.py
173420 # etmTk/version.py
174421
175 - 1 year, 2 months ago Dan Graham
422 - 3 years, 8 months ago Dan Graham
176423 6850202 2016-02-04 15:55:19 -0500
177424 Update to 3.2.24
178425
179426 Tagged new release
180427
181 - 1 year, 2 months ago (tag: 3.2.24) Dan Graham
428 - 3 years, 8 months ago (tag: 3.2.24) Dan Graham
182429 151995a 2016-02-04 09:29:19 -0500
183430 Include both the passed command and the error output in
184431 check_output. Tagged version 3.2.23p3 [2016-02-04 09:29:19 -0500].
185432 Tagged version 3.2.24 [2016-02-04 09:29:19 -0500].
186433
187 - 1 year, 2 months ago (tag: 3.2.23p3) Dan Graham
434 - 3 years, 8 months ago (tag: 3.2.23p3) Dan Graham
188435 a3541eb 2016-02-04 09:29:19 -0500
189436 Include both the passed command and the error output in
190437 check_output. Tagged version 3.2.23p3 [2016-02-04 09:29:19 -0500].
191438
192 - 1 year, 2 months ago (tag: 3.2.23p2) Dan Graham
439 - 3 years, 8 months ago (tag: 3.2.23p2) Dan Graham
193440 fdd1cb1 2016-02-03 16:02:09 -0500
194441 In check_output, replaced STDOUT with subprocess.STDOUT. Tagged
195442 version 3.2.23p2 [2016-02-03 16:02:09 -0500].
196443
197 - 1 year, 2 months ago (tag: 3.2.23p1) Dan Graham
444 - 3 years, 8 months ago (tag: 3.2.23p1) Dan Graham
198445 8fc070e 2016-02-03 11:00:15 -0500
199446 Replaced subprocess.call with check_output which calls
200447 subprocess.check_output and logs the error message if an exception
201448 occurs. Tagged version 3.2.23p1 [2016-02-03 11:00:15 -0500].
202449
203 - 1 year, 2 months ago (tag: 3.2.23) Dan Graham
450 - 3 years, 9 months ago (tag: 3.2.23) Dan Graham
204451 caf8bb4 2016-01-15 09:13:35 -0500
205452 Apply 'b' and 'e' settings to all items in reports. Tagged version
206453 3.2.23 [2016-01-15 09:13:35 -0500].
207454
208 - 1 year, 3 months ago Dan Graham
455 - 3 years, 9 months ago Dan Graham
209456 38918e1 2016-01-14 10:17:50 -0500
210457 Changed 'event' to 'start' in show alerts dialog.
211458
212 - 1 year, 4 months ago (tag: 3.2.22p1) Dan Graham
459 - 3 years, 11 months ago (tag: 3.2.22p1) Dan Graham
213460 b937b61 2015-11-18 14:27:23 -0500
214461 Use, e.g., Wed 18 Dec (Today), in short date format. Allow @n
215462 entries in events (reminders). Tagged version 3.2.22p1 [2015-11-18
216463 14:27:23 -0500].
217464
218 - 1 year, 5 months ago Dan Graham
465 - 3 years, 11 months ago Dan Graham
219466 2e862aa 2015-11-08 16:57:18 -0500
220467 Added __init__.py to satisfy setup.py.
221468
222 - 1 year, 5 months ago Dan Graham
223 15ede9e 2015-11-07 10:58:35 -0500
224 Tagged 3.2.22
225
226 - 1 year, 5 months ago Dan Graham
227 546559b 2015-11-07 09:55:57 -0500
228 Added CHANGES and etm.1 to repository to satisfy setup.py. Tagged
229 version 3.2.22 [2015-11-07 09:55:57 -0500].
230
231 - 1 year, 5 months ago Dan Graham
232 c6d88f7 2015-11-07 09:55:57 -0500
233 Added CHANGES and etm.1 to repository to satisfy setup.py.
234
235 - 1 year, 5 months ago Dan Graham
236 3412ab3 2015-11-06 14:44:23 -0500
237 Snooze message modification. Tagged version 3.2.21 [2015-11-06
238 14:44:23 -0500].
239
240 - 1 year, 5 months ago Dan Graham
241 39ba0f5 2015-11-06 14:44:23 -0500
242 Snooze message modification.
243
244 - 1 year, 5 months ago Dan Graham
245 a6bfc81 2015-11-06 10:39:05 -0500
246 Change snooze behavior to wait from the time the snooze button is
247 pressed with seconds are rounded off to the nearest minute. Fixed
248 typo: tmp_copy to tmp_cpy in view.py.
249
250 - 1 year, 5 months ago (tag: 3.2.20) Dan Graham
251 6bbd054 2015-10-23 11:39:44 -0400
252 Added EXTRAS_REQUIRES. Tagged version 3.2.19 [2015-10-23 11:39:44
253 -0400]. Tagged version [2015-10-23 11:39:44 -0400]. Tagged
254 version [2015-10-23 11:39:44 -0400]. Tagged version [2015-10-23
255 11:39:44 -0400]. Tagged version 3.2.19p1 [2015-10-23 11:39:44
256 -0400]. Tagged version 3.2.19p2 [2015-10-23 11:39:44 -0400].
257 Tagged version 3.2.19p3 [2015-10-23 11:39:44 -0400]. Tagged
258 version 3.2.19p4 [2015-10-23 11:39:44 -0400]. Tagged version
259 3.2.19p5 [2015-10-23 11:39:44 -0400]. Tagged version 3.2.20
260 [2015-10-23 11:39:44 -0400].
261
262 - 1 year, 5 months ago Dan Graham
263 0afa353 2015-10-22 07:00:45 -0400
264 Changed REQUIRES in setup.py to eliminate the python requirement.
265
266 - 1 year, 5 months ago (tag: 3.2.18) Dan Graham
267 73d73ca 2015-10-18 16:39:53 -0400
268 Merge branch 'master' of https://github.com/dagraham/etm-tk Tagged
269 version 3.2.18 [2015-10-18 16:39:53 -0400].
270
271 - 1 year, 5 months ago dagraham
272 d890da8 2015-10-18 16:33:21 -0400
273 Merge pull request #49 from jeanCarloMachado/master
274
275 Added solarized dark colorscheme
276 - 1 year, 5 months ago Jean Carlo Machado
277 8768a13 2015-10-18 17:31:13 -0200
278 added solarized dark colorscheme
279
280 - 1 year, 5 months ago Dan Graham
281 9e99caf 2015-10-18 10:37:03 -0400
282 Changed error message for integer required.
283
284 - 1 year, 5 months ago Dan Graham
285 7e22189 2015-10-15 22:41:05 -0400
286 Make @q an option for all item types.
287
288 - 1 year, 6 months ago Dan Graham
289 5c2035a 2015-10-09 11:06:15 -0400
290 If 'q' but not 'z' is in hsh, then add hsh['z'] using
291 local_timezone.
292
293 - 1 year, 6 months ago Dan Graham
294 278a723 2015-10-09 06:30:15 -0400
295 Added Python 3.5 to the setup.py classifiers.
296
297 - 1 year, 6 months ago Dan Graham
298 11fd77f 2015-10-03 12:47:31 -0400
299 Fixed bug when copying an item in monthly view. Tagged version
300 [2015-10-03 12:47:31 -0400]. Tagged version ..p1 [2015-10-03
301 12:47:31 -0400]. Tagged version ..p2 [2015-10-03 12:47:31 -0400].
302 Tagged version ..p3 [2015-10-03 12:47:31 -0400]. Tagged version
303 3.2.17p4 [2015-10-03 12:47:31 -0400].
304
305 - 1 year, 6 months ago Dan Graham
306 99477f9 2015-10-03 12:47:31 -0400
307 Fixed bug when copying an item in monthly view.
308
309 - 1 year, 6 months ago Dan Graham
310 03da1c8 2015-10-02 11:00:58 -0400
311 Updated REQUIRES and EXTRAS in setup.py.
312
313 - 1 year, 6 months ago (tag: 3.2.17) Dan Graham
314 16b846a 2015-10-01 07:44:08 -0400
315 Added def for _() to data. Some refactoring and optimizations,
316 e.g., removed unused lines2Items. Changed "start time" to
317 "starting time". Reduced min sizes in view. Tagged version 3.2.17
318 [2015-10-01 07:44:08 -0400].
319
320 - 1 year, 6 months ago Dan Graham
321 3bf408a 2015-09-21 11:33:23 -0400
322 Add today to datetimes if there is a begin by for today.
323
324 - 1 year, 6 months ago Dan Graham
325 f6253ff 2015-09-18 10:52:38 -0400
326 Changed platform information from platform.system() to
327 platform.platform(terse=1).
328
329 - 1 year, 7 months ago (tag: 3.2.16) Dan Graham
330 d5eca4c 2015-09-11 13:57:23 -0400
331 Added 'agenda_omit' to options. Accepts a list of types from 'ac',
332 'by', 'fn', 'ns', 'oc' to hide from the agenda day view. Tagged
333 version 3.2.16 [2015-09-11 13:57:23 -0400].
334
335 - 1 year, 7 months ago (tag: 3.2.15) Dan Graham
336 0fe0e4b 2015-08-29 07:57:43 -0400
337 Use naive datetime in setting 'bef' in updateClock. Tagged version
338 3.2.14p6 [2015-08-29 07:57:43 -0400]. Tagged version 3.2.15
339 [2015-08-29 07:57:43 -0400].
340
341 - 1 year, 7 months ago (tag: 3.2.13p2) Dan Graham
342 a6c3304 2015-08-28 06:27:11 -0400
343 Fixed bug in updateClock. Tagged version 3.2.14 [2015-08-28
344 06:27:11 -0400].
345
346 - 1 year, 7 months ago Dan Graham
347 3a6a388 2015-08-28 06:27:11 -0400
348 Fixed bug in updateClock.
349
350 - 1 year, 7 months ago (tag: 3.2.13) Dan Graham
351 2dab897 2015-08-26 12:07:13 -0400
352 Set options['bef'] in get_options and update on new_day in
353 update_clock. Refactored oneminute, onehour, oneday, oneweek as
354 all uppercase to be consistent. Tagged version 3.2.13 [2015-08-26
355 12:07:13 -0400].
356
357 - 1 year, 7 months ago (tag: 3.2.12) Dan Graham
358 5a76ce8 2015-08-24 17:44:04 -0400
359 Changed the options for when/if to close the alert message box to
360 message_next and message_last. Tagged version 3.2.12 [2015-08-24
361 17:44:04 -0400].
362
363 - 1 year, 7 months ago Dan Graham
364 0588774 2015-08-24 12:57:07 -0400
365 Added 'next' and 'next_alert' to template expansions. Added auto
366 close to message box dialogs using options 'message_alert_seconds'
367 for next message boxes and 'message_snooze_seconds' for last
368 message boxes.
369
370 - 1 year, 7 months ago (tag: 3.2.11) Dan Graham
371 4d01318 2015-08-21 17:01:13 -0400
372 Cancel snooze if item is rescheduled, edited or deleted. Tagged
373 version 3.2.11 [2015-08-21 17:01:13 -0400].
374
375 - 1 year, 7 months ago (tag: 3.2.10) Dan Graham
376 83af7b5 2015-08-21 11:25:03 -0400
377 Check that @n is only used with item types "-" and "%" and only
378 contains values from "d", "k" and "t". Tagged version 3.2.10
379 [2015-08-21 11:25:03 -0400].
380
381 - 1 year, 7 months ago Dan Graham
382 1c681ff 2015-08-21 10:42:34 -0400
383 Check that @n is only used with item types "-" and "%" and only
384 contains values from "d", "k" and "t".
385
386 - 1 year, 7 months ago (tag: 3.2.9) Dan Graham
387 e119efe 2015-08-20 13:04:31 -0400
388 Changed sort order for @n. Tagged version 3.2.9 [2015-08-20
389 13:04:31 -0400].
390
391 - 1 year, 7 months ago Dan Graham
392 49b11c8 2015-08-20 12:58:52 -0400
393 Added @n (no show) for itemtype "-" only. Takes a list of views
394 from a)genda, d)ay (week and month), t)ag, k)eyword. E.g. with "@n
395 a, d" the task would be omitted from both agenda and day (week and
396 month) views but would appear in tag and keyword views. Note that
397 it is not possible to exclude the item from path view.
398
399 - 1 year, 7 months ago (tag: 3.2.8, hidden) Dan Graham
400 afcf5ab 2015-08-19 18:11:40 -0400
401 image updates Tagged version 3.2.8 [2015-08-19 18:11:40 -0400].
402
403 - 1 year, 7 months ago Dan Graham
404 d8ba751 2015-08-19 17:58:28 -0400
405 In onFinish, skip alertId for items without starting times.
406
407 - 1 year, 7 months ago Dan Graham
408 fac82ae 2015-08-19 17:53:46 -0400
409 Trap and report errors in parse_period.
410
411 - 1 year, 7 months ago (tag: 3.2.7) Dan Graham
412 a546170 2015-08-19 12:39:48 -0400
413 added alert_list image Tagged version 3.2.7 [2015-08-19 12:39:48
414 -0400].
415
416 - 1 year, 7 months ago Dan Graham
417 dc16e1e 2015-08-19 12:32:23 -0400
418 Removed unused variables. Show alert trigger time in snooze
419 dialog. Make snooze trigger at least 40 seconds after closing
420 dialog. Use '~' as show alerts label when none remain.
421
422 - 1 year, 7 months ago Dan Graham
423 1b7b32c 2015-08-19 09:37:51 -0400
424 Final tweaks for the show alerts button label.
425
426 - 1 year, 7 months ago Dan Graham
427 abb9bbe 2015-08-19 09:11:28 -0400
428 Second pass at snoozing multiple items. Since uuid changes with
429 file updates, e.g., finishing a task, use (summary, s) as alertId.
430 Snooze for the chosen minutes beyond the alert time, not the
431 current time. When finishing a task, use the (summary, s) id to
432 find the correct alert_id to cancel the snooze.
433
434 - 1 year, 7 months ago Dan Graham
435 cc3ba53 2015-08-18 14:45:37 -0400
436 First pass at snoozing multiple items. Added option seconds
437 (False) to fmt_time to show seconds when True. Added
438 longreprtimefmt to reprtimefmt in options to show seconds.
439
440 - 1 year, 7 months ago (tag: 3.2.6) Dan Graham
441 67607eb 2015-08-18 07:12:59 -0400
442 When a task is finished that has a snooze alert running, cancel
443 the alert. Tagged version 3.2.6 [2015-08-18 07:12:59 -0400].
444
445 - 1 year, 7 months ago Dan Graham
446 59b90b6 2015-08-17 17:53:23 -0400
447 Changed binding for onFinish in simpleEditor from Ctrl-w to Ctrl-s
448 to avoid conflicts. Changed button label from Finish to Save and
449 Close.
450
451 - 1 year, 7 months ago Dan Graham
452 ca71856 2015-08-17 15:13:55 -0400
453 More KP_Enter bindings. Changed logic for setting master in
454 simpleEditor.
455
456 - 1 year, 7 months ago Dan Graham
457 67fe85a 2015-08-17 12:54:41 -0400
458 Only try export_ical if has_calendar is True. Add KP_Enter to
459 Return bindings.
460
461 - 1 year, 7 months ago Dan Graham
462 8f82a3c 2015-08-16 14:04:46 -0400
463 updated alert images
464
465 - 1 year, 7 months ago (tag: 3.2.5) Dan Graham
466 ce4fd88 2015-08-16 12:14:42 -0400
467 Fixed bug is displaying next starting time. Tagged version 3.2.5
468 [2015-08-16 12:14:42 -0400].
469
470 - 1 year, 7 months ago (tag: 3.2.4) Dan Graham
471 a9286a5 2015-08-16 11:36:40 -0400
472 When next is "none", show "at the starting time" instead of "none
473 before starting time" in the message alert. Tagged version 3.2.4
474 [2015-08-16 11:36:40 -0400].
475
476 - 1 year, 7 months ago Dan Graham
477 3fcc6cd 2015-08-16 10:54:57 -0400
478 updated readme screenshots
479
480 - 1 year, 7 months ago (tag: 3.2.3) Dan Graham
481 9f2ec94 2015-08-16 10:42:42 -0400
482 renamed alert images Tagged version 3.2.3 [2015-08-16 10:42:42
483 -0400].
484
485 - 1 year, 7 months ago Dan Graham
486 a0efc30 2015-08-16 10:42:15 -0400
487 Added GetRepeat as subclass of GetInteger with Repeat and Close
488 buttons instead of OK and Cancel.
489
490 - 1 year, 7 months ago Dan Graham
491 bf192d6 2015-08-16 09:54:13 -0400
492 Message tweaks.
493
494 - 1 year, 7 months ago Dan Graham
495 5138126 2015-08-16 09:48:54 -0400
496 Show next alert in non-snooze alert and current time in title.
497
498 - 1 year, 8 months ago (tag: 3.2.2) Dan Graham
499 09ecb48 2015-08-15 18:27:55 -0400
500 Added snooze, no-snooze images Tagged version 3.2.2 [2015-08-15
501 18:27:55 -0400].
502
503 - 1 year, 8 months ago Dan Graham
504 af056ec 2015-08-15 17:10:19 -0400
505 Message tweaks for last alert.
506
1818
1919 BGCOLOR = HLCOLOR = FGCOLOR = CALENDAR_COLORS = None
2020
21
2122 def _(x):
2223 return(x)
24
2325
2426 def setup_logging(level, etmdir=None):
2527 """
667669
668670 import calendar
669671
670 import yaml
672 # import yaml
673 import ruamel.yaml as yaml
671674 from itertools import groupby
672675 # from dateutil.rrule import *
673676 from dateutil.rrule import (DAILY, rrule)
10161019 smtp.close()
10171020
10181021
1019 def send_mail(smtp_to, subject, message, files=None, smtp_from=None, smtp_server=None,
1020 smtp_id=None, smtp_pw=None):
1021 """
1022 """
1022 def send_mail(smtp_to, subject, message, files=None, smtp_from=None, smtp_server=None, smtp_id=None, smtp_pw=None):
10231023 if not files:
10241024 files = []
10251025 import smtplib
11901190 elif n == "users":
11911191 user_files.append((np, fp, False))
11921192 fo = codecs.open(fp, 'r', dfile_encoding)
1193 tmp = yaml.load(fo)
1193 tmp = yaml.safe_load(fo)
11941194 fo.close()
11951195 try:
11961196 # if a key already exists, use the tmp value
12231223 for fp in options['cfg_files']['users']:
12241224 user_files.append((relpath(fp, options['etmdir']), fp, False))
12251225 fo = codecs.open(fp, 'r', dfile_encoding)
1226 tmp = yaml.load(fo)
1226 tmp = yaml.safe_load(fo)
12271227 fo.close()
12281228 # if a key already exists, use this value
12291229 options['user_data'].update(tmp)
13001300 if os.path.isfile(colors_cfg):
13011301 logger.info('using colors file: {0}'.format(colors_cfg))
13021302 fo = codecs.open(colors_cfg, 'r', dfile_encoding)
1303 use_colors = yaml.load(fo)
1303 use_colors = yaml.safe_load(fo)
13041304 fo.close()
13051305
13061306 if use_colors:
13221322 if os.path.isfile(locale_cfg):
13231323 logger.info('using locale file: {0}'.format(locale_cfg))
13241324 fo = codecs.open(locale_cfg, 'r', dfile_encoding)
1325 use_locale = yaml.load(fo)
1325 use_locale = yaml.safe_load(fo)
13261326 fo.close()
13271327 if use_locale:
13281328 dgui_encoding = use_locale[0][1]
14831483 try:
14841484 logger.info('user options: {0}'.format(newconfig))
14851485 fo = codecs.open(newconfig, 'r', dfile_encoding)
1486 user_options = yaml.load(fo)
1486 user_options = yaml.safe_load(fo)
14871487 fo.close()
14881488 except yaml.parser.ParserError:
14891489 logger.exception(
14941494 using_oldcfg = True
14951495 logger.info('user options: {0}'.format(oldconfig))
14961496 fo = codecs.open(oldconfig, 'r', dfile_encoding)
1497 user_options = yaml.load(fo)
1497 user_options = yaml.safe_load(fo)
14981498 fo.close()
14991499 except yaml.parser.ParserError:
15001500 logger.exception(
59695969 # repeating
59705970 rlst = hsh[u'_r']
59715971 for r in rlst:
5972 if r['f'] == 'l':
5972 if 'f' in r and r['f'] == 'l':
59735973 if '+' not in hsh:
59745974 logger.warn("An entry for '@+' is required but missing.")
59755975 continue
59795979 dt = dz
59805980 dd = dz.date()
59815981
5982 r['f'] = 'd'
5982 r['r'] = 'd'
59835983 r['t'] = 1
59845984
59855985 rhsh = {}
61636163
61646164 def export_json(file2uuids, uuid2hash, options={}):
61656165 """
6166 Export items from each calendar to a json file with @k entries corresponding to the calendar name.
6166 Export items from each calendar to a json file with @c entries corresponding to the calendar name.
61676167 New ids will be generated each time this is run.
61686168 """
61696169 # TODO: export relevant config info as well
61726172 logger.debug("json_folder: {0}; calendars: {1}".format(json_folder, calendars))
61736173
61746174 cal_tuples = []
6175 calfiles = []
61766175 if calendars:
61776176 for cal in calendars:
61786177 logger.debug('processing cal: {0}'.format(cal))
61906189 hsh = {}
61916190 hsh['items'] = {}
61926191 logger.debug('using cal_tuples: {0}'.format(cal_tuples))
6193 json_file = os.path.join(json_folder, "etm-db.json")
6192 hsh_file = os.path.join(json_folder, "etm-hsh.json")
6193 lines_file = os.path.join(json_folder, "etm-lines.json")
6194 text_lines = []
61946195
61956196 prefix, filelist = getFiles(options['datadir'])
61966197 filetimes = {}
61976198
61986199 for fp, rp in filelist:
6199 atime = os.path.getatime(fp)
6200 mtime = os.path.getmtime(fp)
6201 filetimes[rp] = (mtime, max(atime - mtime, 86400))
6200 atime = int(os.path.getatime(fp))
6201 ctime = int(os.path.getctime(fp))
6202 mtime = int(os.path.getmtime(fp))
6203 # filetimes[rp] = (ctime, max(mtime - ctime, 86400))
6204 mincm = min(ctime, mtime)
6205 # filetimes[rp] = (mincm, max(atime-mincm, 3600))
6206 filetimes[rp] = (mincm, 3600)
62026207
62036208 # uuids for jobs will have etm:NN appended - we only want one copy
62046209 # e.g., b63c362940f147a1ae8404d8265fa4bdetm:01
6205 for rp in file2uuids:
6210 rps = [x for x in file2uuids]
6211 rps.sort()
6212 for rp in rps:
62066213 this_calendar = None
6207 this_lst = [] # for error logging
6214 intervals = len(file2uuids[rp])
6215 stime, diff = filetimes[rp]
6216 delta = int(diff / intervals)
6217 # this_lst = [] # for error logging
62086218 for name, regex in cal_tuples:
62096219 if regex.match(rp):
62106220 this_calendar = name
6211 intervals = len(file2uuids[rp])
6212 stime, diff = filetimes[rp]
6213 delta = diff / intervals
62146221 last_uid = ""
62156222 for uid in file2uuids[rp]:
62166223 if uid[:32] == last_uid[:32]:
62186225 continue
62196226 last_uid = uid
62206227 secs = int(uniform(stime, stime + delta))
6221 id = int(datetime.fromtimestamp(secs).strftime("%Y%m%d%H%M%S%f"))
6228 id = datetime.fromtimestamp(secs).strftime("%Y%m%d%H%M%S%f")
62226229 stime += delta
62236230 old_hsh = uuid2hash[uid]
62246231 new_hsh = deepcopy(old_hsh)
62256232 itemtype = old_hsh['itemtype']
6233 if itemtype in ['=', '#']:
6234 continue
62266235
62276236 for key in new_hsh:
62286237 if type(new_hsh[key]) is datetime:
62356244 del new_hsh[key]
62366245 if '_a' in new_hsh:
62376246 alerts = []
6238 for alert in new_hsh['_a']:
6247 for a_tup in new_hsh['_a']:
6248 if len(a_tup) <= 1:
6249 alert = a_tup[0]
6250 else:
6251 alert = a_tup
6252
62396253 args = []
62406254 if len(alert) >= 3:
62416255 for r in alert[2]:
62426256 args.extend(r)
62436257 args = [x.strip() for x in args]
6258 tds = []
62446259 for td in alert[0]:
6245 td = fmt_period(td)
6246 for cmd in alert[1]:
6247 alerts.append([td, cmd] + args)
6260 tds.append(fmt_period(td))
6261 for cmd in alert[1]:
6262 if args:
6263 alerts.append((tds, cmd, args))
6264 else:
6265 alerts.append((tds, cmd))
62486266 new_hsh['a'] = alerts
62496267 del new_hsh['_a']
62506268 if 'h' in new_hsh:
62516269 tmp = []
62526270 for pair in new_hsh['h']:
62536271 tmp.append(pair[0].strftime("%Y%m%dT%H%M"))
6272 # tmp.append([x.strftime("%Y%m%dT%H%M") for x in pair if x])
62546273 new_hsh['h'] = tmp
6255
62566274 if 'f' in new_hsh:
62576275 d, n, f = getDoneAndTwo(old_hsh)
62586276 o = old_hsh.get('o', 'k')
6277 hd = []
62596278 if n:
6260 new_hsh['s'] = n.strftime("%Y%m%dT%H:%M")
6279 new_hsh['s'] = n.strftime("%Y%m%dT%H%M")
62616280 # if o == 'r':
62626281 # # reset start to the finish time
62636282 # new_hsh['s'] = old_hsh['f'][0][0].strftime("%Y%m%dT%H%M")
62646283 # else:
62656284 # # reset start to the next due date
62666285 # new_hsh['s'] = n.strftime("%Y%m%dT%H:%M")
6267 new_hsh.setdefault('h', []).append(new_hsh['f'][0][0].strftime("%Y%m%dT%H%M"))
6286 hd = [x[0].strftime("%Y%m%dT%H%M") for x in new_hsh['f'][-3:]]
62686287 del new_hsh['f']
62696288 else:
6270 new_hsh['f'] = new_hsh['f'][0][0].strftime("%Y%m%dT%H%M")
6289 hd = [x[0].strftime("%Y%m%dT%H%M") for x in new_hsh['f'][-3:-1]]
6290 new_hsh['f'] = new_hsh['f'][-1][0].strftime("%Y%m%dT%H%M")
6291 if hd:
6292 new_hsh.setdefault('h', []).extend(hd)
62716293
62726294 if '+' in new_hsh and 's' in new_hsh:
62736295 new_hsh['+'] = [x for x in new_hsh['+'] if x.strftime("%Y%m%dT%H%M") >= new_hsh['s']]
62746296
62756297 if 'rrule' in new_hsh:
62766298 del new_hsh['rrule']
6277 if 'r' in new_hsh and 's in new_hsh':
6278 # drop the old dtstart and insert the new
6279 new_hsh['rrulestr'] = "DTSTART:{}\n{}".format(new_hsh['s'], new_hsh['r'][22:])
6299 if 'r' in new_hsh and 's' in new_hsh:
6300 new_hsh['rrulestr'] = "{}".format(new_hsh['r'][22:])
62806301 del new_hsh['r']
6281 elif 's' in new_hsh:
6282 new_hsh['rrulestr'] = "RDATE:{}".format(new_hsh['s'])
62836302
62846303 if '_j' in new_hsh:
6285 # print('jobs', new_hsh['_group_summary'], uid, new_hsh.get('f', 'unfinished'))
62866304 count = 0
62876305 jobs = {}
62886306 # make sure jobs are in q order
6289 finished = True
62906307 for job in new_hsh['_j']:
62916308 q = job['q']
6309 jobs.setdefault(q, []).append(job)
62926310 del job['q']
6293 jobs.setdefault(q, []).append(job)
62946311
62956312 if 'h' in job:
62966313 tmp = []
62976314 for pair in job['h']:
62986315 tmp.append(pair[0].strftime("%Y%m%dT%H%M"))
62996316 job['h'] = tmp
6300 else:
6301 finished = False
6302
6303 # if 'f' in job:
6304 # job['f'] = job['f'][0][0].strftime("%Y%m%dT%H%M")
6305 # else:
6306 # finished = False
6307
6308 if 'f' in new_hsh and not finished:
6309 del new_hsh['f']
6317
6318 if 'f' in job:
6319 job['f'] = job['f'][0][0].strftime("%Y%m%dT%H%M")
63106320
63116321 q_keys = [x for x in jobs]
63126322 q_keys.sort()
6313 q_count = 0
63146323 prereqs = []
63156324 for q_key in q_keys:
63166325 tmp = []
63436352 del new_hsh[key]
63446353 nkey = key[1:]
63456354 new_hsh[nkey] = old_hsh[key]
6355 if 'r' in new_hsh:
6356 tmp_r = []
6357 for tmp_hsh in new_hsh['r']:
6358 if 't' in tmp_hsh:
6359 tmp_hsh['c'] = tmp_hsh['t']
6360 del tmp_hsh['t']
6361 if 'f' in tmp_hsh:
6362 tmp_hsh['r'] = tmp_hsh['f']
6363 del tmp_hsh['f']
6364 if 'u' in tmp_hsh:
6365 tmp_hsh['u'] = parse(tmp_hsh['u']).strftime("%Y%m%dT%H%M")
6366 tmp_r.append(tmp_hsh)
6367 new_hsh['r'] = tmp_r
63466368 this_c = new_hsh.get('c', None)
63476369 this_l = new_hsh.get('l', None)
6348 new_hsh['l'] = "; ".join([x for x in [this_l, this_c] if x is not None])
6370 temp_l = "; ".join([x for x in [this_l, this_c] if x is not None])
6371 if temp_l:
6372 new_hsh['l'] = temp_l
63496373 new_hsh['c'] = this_calendar
63506374 k = old_hsh.get('k', None)
63516375 if k is not None:
6352 new_hsh['n'] = k
6376 new_hsh['i'] = k
63536377 del new_hsh['k']
63546378 if itemtype in ['+', '-', '%']:
6379 itemtype = '-'
63556380 s = old_hsh.get('s', None)
63566381 if s is None:
63576382 # undated
6358 itemtype = '%'
6383 if 'z' in new_hsh:
6384 del new_hsh['z']
63596385 elif s.hour == s.minute == 0:
63606386 # date-only
6361 itemtype = '+'
6362 else:
6363 # date-time
6364 itemtype = '-'
6365 if itemtype in ['^', '+', '%'] and 'z' in new_hsh:
6366 del new_hsh['z']
6387 pass
6388 # if 'z' in new_hsh:
6389 # del new_hsh['z']
63676390 if '_group_summary' in new_hsh:
63686391 new_hsh['summary'] = new_hsh['_group_summary']
63696392 del new_hsh['_group_summary']
63706393
6394 if itemtype == "^":
6395 itemtype = "*"
6396 if 'z' in new_hsh:
6397 del new_hsh['z']
6398 elif itemtype == "!":
6399 itemtype = "%"
6400 elif itemtype == "$":
6401 itemtype = "!"
6402 elif itemtype == "~":
6403 itemtype = "%"
6404 if 'e' in new_hsh:
6405 tmp_s = parse_str(new_hsh['s'], new_hsh.get('z', None))
6406 tmp_e = parse_period(new_hsh['e'])
6407 new_hsh['f'] = (tmp_s + tmp_e).strftime("%Y%m%dT%H%M")
6408
6409 for x in ['entry', 'rrulestr']:
6410 if x in new_hsh:
6411 del new_hsh[x]
63716412 new_hsh['itemtype'] = itemtype
6372 new_hsh['entry'] = hsh2entry(new_hsh)
6413 text_line = hsh2entry(new_hsh)
6414 text_lines.append(text_line)
6415 # new_hsh['entry'] = text_line
6416 # if 'r' in new_hsh:
6417 # del new_hsh['r']
6418 # if 'z' in new_hsh:
6419 # del new_hsh['z']
63736420 try:
63746421 json.dumps(new_hsh)
63756422 hsh['items'][id] = new_hsh
63826429 logger.debug('skipping {0} - no match in calendars'.format(rp))
63836430 print('skipping {0} - no match in calendars'.format(rp))
63846431
6385 with open(json_file, 'w') as jo:
6432 with open(hsh_file, 'w') as jo:
63866433 json.dump(hsh, jo, indent=1, sort_keys=True)
6434 with open(lines_file, 'w') as fo:
6435 json.dump(text_lines, fo, indent=1, sort_keys=True)
63876436
63886437 return True
63896438
63906439 def etm2dsp(s):
63916440 """
63926441 >>> etm2dsp("20160710T1730")
6393 (True, '2016-07-10 17:30')
6442 (True, '2016-07-10 05:30PM')
63946443 >>> etm2dsp("2016710T1730")
63956444 (False, 'Invalid datetime: 2016710T1730')
6396 """
6445 >>> etm2dsp("20160710")
6446 (True, '2016-07-10')
6447 >>> etm2dsp("20160710T0000")
6448 (True, '2016-07-10')
6449 """
6450
63976451 dt_regex = re.compile(r'\d{8}T\d{4}')
63986452 d_regex = re.compile(r'\d{8}')
6399 if dt_regex.match(s):
6400 return True, "{}-{}-{} {}:{}".format(s[:4], s[4:6], s[6:8], s[9:11], s[11:])
6401 elif d_regex.match(s):
6402 return True, "{}-{}-{}".format(s[:4], s[4:6], s[6:8])
6453 m_regex = re.compile(r'\d{8}T0000')
6454 if m_regex.fullmatch(s):
6455 dt = datetime.strptime(s, "%Y%m%dT%H%M")
6456 return True, dt.strftime("%Y-%m-%d")
6457 elif d_regex.fullmatch(s):
6458 dt = datetime.strptime(s, "%Y%m%d")
6459 return True, dt.strftime("%Y-%m-%d")
6460 elif dt_regex.fullmatch(s):
6461 dt = datetime.strptime(s, "%Y%m%dT%H%M")
6462 return True, dt.strftime("%Y-%m-%d %I:%M%p")
64036463 else:
64046464 return False, "Invalid datetime: {}".format(s)
64056465
64066466 def hsh2entry(h):
64076467 """
64086468 """
6409 all_keys = [x for x in "seabr+-cdfghijklmnopqtuvz"]
6410 rrule_keys = [x for x in "iMmWwhmEtus"]
6469 # all_keys = [x for x in "seabr+-cdfghijklmnopqtuvz"]
6470 all_keys = [x for x in "seabr+-cdfghijlmnoptx"]
6471 rrule_keys = [x for x in "iMmWwhmEcus"]
64116472 job_keys = [x for x in "jsabcdefhlnipq"]
64126473
64136474 res = []
64146475 hsh = deepcopy(h)
6476 zstr = ""
6477 if 'z' in hsh and hsh['z']:
6478 if hsh['z'] != local_timezone:
6479 zstr = ", {}".format(hsh['z'])
6480 del hsh['z']
64156481 res.append("{} {}".format(hsh['itemtype'], hsh['summary']))
64166482 for k in all_keys:
64176483 if k not in hsh:
64186484 continue
64196485 v = hsh[k]
64206486 if k == 's':
6421 res.append("@s {}".format(etm2dsp(v)[1]))
6487 res.append("@s {}{}".format(etm2dsp(v)[1], zstr))
64226488 elif k in ['+', '-', 'h']:
64236489 # res.append("@{} {}".format(k, ", ".join([etm2dsp(x)[1] for x in v])))
64246490 res.append("@{} {}".format(k, ", ".join(v)))
64256491 elif k == 'r':
64266492 for r in v:
6427 frq = r['f']
6428 del r['f']
6493 frq = r['r']
6494 del r['r']
64296495 tmp = []
64306496 for amp_key in rrule_keys:
64316497 if amp_key not in r:
64616527 res.append("@j {} {}".format(jnm, " ".join(tmp)))
64626528 elif k == 'a':
64636529 for a in v:
6464 res.append("@a {}: {}".format(a[0], ", ".join(a[1:])))
6530 res.append("@a {}: {}".format(", ".join(a[0]), ", ".join(a[1:])))
64656531 # elif k == 'f':
64666532 # res.append(("@f {}".format("; ".join(v))))
64676533 else:
71787244 tmp = []
71797245 for h in hsh_rev['_r']:
71807246 if 'f' in h and h['f'] != u'l':
7181 h['u'] = dtn - ONEMINUTE
7247 h['u'] = (dtn - ONEMINUTE).strftime(sfmt)
71827248 tmp.append(h)
71837249 hsh_rev['_r'] = tmp
71847250
77637829 if len(sys.argv) > 1:
77647830 if sys.argv[1] not in ['a', 'c']:
77657831 etmdir = sys.argv.pop(1)
7832 import doctest
7833 doctest.testmod()
7834
77667835 main(etmdir, sys.argv)
1010
1111 logger = logging.getLogger()
1212 import codecs
13 import yaml
13 # import ruamel.yaml as yaml
14 from ruamel.yaml import YAML
15 yaml = YAML(typ='unsafe')
16
1417
1518 import platform
1619
655658 logger.debug('target: {0}'.format(target))
656659 if target:
657660 where = self.text.search(target, INSERT, nocase=1)
658 if where:
659 pastit = where + ('+%dc' % len(target))
660 self.text.tag_add(FOUND, where, pastit)
661 self.text.mark_set(INSERT, pastit)
662 self.text.see(INSERT)
663 self.text.focus()
661 if where:
662 pastit = where + ('+%dc' % len(target))
663 self.text.tag_add(FOUND, where, pastit)
664 self.text.mark_set(INSERT, pastit)
665 self.text.see(INSERT)
666 self.text.focus()
664667
665668 def cancel(self, e=None):
666669 t = self.find_text.get()
11621165 self.currentStatus,
11631166 self.currentMinutes,
11641167 self.idlestart,
1165 self.idletime
1168 self.idletime,
11661169 )
11671170 fo = codecs.open(self.etmtimers, 'w', self.dfile_encoding)
11681171 yaml.dump(tmp, fo)
00 .\" Text automatically generated by txt2man
1 .TH etm 1 "31 March 2017" "version 3.2.30" "Unix user's manual"
1 .TH etm 1 "03 October 2019" "version 3.2.39" "Unix user's manual"
22 .SH NAME
33 \fBetm \fP- manage events and tasks using simple text files
44 .SH SYNOPSIS
0 version = "3.2.30"
0 version = "3.2.39"
0 version = "3.2.30 [2017-03-31 09:28:19 -0400]"
0 version = "3.2.39 [2019-10-03 17:36:24 -0400]"
215215
216216 style = self.options['style']
217217 s = ttk.Style()
218
219 # Fix broken tkinter Treeview colors for Python3.7+
220 # Fix source: https://bugs.python.org/issue36468
221 def fixed_map(option):
222 return [elm for elm in s.map('Treeview', query_opt=option) if elm[:2] != ('!disabled', '!selected')]
223 s.map('Treeview', foreground=fixed_map('foreground'), background=fixed_map('background'))
224
218225 styles = s.theme_names()
219226 if style in styles:
220227 logger.info("using style {0}".format(style))
449456 timermenu.add_command(label=label,
450457 command=self.setcountdownTimer)
451458 timermenu.entryconfig(7, accelerator=l)
452 self.bind(c, self.setcountdownTimer)
459 self.bindTop(c, self.setcountdownTimer)
453460
454461 self.add2menu(path, (label, l))
455462
42404247
42414248 if item_type:
42424249 # This hack avoids encoding issues under python 2
4243 col1 = "{0} {1}".format(id2Type[item_type], col1)
4250 col1 = "{0} {1}".format(id2Type[item_type], col1.replace('\n', ' '))
42444251
42454252 if type(col3) == int:
42464253 col3 = '%s' % col3
0 Metadata-Version: 1.1
0 Metadata-Version: 2.1
11 Name: etmtk
2 Version: 3.2.30
2 Version: 3.2.39
33 Summary: event and task manager
4 Home-page: http://people.duke.edu/~dgraham/etmtk
4 Home-page: https://github.com/dagraham/etm-tk
55 Author: Daniel A Graham
6 Author-email: daniel.graham@duke.edu
6 Author-email: dnlgrhm@gmail.com
77 License: License :: OSI Approved :: GNU General Public License (GPL)
88 Description: manage events and tasks using simple text files
99 Platform: Any
2525 Classifier: Programming Language :: Python :: 3.3
2626 Classifier: Programming Language :: Python :: 3.4
2727 Classifier: Programming Language :: Python :: 3.5
28 Classifier: Programming Language :: Python :: 3.6
2829 Classifier: Topic :: Office/Business
2930 Classifier: Topic :: Office/Business :: News/Diary
3031 Classifier: Topic :: Office/Business :: Scheduling
32 Provides-Extra: icalendar
00 python-dateutil>=1.5
1 PyYaml>=3.10
1 ruamel.yaml>=0.15.80
22
33 [icalendar]
44 icalendar>=3.8.4
00 [egg_info]
11 tag_build =
22 tag_date = 0
3 tag_svn_revision = 0
43
44
55 import sys
66
7 INSTALL_REQUIRES = ["python-dateutil>=1.5", "PyYaml>=3.10"]
7 INSTALL_REQUIRES = ["python-dateutil>=1.5", "ruamel.yaml>=0.15.80"]
88 EXTRAS_REQUIRE = {"icalendar": ["icalendar>=3.8.4", "pytz>=2015.1"]}
99
1010 APP = ['etm']
2323 version=version,
2424 include_package_data=True,
2525 zip_safe=False,
26 url='http://people.duke.edu/~dgraham/etmtk',
26 url='https://github.com/dagraham/etm-tk',
2727 description='event and task manager',
2828 long_description='manage events and tasks using simple text files',
2929 platforms='Any',
3030 license='License :: OSI Approved :: GNU General Public License (GPL)',
3131 author='Daniel A Graham',
32 author_email='daniel.graham@duke.edu',
32 author_email='dnlgrhm@gmail.com',
3333 classifiers=[
3434 'Development Status :: 5 - Production/Stable',
3535 'Environment :: Console',
4949 'Programming Language :: Python :: 3.3',
5050 'Programming Language :: Python :: 3.4',
5151 'Programming Language :: Python :: 3.5',
52 'Programming Language :: Python :: 3.6',
5253 'Topic :: Office/Business',
5354 'Topic :: Office/Business :: News/Diary',
5455 'Topic :: Office/Business :: Scheduling'],
5859 extras_require=EXTRAS_REQUIRE,
5960 # extras_require={"icalendar": ["icalendar>=3.8.4"]},
6061 package_data={
61 'etmTk': ['icons/*', 'etm.desktop', 'etm.appdata.xml', 'CHANGES', 'etm.1', 'etm.xpm'],
62 'etmTk': ['icons/*', 'etm.desktop', 'etm.appdata.xml', 'CHANGES', 'etm.1'],
6263 'etmTk/help' : ['help/UserManual.html'],
6364 'etmTk/icons': ['icons/*']},
6465 data_files=[
6566 ('share/man/man1', ['etmTk/etm.1']),
6667 ('share/doc/etm', ['etmTk/CHANGES']),
67 ('share/pixmaps', ['etmTk/etm.xpm']),
6868 ('share/icons', glob.glob('etmTk/icons/*.gif')),
6969 ('share/applications', ['etmTk/etm.desktop']),
70 ('share/appdata', ['etmTk/etm.appdata.xml']),
70 ('share/metainfo', ['etmTk/etm.appdata.xml'])
7171 ]
7272 )