Mercurial > hgrepos > Python > libs > ConfigMix
annotate configmix/variables.py @ 237:13711ba8e81e
Adjust copyright year to 2020
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Wed, 13 May 2020 09:33:34 +0200 |
| parents | bbe8513ea649 |
| children | bfa4d125fd14 |
| 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 # :- |
|
237
13711ba8e81e
Adjust copyright year to 2020
Franz Glasner <fzglas.hg@dom66.de>
parents:
208
diff
changeset
|
3 # :Copyright: (c) 2015-2020, Franz Glasner. All rights reserved. |
|
79
a43749f751e0
Put a copyright and license note into every source file of the configmix package
Franz Glasner <hg@dom66.de>
parents:
54
diff
changeset
|
4 # :License: 3-clause BSD. 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 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
12 import os |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
13 from functools import wraps |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
14 |
|
207
b3b5ed34d180
Handle most flake8 errors and warnings.
Franz Glasner <fzglas.hg@dom66.de>
parents:
202
diff
changeset
|
15 from .compat import PY2, native_os_str_to_text, u |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
16 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
17 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
18 __all__ = [] |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
19 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
20 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
21 _MARKER = object() |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
22 |
|
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 def _envlookup(name, default=_MARKER): |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
25 """Lookup an environment variable""" |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
26 try: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
27 return native_os_str_to_text(os.environ[name]) |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
28 except KeyError: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
29 if default is _MARKER: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
30 raise |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
31 else: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
32 return default |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
33 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
34 |
|
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
|
35 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
|
36 """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
|
37 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
|
38 return native_os_str_to_text(os.getcwd()) |
|
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 raise KeyError("key %r not found in the namespace" % name) |
|
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
|
40 |
|
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 |
|
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
|
42 def _pylookup(name, default=_MARKER): |
| 100 | 43 """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
|
44 import platform |
|
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
|
45 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
|
46 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
|
47 elif name == "implementation": |
|
207
b3b5ed34d180
Handle most flake8 errors and warnings.
Franz Glasner <fzglas.hg@dom66.de>
parents:
202
diff
changeset
|
48 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
|
49 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
|
50 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
|
51 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
|
52 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
|
53 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
|
54 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
|
55 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
|
56 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
|
57 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
|
58 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
|
59 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
|
60 |
|
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
|
61 |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
62 _varns_registry = {} |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
63 """Namespace registry""" |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
64 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
65 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
66 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
|
67 """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
|
68 function `fn` |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
69 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
70 """ |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
71 _varns_registry[name] = fn |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
72 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
73 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
74 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
|
75 """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
|
76 function |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
77 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
78 :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
|
79 :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
|
80 :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
|
81 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
82 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
83 return _varns_registry[_normalized(name)] |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
84 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
85 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
86 _filter_registry = {} |
|
106
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
87 """Filter registry""" |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
88 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
89 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
90 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
|
91 """Register a variable filter function with name `name` and |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
92 implementation `fn` |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
93 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
94 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
95 _filter_registry[_normalized(name)] = fn |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
96 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
97 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
98 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
|
99 """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
|
100 implementation function |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
101 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
102 :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
|
103 :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
|
104 :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
|
105 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
106 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
107 return _filter_registry[_normalized(name)] |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
108 |
|
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 def filter(name): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
111 """Decorator for a filter function. |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
112 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
113 Example usage:: |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
114 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
115 @filter("myfilter") |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
116 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
|
117 filtered_value = ... |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
118 return filtered_value |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
119 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
120 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
121 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
122 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
123 def _decorator(f): |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
124 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
125 @wraps(f) |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
126 def _f(appconfig, v): |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
127 return f(appconfig, v) |
|
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 add_filter(name, _f) |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
130 return _f |
|
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 return _decorator |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
133 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
134 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
135 def _normalized(name): |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
136 return name.replace('-', '_') |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
137 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
138 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
139 # |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
140 # Some pre-defined filter functions |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
141 # |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
142 if PY2: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
143 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
144 @filter("urlquote") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
145 def urlquote(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
146 """Filter function to replace all special characters in string using |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
147 the ``%xx`` escape |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
148 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
149 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
150 from urllib import quote |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
151 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
|
152 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
153 else: |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
154 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
155 @filter("urlquote") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
156 def urlquote(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
157 """Filter function to replace all special characters in string using |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
158 the ``%xx`` escape |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
159 |
|
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
160 """ |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
161 from urllib.parse import quote |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
162 return quote(v, safe="") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
163 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
164 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
165 @filter("saslprep") |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
166 def saslprep(config, v): |
|
101
f6f2dc7cf053
Better docu of the configmix.variables module
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
100
diff
changeset
|
167 """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
|
168 `v`. |
|
15
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
169 |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
170 This is a Stringprep Profile for usernames and passwords |
|
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 """ |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
173 import passlib.utils |
|
0b1292e920af
Variables: namespaces and filters
Franz Glasner <f.glasner@feldmann-mg.com>
parents:
diff
changeset
|
174 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
|
175 |
|
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
|
176 |
|
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
|
177 @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
|
178 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
|
179 """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
|
180 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
|
181 |
|
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
|
182 |
|
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
|
183 @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
|
184 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
|
185 """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
|
186 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
|
187 |
|
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
|
188 |
|
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
|
189 @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
|
190 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
|
191 """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
|
192 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
|
193 |
|
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
|
194 |
|
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
|
195 @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
|
196 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
|
197 """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
|
198 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
|
199 |
|
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
|
200 |
|
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
|
201 @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
|
202 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
|
203 """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
|
204 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
|
205 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
206 |
|
b35837427a7a
Add an "add_varns()" function to add new namespaces for variables.
Franz Glasner <hg@dom66.de>
parents:
101
diff
changeset
|
207 # 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
|
208 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
|
209 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
|
210 add_varns("PY", _pylookup) |
