-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.py
94 lines (63 loc) · 2.56 KB
/
app.py
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import logging.config
import os
from flask import Flask, Blueprint
#from rest_api_demo.database import db
from os.path import dirname, realpath, sep, pardir
import sys
import settings
from app.restplus import api
from app.node import Node
from app.endpoints import ns_operations
import requests
app = Flask(__name__)
log = logging.getLogger(__name__)
def configure_app(flask_app, port):
flask_app.config['SERVER_NAME'] = "{}:{}".format(settings.FLASK_SERVER_NAME, port)
flask_app.config['SWAGGER_UI_DOC_EXPANSION'] = settings.RESTPLUS_SWAGGER_UI_DOC_EXPANSION
flask_app.config['RESTPLUS_VALIDATE'] = settings.RESTPLUS_VALIDATE
flask_app.config['RESTPLUS_MASK_SWAGGER'] = settings.RESTPLUS_MASK_SWAGGER
flask_app.config['ERROR_404_HELP'] = settings.RESTPLUS_ERROR_404_HELP
def initialize_app(flask_app, port, name, peers, honest):
configure_app(flask_app, port)
blueprint = Blueprint('api', __name__, url_prefix='/api')
api.init_app(blueprint)
api.add_namespace(ns_operations)
flask_app.register_blueprint(blueprint)
# Logging
if not os.path.exists('logs'):
os.mkdir('logs')
logging.basicConfig(filename='logs/log_node_{}.log'.format(port),level=logging.DEBUG, filemode='w', format='%(asctime)s %(levelname)-8s %(message)s')
## Initialize client
Node()
Node.instance.port = port
#print(Node.instance.port)
Node.instance.name = name
Node.instance.honest = honest
for peer in peers.split(','):
Node.instance.registerPeer(int(peer))
logging.info("Created client {} {} {}".format(port, name, honest))
#notify peers of own existence
#print (Node.instance.peers)
for peer in Node.instance.peers:
if peer != port:
url = "http://localhost:{}/api/registerPeer/?peer={}".format(peer, port)
logging.info("registering myself to peer: {}".format(url))
requests.post(url)
api.title = "{} - {}".format(name, api.title)
def help():
print("usage: [port] [name] [peer1,peer2[,...]] [honest|dishonest|h|d]")
exit()
def main():
if sys.argv[1] == "-h":
help()
if len(sys.argv) != 5 or sys.argv[4] not in ['h','d','honest','dishonest']:
help()
port = int(sys.argv[1])
name = sys.argv[2]
peers = sys.argv[3]
honest = (sys.argv[4] in ['h','honest'])
initialize_app(app, port, name, peers, honest)
log.info('>>>>> Starting development server at http://{}:{}/api/ <<<<<'.format(app.config['SERVER_NAME'], port))
app.run(debug=settings.FLASK_DEBUG, port=port)
if __name__ == "__main__":
main()