kopia lustrzana https://gitlab.com/marnanel/chapeau
88 wiersze
1.7 KiB
Python
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()
|