View | Details | Raw Unified | Return to bug 29484
Collapse All | Expand All

(-)univention-config-registry/python/univention/config_registry/handler.py (-42 / +44 lines)
 Lines 47-54    Link Here 
47
__all__ = ['ConfigHandlers']
47
__all__ = ['ConfigHandlers']
48
48
49
VARIABLE_PATTERN = re.compile('@%@([^@]+)@%@')
49
VARIABLE_PATTERN = re.compile('@%@([^@]+)@%@')
50
VARIABLE_TOKEN = re.compile('@%@')
50
VARIABLE_TOKEN = re.compile('@%@.*?@%@')
51
EXECUTE_TOKEN = re.compile('@!@')
51
EXECUTE_TOKEN = re.compile('@!@.*?@!@', re.MULTILINE | re.DOTALL)
52
WARNING_PATTERN = re.compile('(UCRWARNING|BCWARNING|UCRWARNING_ASCII)=(.+)')
52
WARNING_PATTERN = re.compile('(UCRWARNING|BCWARNING|UCRWARNING_ASCII)=(.+)')
53
53
54
INFO_DIR = '/etc/univention/templates/info'
54
INFO_DIR = '/etc/univention/templates/info'
 Lines 75-118    Link Here 
75
75
76
def run_filter(template, directory, srcfiles=set(), opts=dict()):
76
def run_filter(template, directory, srcfiles=set(), opts=dict()):
77
    """Process a template file: susbstitute variables."""
77
    """Process a template file: susbstitute variables."""
78
    while True:
78
    out = []
79
        i = VARIABLE_TOKEN.finditer(template)
79
    lastPos = 0
80
        try:
80
    for i in VARIABLE_TOKEN.finditer(template):
81
            start = i.next()
81
        name = template[i.start()+3:i.start()-3]
82
            end = i.next()
83
            name = template[start.end():end.start()]
84
82
85
            if name in directory:
83
        if name in directory:
86
                value = directory[name]
84
            value = directory[name]
85
        else:
86
            match = WARNING_PATTERN.match(name)
87
            if match:
88
                mode, prefix = match.groups()
89
                if mode == "UCRWARNING_ASCII":
90
                    value = warning_string(prefix, srcfiles=srcfiles,
91
                            enforce_ascii=True)
92
                else:
93
                    value = warning_string(prefix, srcfiles=srcfiles)
87
            else:
94
            else:
88
                match = WARNING_PATTERN.match(name)
95
                value = ''
89
                if match:
90
                    mode, prefix = match.groups()
91
                    if mode == "UCRWARNING_ASCII":
92
                        value = warning_string(prefix, srcfiles=srcfiles,
93
                                enforce_ascii=True)
94
                    else:
95
                        value = warning_string(prefix, srcfiles=srcfiles)
96
                else:
97
                    value = ''
98
96
99
            if isinstance(value, (list, tuple)):
97
        if isinstance(value, (list, tuple)):
100
                value = value[0]
98
            value = value[0]
101
            template = template[:start.start()] + value + template[end.end():]
102
        except StopIteration:
103
            break
104
99
105
    while True:
100
        out.append(template[lastPos:i.start()])
106
        i = EXECUTE_TOKEN.finditer(template)
101
        out.append(value)
107
        try:
102
        lastPos = i.end()
108
            start = i.next()
109
            end = i.next()
110
103
111
            proc = subprocess.Popen((__PYTHON_EXECUTABLE,),
104
    out.append(template[lastPos:])
112
                    stdin=subprocess.PIPE, stdout=subprocess.PIPE,
105
    template = ''.join(out)
113
                    close_fds=True)
106
114
            child_stdin, child_stdout = proc.stdin, proc.stdout
107
    out = []
115
            child_stdin.write('''\
108
    lastPos = 0
109
    for i in EXECUTE_TOKEN.finditer(template):
110
        proc = subprocess.Popen((__PYTHON_EXECUTABLE,),
111
                stdin=subprocess.PIPE, stdout=subprocess.PIPE,
112
                close_fds=True)
113
        child_stdin, child_stdout = proc.stdin, proc.stdout
114
        child_stdin.write('''\
116
# -*- coding: utf-8 -*-
115
# -*- coding: utf-8 -*-
117
import univention.config_registry
116
import univention.config_registry
118
configRegistry = univention.config_registry.ConfigRegistry()
117
configRegistry = univention.config_registry.ConfigRegistry()
 Lines 120-134    Link Here 
120
# for compatibility
119
# for compatibility
121
baseConfig = configRegistry
120
baseConfig = configRegistry
122
''')
121
''')
123
            child_stdin.write(template[start.end():end.start()])
122
        child_stdin.write(template[i.start()+3:i.end()-3])
124
            child_stdin.close()
123
        child_stdin.close()
125
            value = child_stdout.read()
124
        value = child_stdout.read()
126
            child_stdout.close()
125
        child_stdout.close()
127
            template = template[:start.start()] + value + template[end.end():]
128
126
129
        except StopIteration:
127
        out.append(template[lastPos:i.start()])
130
            break
128
        out.append(value)
129
        lastPos = i.end()
131
130
131
    out.append(template[lastPos:])
132
    template = ''.join(out)
133
132
    return template
134
    return template
133
135
134
136

Return to bug 29484