Mercurial > hgrepos > Python > libs > ConfigMix
annotate configmix/variables.py @ 769:4a4d1323b282 default tip
Doc what AWS partition is
| author | Franz Glasner <f.glasner@feldmann-mg.com> |
|---|---|
| date | Mon, 19 Feb 2024 16:11:48 +0100 |
| parents | 59a3fb7fcac3 |
| children |
| rev | line source |
|---|---|
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
1 # -*- coding: utf-8 -*- |
|
208
bbe8513ea649
Handle flake8 E265 "block comment should start with '# ': use '# :-' instead of '#-' to mark copyright and license comments
Franz Glasner <fzglas.hg@dom66.de>
parents:
207
diff
changeset
|
2 # :- |
|
593
f454889e41fa
Adjust copyright year (the end) to 2022
Franz Glasner <fzglas.hg@dom66.de>
parents:
522
diff
changeset
|
3 # :Copyright: (c) 2015-2022, Franz Glasner. All rights reserved. |
|
296
eed16a1ec8f3
Use SPDX license identifiers (either full or short) all over the package
Franz Glasner <fzglas.hg@dom66.de>
parents:
282
diff
changeset
|
4 # :License: BSD-3-Clause. See LICENSE.txt for details. |
|
208
bbe8513ea649
Handle flake8 E265 "block comment should start with '# ': use '# :-' instead of '#-' to mark copyright and license comments
Franz Glasner <fzglas.hg@dom66.de>
parents:
207
diff
changeset
|
5 # :- |
|
202
2e66178a09d8
Docu: Ban "keyword expansion" -- use "variable interpolation" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
156
diff
changeset
|
6 """Variable interpolation: implementation of namespaces and filters |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
7 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
8 """ |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
9 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
10 from __future__ import division, absolute_import, print_function |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
11 |
|
250
ff964825a75a
Style: placement of "__all__"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
12 |
|
ff964825a75a
Style: placement of "__all__"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
13 __all__ = [] |
|
ff964825a75a
Style: placement of "__all__"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
14 |
|
ff964825a75a
Style: placement of "__all__"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
15 |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
16 import os |
|
243
57ff12610dc5
Implemented OS:node to return the host's computername
Franz Glasner <fzglas.hg@dom66.de>
parents:
242
diff
changeset
|
17 import platform |
|
697
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
18 import sys |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
19 from functools import wraps |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
20 |
|
357
dd454e1efea4
Use constants for the names of the "None" and "Empty" filters
Franz Glasner <fzglas.hg@dom66.de>
parents:
352
diff
changeset
|
21 from .compat import PY2, native_os_str_to_text, text_to_native_os_str, u |
|
dd454e1efea4
Use constants for the names of the "None" and "Empty" filters
Franz Glasner <fzglas.hg@dom66.de>
parents:
352
diff
changeset
|
22 from .constants import REF_NAMESPACE, NONE_FILTER, EMPTY_FILTER |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
23 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
24 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
25 _MARKER = object() |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
26 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
27 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
28 def _envlookup(name, default=_MARKER): |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
29 """Lookup an environment variable""" |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
30 try: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
31 return native_os_str_to_text(os.environ[name]) |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
32 except KeyError: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
33 if default is _MARKER: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
34 raise |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
35 else: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
36 return default |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
37 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
38 |
|
30
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
39 def _oslookup(name, default=_MARKER): |
|
99
cd6c5c1494f5
FIX: Comment for function "_oslookup()" was wrong by copy/paste
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
89
diff
changeset
|
40 """Lookup some process and/or OS state """ |
|
30
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
41 if name == "cwd": |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
42 return native_os_str_to_text(os.getcwd()) |
|
243
57ff12610dc5
Implemented OS:node to return the host's computername
Franz Glasner <fzglas.hg@dom66.de>
parents:
242
diff
changeset
|
43 elif name == "node": |
|
57ff12610dc5
Implemented OS:node to return the host's computername
Franz Glasner <fzglas.hg@dom66.de>
parents:
242
diff
changeset
|
44 return native_os_str_to_text(platform.node()) |
|
242
bfa4d125fd14
FIX: The namespace lookup implementation for the "OS" namespace did not properly handle the "default" argument.
Franz Glasner <fzglas.hg@dom66.de>
parents:
237
diff
changeset
|
45 else: |
|
bfa4d125fd14
FIX: The namespace lookup implementation for the "OS" namespace did not properly handle the "default" argument.
Franz Glasner <fzglas.hg@dom66.de>
parents:
237
diff
changeset
|
46 if default is _MARKER: |
|
bfa4d125fd14
FIX: The namespace lookup implementation for the "OS" namespace did not properly handle the "default" argument.
Franz Glasner <fzglas.hg@dom66.de>
parents:
237
diff
changeset
|
47 raise KeyError("key %r not found in the namespace" % name) |
|
bfa4d125fd14
FIX: The namespace lookup implementation for the "OS" namespace did not properly handle the "default" argument.
Franz Glasner <fzglas.hg@dom66.de>
parents:
237
diff
changeset
|
48 else: |
|
bfa4d125fd14
FIX: The namespace lookup implementation for the "OS" namespace did not properly handle the "default" argument.
Franz Glasner <fzglas.hg@dom66.de>
parents:
237
diff
changeset
|
49 return default |
|
30
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
50 |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
51 |
|
697
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
52 def _syslookup(name, default=_MARKER): |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
53 """Lookup some variables from Python's :mod:`sys` module""" |
|
698
3a9d661d33b5
Implement SYS:executable
Franz Glasner <fzglas.hg@dom66.de>
parents:
697
diff
changeset
|
54 if name == "executable": |
|
3a9d661d33b5
Implement SYS:executable
Franz Glasner <fzglas.hg@dom66.de>
parents:
697
diff
changeset
|
55 return native_os_str_to_text(sys.executable) |
|
697
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
56 if name == "prefix": |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
57 return native_os_str_to_text(sys.prefix) |
|
698
3a9d661d33b5
Implement SYS:executable
Franz Glasner <fzglas.hg@dom66.de>
parents:
697
diff
changeset
|
58 if name == "base_prefix": |
|
697
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
59 val = getattr(sys, name, _MARKER) |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
60 if val is _MARKER: |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
61 if default is _MARKER: |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
62 raise KeyError("key %r not found in the namespace" % name) |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
63 else: |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
64 return default |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
65 return native_os_str_to_text(val) |
|
698
3a9d661d33b5
Implement SYS:executable
Franz Glasner <fzglas.hg@dom66.de>
parents:
697
diff
changeset
|
66 if name == "platform": |
|
697
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
67 return native_os_str_to_text(sys.platform) |
|
698
3a9d661d33b5
Implement SYS:executable
Franz Glasner <fzglas.hg@dom66.de>
parents:
697
diff
changeset
|
68 if default is _MARKER: |
|
3a9d661d33b5
Implement SYS:executable
Franz Glasner <fzglas.hg@dom66.de>
parents:
697
diff
changeset
|
69 raise KeyError("key %r not found in the namespace" % name) |
|
697
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
70 else: |
|
698
3a9d661d33b5
Implement SYS:executable
Franz Glasner <fzglas.hg@dom66.de>
parents:
697
diff
changeset
|
71 return default |
|
697
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
72 |
|
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
73 |
|
43
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
74 def _pylookup(name, default=_MARKER): |
| 100 | 75 """Lookup Python specific information""" |
|
43
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
76 if name == "version": |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
77 return u(platform.python_version()) |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
78 elif name == "implementation": |
|
207
b3b5ed34d180
Handle most flake8 errors and warnings.
Franz Glasner <fzglas.hg@dom66.de>
parents:
202
diff
changeset
|
79 return u(platform.python_implementation()) |
|
43
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
80 elif name == "version_maj_min": |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
81 t = platform.python_version_tuple() |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
82 return u('.'.join(t[:2])) |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
83 elif name == "version_maj": |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
84 t = platform.python_version_tuple() |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
85 return u(t[0]) |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
86 else: |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
87 if default is _MARKER: |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
88 raise KeyError("variable %r not found in namespace PY" % name) |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
89 else: |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
90 return default |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
91 |
|
0e9f1f875ab0
A new PY variable namespace with some variables about the Python implementation and version
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
33
diff
changeset
|
92 |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
93 _varns_registry = {} |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
94 """Namespace registry""" |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
95 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
96 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
97 def add_varns(name, fn): |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
98 """Register a new variable namespace `name` and it's implementing |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
99 function `fn` |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
100 |
|
305
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
101 ..note:: This function checks that `name` is not the special |
|
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
102 namespace :data:`~configmix.constants.REF_NAMESPACE`. |
|
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
103 |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
104 """ |
|
305
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
105 if name == REF_NAMESPACE: |
|
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
106 raise ValueError( |
|
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
107 "the special namespace `%s' is not allowed here" % REF_NAMESPACE) |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
108 _varns_registry[name] = fn |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
109 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
110 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
111 def lookup_varns(name): |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
112 """Lookup the variable namespace `name` and return it's implementing |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
113 function |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
114 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
115 :param str name: the namespace name |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
116 :returns: the implementing function |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
117 :exception KeyError: if the namespace `name` doesn't exist |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
118 |
|
305
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
119 ..note:: This function checks that `name` is not the special |
|
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
120 namespace :data:`~configmix.constants.REF_NAMESPACE`. |
|
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
121 |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
122 """ |
|
305
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
123 if name == REF_NAMESPACE: |
|
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
124 raise ValueError( |
|
f529ca46dd50
Implemented the "ref" namespace to get configuration tree references.
Franz Glasner <fzglas.hg@dom66.de>
parents:
296
diff
changeset
|
125 "the special namespace `%s' is not allowed here" % REF_NAMESPACE) |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
126 return _varns_registry[_normalized(name)] |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
127 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
128 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
129 _filter_registry = {} |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
130 """Filter registry""" |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
131 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
132 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
133 def add_filter(name, fn): |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
134 """Register a variable filter function with name `name` and |
|
706
59a3fb7fcac3
Prohibit "," and "|" in filter names
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
698
diff
changeset
|
135 implementation `fn`. |
|
59a3fb7fcac3
Prohibit "," and "|" in filter names
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
698
diff
changeset
|
136 |
|
59a3fb7fcac3
Prohibit "," and "|" in filter names
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
698
diff
changeset
|
137 `name` may *not* contain ``,`` and ``|`` characters. |
|
59a3fb7fcac3
Prohibit "," and "|" in filter names
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
698
diff
changeset
|
138 |
|
59a3fb7fcac3
Prohibit "," and "|" in filter names
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
698
diff
changeset
|
139 :raises ValueError: If an invalid `name` is given |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
140 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
141 """ |
|
706
59a3fb7fcac3
Prohibit "," and "|" in filter names
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
698
diff
changeset
|
142 if ('|' in name) or (',' in name): |
|
59a3fb7fcac3
Prohibit "," and "|" in filter names
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
698
diff
changeset
|
143 raise ValueError("invalid filter name: %s" % (name, )) |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
144 _filter_registry[_normalized(name)] = fn |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
145 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
146 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
147 def lookup_filter(name): |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
148 """Lookup a variable filter with name `name` and return it's |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
149 implementation function |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
150 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
151 :param str name: the logical filter name |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
152 :returns: the implementing filter function |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
153 :exception KeyError: if the filter cannot be found |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
154 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
155 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
156 return _filter_registry[_normalized(name)] |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
157 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
158 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
159 def filter(name): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
160 """Decorator for a filter function. |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
161 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
162 Example usage:: |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
163 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
164 @filter("myfilter") |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
165 def myfilter_impl(appconfig, variable_value): |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
166 filtered_value = ... |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
167 return filtered_value |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
168 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
169 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
170 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
171 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
172 def _decorator(f): |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
173 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
174 @wraps(f) |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
175 def _f(appconfig, v): |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
176 return f(appconfig, v) |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
177 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
178 add_filter(name, _f) |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
179 return _f |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
180 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
181 return _decorator |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
182 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
183 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
184 def _normalized(name): |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
185 return name.replace('-', '_') |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
186 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
187 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
188 # |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
189 # Some pre-defined filter functions |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
190 # |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
191 if PY2: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
192 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
193 @filter("urlquote") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
194 def urlquote(config, v): |
|
347
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
195 """Filter function to replace all special characters in string `v` |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
196 using the ``%xx`` escape |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
197 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
198 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
199 from urllib import quote |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
200 return quote(v.encode("utf-8"), safe=b"").decode("utf-8") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
201 |
|
347
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
202 |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
203 @filter("urlquote_plus") |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
204 def urlquote_plus(config, v): |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
205 """Filter function to replace all special characters (including |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
206 spaces) in string `v` using the ``%xx`` escape |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
207 |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
208 """ |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
209 from urllib import quote_plus |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
210 return quote_plus(v.encode("utf-8"), safe=b"").decode("utf-8") |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
211 |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
212 else: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
213 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
214 @filter("urlquote") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
215 def urlquote(config, v): |
|
347
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
216 """Filter function to replace all special characters in string `v` |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
217 using the ``%xx`` escape |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
218 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
219 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
220 from urllib.parse import quote |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
221 return quote(v, safe="") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
222 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
223 |
|
347
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
224 @filter("urlquote_plus") |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
225 def urlquote_plus(config, v): |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
226 """Filter function to replace all special characters (including |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
227 spaces) in string `v` using the ``%xx`` escape |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
228 |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
229 """ |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
230 from urllib.parse import quote_plus |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
231 return quote_plus(v, safe="") |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
232 |
|
d7daec119383
New filter function "urlquote_plus" which quotes a space into a '+' character
Franz Glasner <fzglas.hg@dom66.de>
parents:
305
diff
changeset
|
233 |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
234 @filter("saslprep") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
235 def saslprep(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
236 """Filter function to perform a `SASLprep` according to :rfc:`4013` on |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
237 `v`. |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
238 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
239 This is a Stringprep Profile for usernames and passwords |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
240 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
241 """ |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
242 import passlib.utils |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
243 return passlib.utils.saslprep(v) |
|
30
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
244 |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
245 |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
246 @filter("normpath") |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
247 def normpath_impl(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
248 """Implementation of the `normpath` filter function""" |
|
30
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
249 return os.path.normpath(v) |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
250 |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
251 |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
252 @filter("abspath") |
|
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
253 def abspath_impl(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
254 """Implementation of the `abspath` filter function""" |
|
30
d70b58b0dfb9
A new variable namespace "OS" with a "cwd" function with new filters "abspath" and "normpath" for some minimal path manipulation
Franz Glasner <hg@dom66.de>
parents:
15
diff
changeset
|
255 return os.path.abspath(v) |
|
33
3ee21f868440
Implement a "posixpath" filter to convert file path strings to use forward slashes.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
30
diff
changeset
|
256 |
|
3ee21f868440
Implement a "posixpath" filter to convert file path strings to use forward slashes.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
30
diff
changeset
|
257 |
|
3ee21f868440
Implement a "posixpath" filter to convert file path strings to use forward slashes.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
30
diff
changeset
|
258 @filter("posixpath") |
|
3ee21f868440
Implement a "posixpath" filter to convert file path strings to use forward slashes.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
30
diff
changeset
|
259 def posixpath_impl(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
260 """Implementation of the `posixpath` filter function""" |
|
33
3ee21f868440
Implement a "posixpath" filter to convert file path strings to use forward slashes.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
30
diff
changeset
|
261 return v.replace(u('\\'), u('/')) |
|
44
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
262 |
|
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
263 |
|
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
264 @filter("lower") |
|
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
265 def lower_impl(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
266 """Implementation of the `lower` filter function""" |
|
44
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
267 return v.lower() |
|
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
268 |
|
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
269 |
|
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
270 @filter("upper") |
|
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
271 def upper_impl(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
272 """Implementation of the `upper` filter function""" |
|
44
b42e9936df2d
Added "lower" and "upper" filters to make variable lower-case and upper-case
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
43
diff
changeset
|
273 return v.upper() |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
274 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
275 |
|
357
dd454e1efea4
Use constants for the names of the "None" and "Empty" filters
Franz Glasner <fzglas.hg@dom66.de>
parents:
352
diff
changeset
|
276 @filter(text_to_native_os_str(NONE_FILTER, encoding="ascii")) |
|
349
83f76a41cf7c
Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
347
diff
changeset
|
277 def None_filter_impl(config, v): |
|
83f76a41cf7c
Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
347
diff
changeset
|
278 """Identity. |
|
83f76a41cf7c
Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
347
diff
changeset
|
279 |
|
360
d2751a80d9b7
Docu: fix link to KeyError in the new filter function implementations
Franz Glasner <fzglas.hg@dom66.de>
parents:
357
diff
changeset
|
280 The `None` filter is just a marker to not throw :exc:`KeyError` |
| 522 | 281 but return `None`. It is a no-op within the filter-chain itself. |
|
349
83f76a41cf7c
Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
347
diff
changeset
|
282 |
|
83f76a41cf7c
Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
347
diff
changeset
|
283 """ |
|
83f76a41cf7c
Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
347
diff
changeset
|
284 return v |
|
83f76a41cf7c
Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
347
diff
changeset
|
285 |
|
83f76a41cf7c
Implement a special filter named "None" that suppresses "KeyErrors" from interpolation lookups and returns a Python "None" instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
347
diff
changeset
|
286 |
|
357
dd454e1efea4
Use constants for the names of the "None" and "Empty" filters
Franz Glasner <fzglas.hg@dom66.de>
parents:
352
diff
changeset
|
287 @filter(text_to_native_os_str(EMPTY_FILTER, encoding="ascii")) |
|
352
2b209bdf6995
Implement the "Empty" filter.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
349
diff
changeset
|
288 def Empty_filter_impl(config, v): |
|
2b209bdf6995
Implement the "Empty" filter.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
349
diff
changeset
|
289 """Identity. |
|
2b209bdf6995
Implement the "Empty" filter.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
349
diff
changeset
|
290 |
|
360
d2751a80d9b7
Docu: fix link to KeyError in the new filter function implementations
Franz Glasner <fzglas.hg@dom66.de>
parents:
357
diff
changeset
|
291 The `Empty` filter is just a marker to not throw :exc:`KeyError` |
| 522 | 292 but return the empty string. It is a no-op within the filter-chain itself. |
|
352
2b209bdf6995
Implement the "Empty" filter.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
349
diff
changeset
|
293 |
|
2b209bdf6995
Implement the "Empty" filter.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
349
diff
changeset
|
294 """ |
|
2b209bdf6995
Implement the "Empty" filter.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
349
diff
changeset
|
295 return v |
|
2b209bdf6995
Implement the "Empty" filter.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
349
diff
changeset
|
296 |
|
2b209bdf6995
Implement the "Empty" filter.
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
349
diff
changeset
|
297 |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
298 # Register the default namespaces |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
299 add_varns("ENV", _envlookup) |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
300 add_varns("OS", _oslookup) |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
301 add_varns("PY", _pylookup) |
|
697
57fe110c50c8
Implement a new "SYS" namespace with "prefix", "base_prefix" and "platform"
Franz Glasner <fzglas.hg@dom66.de>
parents:
593
diff
changeset
|
302 add_varns("SYS", _syslookup) |
|
282
da1596034954
Implemented an "AWS" namespace to retrieve some AWS-specific metadata
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
303 try: |
|
da1596034954
Implemented an "AWS" namespace to retrieve some AWS-specific metadata
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
304 from .extras import aws |
|
da1596034954
Implemented an "AWS" namespace to retrieve some AWS-specific metadata
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
305 except ImportError: |
|
da1596034954
Implemented an "AWS" namespace to retrieve some AWS-specific metadata
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
306 pass |
|
da1596034954
Implemented an "AWS" namespace to retrieve some AWS-specific metadata
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
307 else: |
|
da1596034954
Implemented an "AWS" namespace to retrieve some AWS-specific metadata
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
308 add_varns("AWS", aws._awslookup) |
