From efa603b4dc2572dd97b4e2b6db76110c727e38b4 Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Thu, 1 Feb 2018 11:16:10 +0100 Subject: also accept a single pattern --- src/examples/elevate2018.yml | 12 +++++----- src/flufigut.py | 53 ++++++++++++++++++++++++++------------------ 2 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/examples/elevate2018.yml b/src/examples/elevate2018.yml index 77bf36a..3cec69f 100644 --- a/src/examples/elevate2018.yml +++ b/src/examples/elevate2018.yml @@ -36,14 +36,14 @@ globals: mjpeg: { 1080p25: 95 } workers: dione: - capture: [ "capture-*" ] + capture: "capture-*" default: [ "resize-*", "resample-*", "encode-*" ] helene: [ "encode-sdi-orig-vp8-*", "encode-sdi-orig-h264-360p25", "mux-*", "http-local1*", "record-*" ] - emc-00: [ "repeat-public*" ] - emc-01: [ "http-public1*" ] - emc-02: [ "http-public2*" ] - emc-03: [ "http-public3*" ] - emc-04: [ "http-public4*" ] + emc-00: "repeat-public*" + emc-01: "http-public1*" + emc-02: "http-public2*" + emc-03: "http-public3*" + emc-04: "http-public4*" inputs: sdi-orig: type: decklink diff --git a/src/flufigut.py b/src/flufigut.py index ce2a48b..c266287 100755 --- a/src/flufigut.py +++ b/src/flufigut.py @@ -51,7 +51,7 @@ class Worker: self.name = name self.subname = subname - def __str__(self): + def __repr__(self): if self.subname: return "%s:%s" % (self.name, self.subname) return self.name @@ -76,33 +76,42 @@ class Description: self.worker_patterns = {} - def __compute_worker_patterns(self, worker_name, worker_subname, patterns): - for pattern in patterns: - is_prefix = False - search_string = pattern - worker = Worker(worker_name, worker_subname) - if '*' in pattern: - if '*' in pattern[:-1]: - raise Exception("invalid worker pattern '%s' in worker '%s' component globs may only have a single '*' at the end)" % (pattern, worker)) - is_prefix = True - search_string = pattern[:-1] - if not search_string: - raise Exception("worker '%s' has wildcard or empty pattern which is not allowed" % (worker)) - if search_string in self.worker_patterns: - raise Exception("worker pattern '%s' is used by at least two workers (%s and %s)" % - (pattern, worker, self.worker_patterns[search_string].worker)) - - self.worker_patterns[search_string] = WorkerPattern(pattern, is_prefix, worker) + def __compute_worker_pattern(self, worker, pattern): + is_prefix = False + search_string = pattern + if '*' in pattern: + if '*' in pattern[:-1]: + raise Exception("invalid worker pattern '%s' in worker '%s' component globs may only have a single '*' at the end)" % (pattern, worker)) + is_prefix = True + search_string = pattern[:-1] + + if not search_string: + raise Exception("worker '%s' has wildcard or empty pattern which is not allowed" % (worker)) + if search_string in self.worker_patterns: + raise Exception("worker pattern '%s' is used by at least two workers (%s and %s)" % + (pattern, worker, self.worker_patterns[search_string].worker)) + + self.worker_patterns[search_string] = WorkerPattern(pattern, is_prefix, worker) def _compute_worker_patterns(self): for name, entry in self.globals['workers'].items(): - if isinstance(entry, list): - self.__compute_worker_patterns(name, None, entry) + if isinstance(entry, str): + self.__compute_worker_pattern(Worker(name), entry) + elif isinstance(entry, list): + for pattern in entry: + self.__compute_worker_pattern(Worker(name), pattern) elif isinstance(entry, dict): for subname, subentry in entry.items(): - self.__compute_worker_patterns(name, subname, subentry) + worker = Worker(name, subname) + if isinstance(subentry, str): + self.__compute_worker_pattern(worker, subentry) + elif isinstance(subentry, list): + for pattern in subentry: + self.__compute_worker_pattern(worker, pattern) + else: + raise Exception("globals.workers entry '%s' is invalid" % worker) else: - raise Exception("globals.workers entries must contain lists of patterns") + raise Exception("globals.workers entry '%s' is invalid" % name) def parse(self, config_file): cf = open(config_file, 'r') -- cgit v1.2.3