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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
e3289a56ba80 Enhance docu
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 99
diff changeset
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)