2
2
# licensed under the GNU Affero General Public License version 3 (see
11
7
from config import PROOF_IN_QUEUE
12
8
from config import PROOF_OUT_QUEUE
13
9
from utils import get_queues
10
from worker import proof_charms
15
12
log = logging.getLogger("charm.proof")
18
@contextlib.contextmanager
19
def get_proof_lib(new_path):
20
if new_path not in sys.path:
21
sys.path.append(new_path)
23
import lib.proof as prooflib
28
if new_path in sys.path:
29
sys.path.remove(new_path)
32
def proof_charm(charm, prooflib):
34
lint, exit_code = prooflib.run(charm['branch_dir'])
38
level, msg = line.split(':', 1)
39
if level == "W" and 'name' in msg:
41
proof.setdefault(level.lower(), []).append(msg)
42
charm['proof'] = proof
45
def run(in_queue, out_queue):
46
if not os.path.isdir(config.CHARM_PROOF_PATH):
47
err_msg = ("proof error before processing began: could not find "
49
log.exception(err_msg)
50
log.exception("CHARM_PROOF_PATH: %s", config.CHARM_PROOF_PATH)
51
log.exception("proof aborted.")
53
with get_proof_lib(config.CHARM_PROOF_PATH) as prooflib:
55
err_msg = ("proof error before processing began: could not "
56
"import charm proof lib.")
57
log.exception(err_msg)
58
log.exception("CHARM_PROOF_PATH: %s", config.CHARM_PROOF_PATH)
59
log.exception("proof aborted.")
62
item = in_queue.next()
66
charm_data = item.payload
67
log.info("Proofing charm %s", charm_data["branch_spec"])
68
proof_charm(charm_data, prooflib)
69
except Exception as e:
70
err = "proof error on %s: %s" % (
71
charm_data['branch_spec'], str(e))
72
charm_data['proof'] = {'e': [err]}
75
# Remove the job from the input queue.
77
out_queue.put(charm_data)
80
15
if __name__ == '__main__':
81
16
logging.basicConfig(
82
17
level=logging.WARNING,
83
18
format="%(asctime)s: %(name)s@%(levelname)s: %(message)s")
84
19
in_queue, out_queue = get_queues(PROOF_IN_QUEUE, PROOF_OUT_QUEUE)
85
run(in_queue, out_queue)
20
proof_charms(in_queue, out_queue)