annotate getan/backend.py @ 509:f8099adc30f2

updated TODO.
author Magnus Schieder <mschieder@intevation.de>
date Thu, 01 Nov 2018 14:20:56 +0100
parents fea767901dbc
children 28b1c18c900f
rev   line source
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
2 #
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
3 # (c) 2008, 2009, 2010 by
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
4 # Sascha L. Teichmann <sascha.teichmann@intevation.de>
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
5 # Ingo Weinzierl <ingo.weinzierl@intevation.de>
97
99639833968d Add me as author in files that I did touch
Björn Ricks <bjoern.ricks@intevation.de>
parents: 68
diff changeset
6 # (c) 2011 Björn Ricks <bjoern.ricks@intevation.de>
502
fea767901dbc Changed version to 3.1dev1.
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
7 # (c) 2018 Intevation GmbH
fea767901dbc Changed version to 3.1dev1.
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
8 # Authors:
fea767901dbc Changed version to 3.1dev1.
Magnus Schieder <mschieder@intevation.de>
parents: 501
diff changeset
9 # * Magnus Schieder <magnus.schieder@intevation.de>
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
10 #
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
11 # This is Free Software licensed unter the terms of GPLv3 or later.
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
12 # For details see LICENSE coming with the source of 'getan'.
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
13 #
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
14
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
15 import logging
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
16 import os
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
17
33
f96a18c10836 Made getan python-2.4 compatible.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 23
diff changeset
18 try:
f96a18c10836 Made getan python-2.4 compatible.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 23
diff changeset
19 import sqlite3 as db
f96a18c10836 Made getan python-2.4 compatible.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 23
diff changeset
20 except ImportError:
f96a18c10836 Made getan python-2.4 compatible.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 23
diff changeset
21 from pysqlite2 import dbapi2 as db
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
22
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
23 from getan.project import Project, Entry
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
24
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
25 DEFAULT_DATABASE = "time.db"
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
26
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
27 CREATE_TABLES = [
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
28 """
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
29 CREATE TABLE projects (
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
30 id INTEGER PRIMARY KEY AUTOINCREMENT,
284
561441fde2ac Set unique constraint on project key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 174
diff changeset
31 key VARCHAR(16) NOT NULL CONSTRAINT unique_key UNIQUE,
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
32 description VARCHAR(256),
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
33 active BOOLEAN DEFAULT 1
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
34 )
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
35 """,
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
36 """
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
37 CREATE TABLE entries (
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
38 id INTEGER PRIMARY KEY AUTOINCREMENT,
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
39 project_id INTEGER REFERENCES projects(id),
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
40 start_time TIMESTAMP NOT NULL,
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
41 stop_time TIMESTAMP NOT NULL,
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
42 description VARCHAR(256),
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
43
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
44 CHECK (strftime('%s', start_time) <= strftime('%s', stop_time))
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
45 )
499
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
46 """,
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
47 """
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
48 CREATE TABLE recover(
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
49 id INTEGER PRIMARY KEY,
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
50 project_id INTEGER REFERENCES projects(id),
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
51 start_time TIMESTAMP NOT NULL,
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
52 stop_time TIMESTAMP NOT NULL,
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
53 description VARCHAR(256),
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
54
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
55 CHECK (strftime('%s', start_time) <= strftime('%s', stop_time))
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
56 )
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
57 """
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
58 ]
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
59
501
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
60 CREATE_RECOVER = """
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
61 CREATE TABLE IF NOT EXISTS recover(
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
62 id INTEGER PRIMARY KEY,
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
63 project_id INTEGER REFERENCES projects(id),
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
64 start_time TIMESTAMP NOT NULL,
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
65 stop_time TIMESTAMP NOT NULL,
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
66 description VARCHAR(256),
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
67
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
68 CHECK (strftime('%s', start_time) <= strftime('%s', stop_time))
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
69 )
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
70 """
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
71
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
72 LOAD_ACTIVE_PROJECTS = '''
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
73 SELECT id, key, description, total
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
74 FROM projects LEFT JOIN
144
9e853f9e63ad Remove whitespace
Björn Ricks <bjoern.ricks@intevation.de>
parents: 143
diff changeset
75 (SELECT
9e853f9e63ad Remove whitespace
Björn Ricks <bjoern.ricks@intevation.de>
parents: 143
diff changeset
76 project_id,
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
77 sum(strftime('%s', stop_time) - strftime('%s', start_time)) AS total
144
9e853f9e63ad Remove whitespace
Björn Ricks <bjoern.ricks@intevation.de>
parents: 143
diff changeset
78 FROM entries
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
79 GROUP BY project_id) ON project_id = id
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
80 WHERE active
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
81 '''
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
82
351
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
83 LOAD_ACTIVE_PROJECT = '''
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
84 SELECT id, key, description, total
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
85 FROM projects LEFT JOIN
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
86 (SELECT
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
87 project_id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
88 sum(strftime('%s', stop_time) - strftime('%s', start_time)) AS total
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
89 FROM entries
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
90 GROUP BY project_id) ON project_id = id
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
91 WHERE active and key = :project_id
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
92 '''
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
93
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
94 LOAD_PROJECT_ENTRIES = '''
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
95 SELECT
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
96 id,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
97 project_id,
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
98 start_time as "[timestamp]",
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
99 stop_time as "[timestamp]",
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
100 description
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
101 FROM
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
102 entries
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
103 WHERE
350
f581752317fd Correctly escape sql query
Björn Ricks <bjoern.ricks@intevation.de>
parents: 349
diff changeset
104 project_id = :project_id
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
105 ORDER BY
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
106 id
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
107 DESC
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
108 '''
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
109
351
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
110 LOAD_PROJECT_ENTRIES_YEAR = '''
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
111 SELECT
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
112 id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
113 project_id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
114 start_time as "[timestamp]",
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
115 stop_time as "[timestamp]",
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
116 'no description' AS description
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
117 FROM entries
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
118 WHERE
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
119 project_id = :project_id AND
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
120 (description IS NULL or length(description) = 0)
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
121 GROUP BY round(julianday(start_time))
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
122 UNION
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
123 SELECT
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
124 id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
125 project_id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
126 start_time as "[timestamp]",
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
127 stop_time as "[timestamp]",
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
128 description
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
129 FROM entries
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
130 WHERE
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
131 project_id = :project_id AND
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
132 (strftime('%Y', start_time) ) = :year AND
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
133 description IS NOT NULL AND length(description) > 0
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
134 '''
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
135
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
136 LOAD_PROJECT_ENTRIES_WEEK = '''
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
137 SELECT
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
138 id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
139 project_id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
140 start_time as "[timestamp]",
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
141 stop_time as "[timestamp]",
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
142 'no description' AS description
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
143 FROM entries
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
144 WHERE
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
145 project_id = :project_id AND
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
146 (strftime('%Y', start_time) ) = :year AND
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
147 (description IS NULL or length(description) = 0)
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
148 AND (strftime('%W', start_time) = :week
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
149 OR strftime('%W', stop_time) = :week)
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
150 GROUP BY round(julianday(start_time))
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
151 UNION
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
152 SELECT
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
153 id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
154 project_id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
155 start_time as "[timestamp]",
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
156 stop_time as "[timestamp]",
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
157 description
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
158 FROM entries
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
159 WHERE
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
160 project_id = :project_id AND
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
161 (strftime('%Y', start_time) ) = :year AND
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
162 description IS NOT NULL AND length(description) > 0
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
163 AND (strftime('%W', start_time) = :week
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
164 OR strftime('%W', stop_time) = :week)
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
165 ORDER BY start_time
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
166 '''
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
167
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
168 INSERT_PROJECT_ENTRY = '''
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
169 INSERT INTO entries (project_id, start_time, stop_time, description)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
170 VALUES(?,?,?,?)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
171 '''
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
172
499
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
173 INSERT_RECOVER= '''
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
174 INSERT OR REPLACE INTO recover(id, project_id, start_time, stop_time, description)
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
175 VALUES(1,?,?,?,?)
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
176 '''
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
177
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
178 LOAD_RECOVER= '''
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
179 SELECT
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
180 id,
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
181 project_id,
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
182 start_time as "[timestamp]",
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
183 stop_time as "[timestamp]",
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
184 description
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
185 FROM
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
186 recover
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
187 WHERE
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
188 id = 1
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
189 '''
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
190
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
191 DELETE_RECOVER= "DELETE FROM recover"
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
192
49
062ce001abd1 add backend method to create new projects
Björn Ricks <bjoern.ricks@intevation.de>
parents: 40
diff changeset
193 INSERT_PROJECT = '''
52
9cb57c37369a fix insert new project sql statemenent and api
Björn Ricks <bjoern.ricks@intevation.de>
parents: 50
diff changeset
194 INSERT INTO projects (key, description, active) VALUES (?,?,1)
49
062ce001abd1 add backend method to create new projects
Björn Ricks <bjoern.ricks@intevation.de>
parents: 40
diff changeset
195 '''
062ce001abd1 add backend method to create new projects
Björn Ricks <bjoern.ricks@intevation.de>
parents: 40
diff changeset
196
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
197 DELETE_PROJECT_ENTRY = 'DELETE FROM entries WHERE id = %i'
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
198
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
199 MOVE_ENTRY = 'UPDATE entries SET project_id = ? WHERE id = ?'
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
200
401
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
201 UPDATE_ENTRY = '''
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
202 UPDATE entries
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
203 SET description = ?, start_time = ?, stop_time = ?
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
204 WHERE id = ?
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
205 '''
68
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
206
401
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
207 UPDATE_PROJECT = 'UPDATE projects SET key = ?, description = ? WHERE id = ?'
174
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
208
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
209 logger = logging.getLogger()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
210
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
211
165
83ba64c9a51e A project entry in the db must have a key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 146
diff changeset
212 class InvalidProjectKeyError(Exception):
83ba64c9a51e A project entry in the db must have a key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 146
diff changeset
213 pass
83ba64c9a51e A project entry in the db must have a key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 146
diff changeset
214
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
215
143
9f4da22fb1f1 Use new style class for backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 135
diff changeset
216 class Backend(object):
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
217
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
218 def __init__(self, database=DEFAULT_DATABASE):
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
219 self.database = database
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
220 self.ensure_exists()
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
221 self.con = db.connect(database,
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
222 detect_types=db.PARSE_DECLTYPES |
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
223 db.PARSE_COLNAMES)
467
59d9c5840273 Porting Python 2 to Python 3.
Magnus Schieder <mschieder@intevation.de>
parents: 401
diff changeset
224 self.con.text_factory = lambda x: str(x, "utf-8", "ignore")
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
225
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
226 def ensure_exists(self):
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
227 """ Creates the database file if it does not exist. """
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
228 if os.path.isfile(self.database):
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
229 return
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
230
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
231 con, cur = None, None
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
232 try:
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
233 con = db.connect(self.database)
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
234 cur = con.cursor()
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
235 try:
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
236 for sql in CREATE_TABLES:
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
237 cur.execute(sql)
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
238 con.commit()
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
239 except:
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
240 con.rollback()
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
241 raise
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
242 finally:
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
243 if cur:
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
244 cur.close()
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
245 if con:
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
246 con.close()
40
e4759cc8f5e7 Create database file if it does not exist.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 33
diff changeset
247
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
248 def load_projects(self):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
249 """ Loads active projects from database and returns them as array """
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
250 logger.debug("load active projects from database.")
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
251 cur = None
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
252 try:
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
253 cur = self.con.cursor()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
254 cur.execute(LOAD_ACTIVE_PROJECTS)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
255
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
256 projects = []
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
257 while True:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
258 row = cur.fetchone()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
259
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
260 if not row:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
261 break
165
83ba64c9a51e A project entry in the db must have a key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 146
diff changeset
262 # check key
83ba64c9a51e A project entry in the db must have a key
Björn Ricks <bjoern.ricks@intevation.de>
parents: 146
diff changeset
263 if not row[1]:
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
264 raise InvalidProjectKeyError("Project with id %s needs "
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
265 "a key" % row[0])
353
5ded6192b85b Pass the Backend to the Project constructor
Björn Ricks <bjoern.ricks@intevation.de>
parents: 351
diff changeset
266 proj = Project(self, *row)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
267 projects.append(proj)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
268
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
269 logger.info("found %i active projects." % len(projects))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
270 return projects
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
271
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
272 finally:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
273 close(cur)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
274
499
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
275 def load_recover(self):
501
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
276 """If there is an entry in the recovery table, the entry is moved to
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
277 its project."""
499
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
278 cor = None
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
279 try:
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
280 cur = self.con.cursor()
501
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
281 # Creates the recover table if it does not exist to make old
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
282 # databases compatible.
f5e1a78173cb Old databases can now be read in. Added comments.
Magnus Schieder <mschieder@intevation.de>
parents: 499
diff changeset
283 cur.execute(CREATE_RECOVER)
499
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
284 cur.execute(LOAD_RECOVER)
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
285 recover = cur.fetchone()
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
286 if not recover:
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
287 return
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
288
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
289 _, project_id, start_time, stop_time, desc = recover
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
290
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
291 cur.execute(INSERT_PROJECT_ENTRY, (
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
292 project_id, start_time, stop_time, desc))
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
293 cur.execute(DELETE_RECOVER)
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
294 self.con.commit()
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
295 finally:
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
296 close(cur)
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
297
351
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
298 def load_project(self, key):
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
299 logger.debug("load active projects from database.")
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
300 cur = None
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
301 try:
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
302 cur = self.con.cursor()
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
303 cur.execute(LOAD_ACTIVE_PROJECT, {"project_id": key})
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
304 row = cur.fetchone()
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
305 if not row:
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
306 raise InvalidProjectKeyError("Project with key %s not "
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
307 "found." % key)
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
308 # check key
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
309 if not row[1]:
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
310 raise InvalidProjectKeyError("Project with id %s needs "
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
311 "a key" % row[0])
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
312 return Project(self, *row)
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
313
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
314 finally:
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
315 close(cur)
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
316
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
317 def load_entries(self, project_id, year=None, week=None):
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
318 """ Loads all entries that belong to a specific project """
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
319 logger.debug("load entries that belong to project %s" % project_id)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
320 cur = None
351
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
321
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
322 if week and isinstance(week, int):
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
323 week = "%02d" % (week)
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
324
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
325 try:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
326 cur = self.con.cursor()
351
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
327
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
328 if year is None and week is None:
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
329 cur.execute(LOAD_PROJECT_ENTRIES,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
330 {"project_id": project_id})
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
331 elif week is None:
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
332 cur.execute(LOAD_PROJECT_ENTRIES_YEAR,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
333 {'project_id': project_id, 'year': str(year)})
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
334 else:
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
335 cur.execute(LOAD_PROJECT_ENTRIES_WEEK,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
336 {'project_id': project_id,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
337 'week': week,
b5dc92631561 Allow to load one project and specific entries from the Backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 350
diff changeset
338 'year': str(year)})
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
339
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
340 entries = []
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
341 while True:
146
bb70dde875fd Always fail if an entry couldn't be loaded
Björn Ricks <bjoern.ricks@intevation.de>
parents: 144
diff changeset
342 row = cur.fetchone()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
343
146
bb70dde875fd Always fail if an entry couldn't be loaded
Björn Ricks <bjoern.ricks@intevation.de>
parents: 144
diff changeset
344 if not row:
bb70dde875fd Always fail if an entry couldn't be loaded
Björn Ricks <bjoern.ricks@intevation.de>
parents: 144
diff changeset
345 break
bb70dde875fd Always fail if an entry couldn't be loaded
Björn Ricks <bjoern.ricks@intevation.de>
parents: 144
diff changeset
346 entries.append(Entry(*row))
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
347
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
348 logger.debug("Found %i entries that belong to project '%i'"
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
349 % (len(entries), project_id))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
350 return entries
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
351 finally:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
352 close(cur)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
353
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
354 def insert_project_entry(self, project, stop_time, desc):
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
355 if project is None:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
356 return
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
357 cur = None
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
358 try:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
359 cur = self.con.cursor()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
360 cur.execute(INSERT_PROJECT_ENTRY, (
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
361 project.id, project.start, stop_time, desc))
499
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
362 cur.execute(DELETE_RECOVER)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
363 self.con.commit()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
364 logger.debug("Added new entry '%s' of project '%s' into db"
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
365 % (desc, project.desc))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
366
362
90c09cca49c3 Fix loading entries of a project
Björn Ricks <bjoern.ricks@intevation.de>
parents: 353
diff changeset
367 project.load_entries()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
368 finally:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
369 close(cur)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
370
499
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
371 def insert_recover(self, project, stop_time, desc):
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
372 if project is None:
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
373 return
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
374 cur = None
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
375 try:
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
376 cur = self.con.cursor()
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
377 cur.execute(INSERT_RECOVER, (
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
378 project.id, project.start, stop_time, desc))
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
379 self.con.commit()
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
380 finally:
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
381 close(cur)
199b3e3657aa Every minute the time of the current entry is saved.
Magnus Schieder <mschieder@intevation.de>
parents: 467
diff changeset
382
52
9cb57c37369a fix insert new project sql statemenent and api
Björn Ricks <bjoern.ricks@intevation.de>
parents: 50
diff changeset
383 def insert_project(self, key, description):
9cb57c37369a fix insert new project sql statemenent and api
Björn Ricks <bjoern.ricks@intevation.de>
parents: 50
diff changeset
384 if key is None or description is None:
49
062ce001abd1 add backend method to create new projects
Björn Ricks <bjoern.ricks@intevation.de>
parents: 40
diff changeset
385 return
062ce001abd1 add backend method to create new projects
Björn Ricks <bjoern.ricks@intevation.de>
parents: 40
diff changeset
386 cur = None
50
9dbb6ee443a4 don't forget to save before commit :-/
Björn Ricks <bjoern.ricks@intevation.de>
parents: 49
diff changeset
387 try:
49
062ce001abd1 add backend method to create new projects
Björn Ricks <bjoern.ricks@intevation.de>
parents: 40
diff changeset
388 cur = self.con.cursor()
52
9cb57c37369a fix insert new project sql statemenent and api
Björn Ricks <bjoern.ricks@intevation.de>
parents: 50
diff changeset
389 cur.execute(INSERT_PROJECT, (key, description))
49
062ce001abd1 add backend method to create new projects
Björn Ricks <bjoern.ricks@intevation.de>
parents: 40
diff changeset
390 self.con.commit()
52
9cb57c37369a fix insert new project sql statemenent and api
Björn Ricks <bjoern.ricks@intevation.de>
parents: 50
diff changeset
391 logger.debug("Added a new project '%s' into db" % description)
50
9dbb6ee443a4 don't forget to save before commit :-/
Björn Ricks <bjoern.ricks@intevation.de>
parents: 49
diff changeset
392 finally:
9dbb6ee443a4 don't forget to save before commit :-/
Björn Ricks <bjoern.ricks@intevation.de>
parents: 49
diff changeset
393 close(cur)
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
394
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
395 def delete_entries(self, entries):
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
396 if entries is None:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
397 return
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
398
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
399 cur = None
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
400 try:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
401 cur = self.con.cursor()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
402 for entry in entries:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
403 cur.execute(DELETE_PROJECT_ENTRY % entry.id)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
404 logger.debug("Deleted entry: %s (%d)" % (entry.desc, entry.id))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
405 self.con.commit()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
406 finally:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
407 close(cur)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
408
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
409 def move_entries(self, entries, new_project_id):
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
410 if entries is None or new_project_id is None:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
411 return
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
412
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
413 cur = None
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
414 try:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
415 cur = self.con.cursor()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
416 for entry in entries:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
417 cur.execute(MOVE_ENTRY, (new_project_id, entry.id))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
418 logger.debug("Moved entry '%s' (id=%d) to project with id %d."
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
419 % (entry.desc, entry.id, new_project_id))
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
420 self.con.commit()
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
421 finally:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
422 close(cur)
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
423
68
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
424 def update_entry(self, entry):
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
425 if not entry:
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
426 return
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
427
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
428 cur = None
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
429 try:
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
430 cur = self.con.cursor()
401
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
431 cur.execute(UPDATE_ENTRY, (entry.desc, entry.start,
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
432 entry.end, entry.id))
68
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
433 self.con.commit()
401
a487535e7844 Adjusting starting datetime:
Bernhard Reiter <bernhard@intevation.de>
parents: 362
diff changeset
434 logger.debug("Updated entry to: '%s'" % (entry))
68
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
435 finally:
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
436 close(cur)
a25dab413260 Add new method to update a description of an entry in the database backend
Björn Ricks <bjoern.ricks@intevation.de>
parents: 52
diff changeset
437
174
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
438 def update_project(self, project):
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
439 if not project:
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
440 return
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
441
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
442 cur = None
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
443 try:
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
444 cur = self.con.cursor()
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
445 cur.execute(
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
446 UPDATE_PROJECT, (project.key, project.desc, project.id))
174
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
447 self.con.commit()
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
448 logger.debug("Updated project: (%d) %s %s" % (project.id,
349
c97a4b6a6887 Fix textwidth <= 80
Björn Ricks <bjoern.ricks@intevation.de>
parents: 348
diff changeset
449 project.key,
c97a4b6a6887 Fix textwidth <= 80
Björn Ricks <bjoern.ricks@intevation.de>
parents: 348
diff changeset
450 project.desc))
174
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
451 finally:
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
452 close(cur)
36b9f2d31810 Add backend method to update a project in the database
Björn Ricks <bjoern.ricks@intevation.de>
parents: 165
diff changeset
453
348
328ec66517b0 Fix coding style for pep8
Björn Ricks <bjoern.ricks@intevation.de>
parents: 284
diff changeset
454
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
455 def close(cur):
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
456 """ This function closes a database cursor if it is existing """
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
457 if cur:
135
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
458 try:
ce707fbb9666 Change coding style of if clauses
Björn Ricks <bjoern.ricks@intevation.de>
parents: 97
diff changeset
459 cur.close()
23
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
460 except:
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
461 logger.warn("could not close database cursor.")
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
462
9c4e8ba3c4fa Added a new implementation of 'getan' based on urwid, a python console user interface library.
Ingo Weinzierl <ingo_weinzierl@web.de>
parents:
diff changeset
463 # vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8:
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)