chapeau/kepi/__main__.py

88 wiersze
1.7 KiB
Python

import sys
import os
import argparse
import logging
import json
import kepi.validate
logger = logging.getLogger('kepi')
logging.basicConfig(
level = logging.INFO,
stream = sys.stdout,
)
def daemonise(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
pid = os.fork()
if pid > 0:
sys.exit(0)
os.chdir('/')
os.umask(0)
os.setsid()
pid = os.fork()
if pid > 0:
sys.exit(0)
for f, mode, buffering in [
(sys.stdin, 'r', -1),
(sys.stdout, 'a+', -1),
(sys.stderr, 'a+', 0),
]:
if mode!='r':
f.flush()
i = open(f, mode, buffering)
os.dup2(i.fileno( ), f.fileno( ))
logger.info("Running at PID %s", os.getpid())
def load_message(name):
if name=='-':
f = sys.stdin
else:
f = open(name, 'r')
result = json.load(f)
if f!=sys.stdin:
f.close()
return result
def main():
parser = argparse.ArgumentParser(
description='send or receive ActivityPub messages')
parser.add_argument(
'--spool', '-S', default='/var/spool/kepi',
help='directory to store the messages')
subparsers = parser.add_subparsers(
dest = 'command',
required = True,
)
validate_parser = subparsers.add_parser('validate')
validate_parser.add_argument(
'input',
help=(
'the file to read ("-" for stdin)'
),
)
args = parser.parse_args()
if args.command=='validate':
message = load_message(args.input)
kepi.validate.validate(message)
else:
raise NotImplementedError()
if __name__=='__main__':
main()