annotate roundup/backends/__init__.py @ 8566:e4191aa7b402 default tip

doc: issue2551415 correct doc for change input->input_payload in 2.5 the rest interface changed a variable name from input to input_payload. An earlier commit changed the rest docs. This commit adds an item for it to the upgrading 2.4.0->2.5.0 section. Also cross reference added to the rest docs with the updated examples.
author John Rouillard <rouilj@ieee.org>
date Thu, 09 Apr 2026 00:19:06 -0400
parents d7cc63d7a857
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
1 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
2 # Copyright (c) 2001 Bizar Software Pty Ltd (http://www.bizarsoftware.com.au/)
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
3 # This module is free software, and you may redistribute it and/or modify
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
4 # under the same terms as Python, so long as this copyright message and
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
5 # disclaimer are retained in their original form.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
6 #
214
18134bffab37 stupid typo
Richard Jones <richard@users.sourceforge.net>
parents: 213
diff changeset
7 # IN NO EVENT SHALL BIZAR SOFTWARE PTY LTD BE LIABLE TO ANY PARTY FOR
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
8 # DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
9 # OUT OF THE USE OF THIS CODE, EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
10 # POSSIBILITY OF SUCH DAMAGE.
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
11 #
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
12 # BIZAR SOFTWARE PTY LTD SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
13 # BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
14 # FOR A PARTICULAR PURPOSE. THE CODE PROVIDED HEREUNDER IS ON AN "AS IS"
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
15 # BASIS, AND THERE IS NO OBLIGATION WHATSOEVER TO PROVIDE MAINTENANCE,
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
16 # SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1190
diff changeset
17
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
18 '''Container for the hyperdb storage backend implementations.
1244
8dd4f736370b merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents: 1190
diff changeset
19 '''
2005
fc52d57c6c3e documentation cleanup
Richard Jones <richard@users.sourceforge.net>
parents: 1873
diff changeset
20 __docformat__ = 'restructuredtext'
213
d45384bc6420 Added the copyright/license notice to (nearly) all files...
Richard Jones <richard@users.sourceforge.net>
parents: 159
diff changeset
21
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
22 # These names are used to suppress import errors.
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
23 # If get_backend raises an ImportError with appropriate
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
24 # module name, have_backend quietly returns False.
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
25 # Otherwise the error is reraised.
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
26 _modules = {
3718
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
27 'mysql': ('MySQLdb',),
5464
22eecc8a8bd4 fixed backend detection for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5425
diff changeset
28 'postgresql': ('psycopg2',),
8081
95f91b6f0386 issue2551343 - Remove support for PySQLite and sqlite v2.
John Rouillard <rouilj@ieee.org>
parents: 6365
diff changeset
29 'sqlite': ('sqlite3', '_sqlite3'),
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
30 }
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
31
8259
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
32
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
33 def get_backend(name):
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
34 '''Get a specific backend by name.'''
8259
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
35 global_vars = globals()
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
36 # if requested backend has been imported yet, return current instance
8259
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
37 if name in global_vars:
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
38 return global_vars[name]
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
39 # import the backend module
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
40 module_name = 'back_%s' % name
8259
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
41 module = __import__(module_name, global_vars, level=1)
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
42 global_vars[name] = module
4687
4960a2c21590 Python 2.3 workarounds cleanup
anatoly techtonik <techtonik@gmail.com>
parents: 4570
diff changeset
43 return module
159
764db91c0dea Checks for ability to import the specific back-end module.
Richard Jones <richard@users.sourceforge.net>
parents: 46
diff changeset
44
8259
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
45
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
46 def have_backend(name):
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
47 '''Is backend "name" available?'''
1809
bd127cafe3a8 Simplify backend importing, by moving the imports into the backend modules.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents: 1609
diff changeset
48 try:
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
49 get_backend(name)
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
50 return 1
5248
198b6e810c67 Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents: 5005
diff changeset
51 except ImportError as e:
5464
22eecc8a8bd4 fixed backend detection for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5425
diff changeset
52 if hasattr(e, 'name'):
22eecc8a8bd4 fixed backend detection for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5425
diff changeset
53 modname = e.name
22eecc8a8bd4 fixed backend detection for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5425
diff changeset
54 else:
22eecc8a8bd4 fixed backend detection for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5425
diff changeset
55 modname = e.args[0][16:] if e.args[0].startswith('No module named ') else None
22eecc8a8bd4 fixed backend detection for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5425
diff changeset
56
6365
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
57 # It's always ok if memorydb is not found
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
58 if modname.endswith('back_memorydb'):
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
59 return 0
5464
22eecc8a8bd4 fixed backend detection for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5425
diff changeset
60 if modname and (modname in _modules.get(name, (name,))):
22eecc8a8bd4 fixed backend detection for Python 3
Christof Meerwald <cmeerw@cmeerw.org>
parents: 5425
diff changeset
61 return 0
3718
0d561b24ceff support sqlite3
Richard Jones <richard@users.sourceforge.net>
parents: 3503
diff changeset
62 raise
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
63 return 0
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
64
8259
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
65
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
66 def list_backends():
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
67 '''List all available backend names.
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
68
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
69 This function has side-effect of registering backward-compatible
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
70 globals for all available backends.
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
71
6365
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
72 Note: Since memorydb does not live in the backends directory, it will
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
73 never be found in the default setup. It *can* be enabled by preloading
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
74 test/memorydb and injecting into roundup.backends. So the normal user
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
75 can never configure memorydb but it makes using the tests easier
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
76 because we do not need to monkey-patch list_backends.
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
77
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
78 '''
8259
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
79 backend_list = []
6365
7f00fc5958ca Make memorydb persistent across re-open
Ralf Schlatterbeck <rsc@runtux.com>
parents: 5464
diff changeset
80 for name in 'anydbm', 'mysql', 'sqlite', 'postgresql', 'memorydb':
2856
adec352e2ce0 don't try to import all backends in backends.__init__ unless we *want* to
Richard Jones <richard@users.sourceforge.net>
parents: 2812
diff changeset
81 if have_backend(name):
8259
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
82 backend_list.append(name)
d7cc63d7a857 chore(ruff): var name changes; unused import; formatting
John Rouillard <rouilj@ieee.org>
parents: 8081
diff changeset
83 return backend_list
854
3cdfa5d86cec Added metakit backend to the db tests...
Richard Jones <richard@users.sourceforge.net>
parents: 733
diff changeset
84
2925
e54c95de4c6a fix: second call to get_backend() succeeded...
Alexander Smishlajev <a1s@users.sourceforge.net>
parents: 2856
diff changeset
85 # vim: set filetype=python sts=4 sw=4 et si :

Roundup Issue Tracker: http://roundup-tracker.org/