in pylib/vcsreplicator/vcsreplicator/config.py [0:0]
def __init__(self, filename=None):
self.c = RawConfigParser()
if filename:
if not os.path.exists(filename):
raise ValueError("config file does not exist: %s" % filename)
self.c.read(filename)
if self.c.has_section("path_rewrites"):
self._path_rewrites = self.c.items("path_rewrites")
else:
self._path_rewrites = []
if self.c.has_section("pull_url_rewrites"):
self._pull_url_rewrites = self.c.items("pull_url_rewrites")
else:
self._pull_url_rewrites = []
if self.c.has_section("public_url_rewrites"):
self._public_url_rewrites = self.c.items("public_url_rewrites")
else:
self._public_url_rewrites = []
if self.c.has_section("replicationpathrewrites"):
self._replication_path_rewrites = self.c.items("replicationpathrewrites")
else:
self._replication_path_rewrites = []
if self.c.has_section("replicationrules"):
re_includes, re_excludes = [], []
self.path_includes, self.path_excludes = {}, {}
for key, value in self.c.items("replicationrules"):
(behaviour, name), (ruletype, rule) = key.split("."), value.split(":")
if ruletype == "re":
# Decide which list is correct and append to it
restore = re_includes if behaviour == "include" else re_excludes
restore.append((name, rule))
elif ruletype == "path":
exstore = (
self.path_includes
if behaviour == "include"
else self.path_excludes
)
exstore[rule] = name
else:
raise Exception("bad ruletype %s" % ruletype)
# Create the in/out rules as an `or` of all the rules
includes_string = "|".join(
create_namedgroup(name, rule) for name, rule in re_includes
)
excludes_string = "|".join(
create_namedgroup(name, rule) for name, rule in re_excludes
)
self.include_regex = (
re.compile(includes_string) if includes_string else None
)
self.exclude_regex = (
re.compile(excludes_string) if excludes_string else None
)
self.has_filters = bool(
self.path_includes
or self.path_excludes
or self.include_regex
or self.exclude_regex
)
else:
self.has_filters = False