blob: 6cd9bb488020b889027c669ae05a4bd9a5a3a9bd (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# -*- coding: utf-8 -*-
import sys
from ruamel.yaml import YAML, scalarstring
from blimp.misc import local_file_present
class ProcessBlocklist:
def __init__(self):
pass
@classmethod
def process(self, blacklist, outfile, dryrun: bool):
"""
function to build and compare the local yaml file to the remote file
if the remote file is different, the local file gets overwritten
"""
try:
# load local blacklist outfile
with open(outfile, "r", encoding="utf-8") as local_file:
local_blacklist = local_file.read()
except (TypeError, FileNotFoundError):
# no local copy use empty one instead
local_blacklist = YAML(typ="safe")
# blacklist frame
remote_file = {"acl": {"spamblacklist": {"server": []}}}
# build the blacklist with the given frame to compare to local blacklist
for entry in blacklist.split():
entry = scalarstring.DoubleQuotedScalarString(entry)
remote_file["acl"]["spamblacklist"]["server"].append(entry)
yml = YAML()
yml.indent(offset=2)
yml.default_flow_style = False
# if dry-run true print expected content
if dryrun:
yml.dump(remote_file, sys.stdout)
return
if local_blacklist == remote_file:
return
if outfile is None:
print("no outfile assigned", file=sys.stderr)
sys.exit(2)
# proceed to update the defined outfile
with open(outfile, "w", encoding="utf-8") as new_local_file:
yml.dump(remote_file, new_local_file)
|