annotate configmix/variables.py @ 762:3eb2c451026b

Implement Configuration.copy_new_config_without()
author Franz Glasner <fzglas.hg@dom66.de>
date Thu, 07 Dec 2023 08:43:04 +0100
parents 59a3fb7fcac3
children
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 # :-
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
e3289a56ba80 Enhance docu
Franz Glasner <f.glasner@feldmann-mg.com>
parents: 99
diff changeset
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
Franz Glasner <fzglas.hg@dom66.de>
parents: 360
diff changeset
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
Franz Glasner <fzglas.hg@dom66.de>
parents: 360
diff changeset
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)