aboutsummaryrefslogtreecommitdiffstats
path: root/src/blimp/bl_process.py
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)