def main():
"""
Runtime management of the CTF API
"""
parser = ArgumentParser(description="CTF API configuration")
parser.add_argument("-v", "--verbose", action="count", help="increase verbosity", default=0)
parser.add_argument("-p", "--port", action="store", help="port the server should listen on.", type=int, default=8000)
parser.add_argument("-l", "--listen", action="store", help="host the server should listen on.", default="0.0.0.0")
parser.add_argument("-d", "--debug", action="store_true", help="run the server in debug mode.", default=False)
parser.add_argument("-k", "--debug-key", action="store", help="debug key for problem grading; only applies if debug is enabled", type=str, default=None)
args = parser.parse_args()
if args.debug:
api.problem.DEBUG_KEY = args.debug_key
keyword_args, _ = object_from_args(args)
api.app.config_app().run(host=args.listen, port=args.port, debug=args.debug)
python类app()的实例源码
def main():
"""
Runtime management of the CTF API
"""
parser = ArgumentParser(description="CTF API configuration")
parser.add_argument("-v", "--verbose", action="count", help="increase verbosity", default=0)
parser.add_argument("-p", "--port", action="store", help="port the server should listen on.", type=int, default=8000)
parser.add_argument("-l", "--listen", action="store", help="host the server should listen on.", default="0.0.0.0")
parser.add_argument("-d", "--debug", action="store_true", help="run the server in debug mode.", default=False)
parser.add_argument("-k", "--debug-key", action="store", help="debug key for problem grading; only applies if debug is enabled", type=str, default=None)
args = parser.parse_args()
if args.debug:
api.problem.DEBUG_KEY = args.debug_key
keyword_args, _ = object_from_args(args)
api.app.config_app().run(host=args.listen, port=args.port, debug=args.debug)
def main():
"""
Runtime management of the picoCTF API
"""
parser = ArgumentParser(description="picoCTF API configuration")
parser.add_argument("-v", "--verbose", action="count", help="increase verbosity", default=0)
parser.add_argument("-p", "--port", action="store", help="port the server should listen on.", type=int, default=8000)
parser.add_argument("-l", "--listen", action="store", help="host the server should listen on.", default="0.0.0.0")
parser.add_argument("-d", "--debug", action="store_true", help="run the server in debug mode.", default=False)
args = parser.parse_args()
keyword_args, _ = object_from_args(args)
api.app.config_app().run(host=args.listen, port=args.port, debug=args.debug)
def list_routes():
import urllib.parse
output = []
for rule in app.url_map.iter_rules():
options = {}
for arg in rule.arguments:
options[arg] = "[{0}]".format(arg)
methods = ",".join(rule.methods)
url = url_for(rule.endpoint, **options)
line = urllib.parse.unquote("{:50s} {:20s} {}".format(
rule.endpoint,
methods,
url))
output.append(line)
for line in sorted(output):
print(line)
def test_should_be_able_to_join_game(self, pusher):
app.post('/api/create', params={'board': json.dumps(FIXTURES.SETUP)})
game = models.Game.query().get()
app.post('/api/join', params={
'board': json.dumps(FIXTURES.SETUP),
'join_hash': game.join_hash
})
game = models.Game.query().get()
current_state_of_game = copy.deepcopy(FIXTURES.DEFAULT_GAME)
self.assertEqual(game.get_board(), current_state_of_game)
def test_should_be_able_to_move(self, pusher):
app.post('/api/create', params={'board': json.dumps(FIXTURES.SETUP)})
game = models.Game.query().get()
app.post('/api/join', params={
'board': json.dumps(FIXTURES.SETUP),
'join_hash': game.join_hash
})
app.post('/api/move', params={
'player_hash': game.red_hash,
'side': 0,
'from': json.dumps({'x': 5, 'y': 6}),
'to': json.dumps({'x': 5, 'y': 5})
})
game = models.Game.query().get()
current_state_of_game = copy.deepcopy(FIXTURES.DEFAULT_GAME)
current_state_of_game[5][5] = {'side': 0, 'rank': '4'}
current_state_of_game[6][5] = 0
self.assertEqual(game.get_board(), current_state_of_game)
# Blue's turn
self.assertEqual(game.turn, 1)
def test_should_be_able_to_attack_and_draw(self, pusher):
app.post('/api/create', params={'board': json.dumps(FIXTURES.SETUP)})
game = models.Game.query().get()
app.post('/api/join', params={
'board': json.dumps(FIXTURES.SETUP),
'join_hash': game.join_hash
})
app.post('/api/move', params={
'player_hash': game.red_hash,
'side': 0,
'from': json.dumps({'x': 5, 'y': 6}),
'to': json.dumps({'x': 5, 'y': 5})
})
app.post('/api/move', params={
'player_hash': game.blue_hash,
'side': 1,
'from': json.dumps({'x': 4, 'y': 6}),
'to': json.dumps({'x': 4, 'y': 5})
})
app.post('/api/move', params={
'player_hash': game.red_hash,
'side': 0,
'from': json.dumps({'x': 5, 'y': 5}),
'to': json.dumps({'x': 5, 'y': 4})
})
game = models.Game.query().get()
current_state_of_game = copy.deepcopy(FIXTURES.DEFAULT_GAME)
# These pieces should have been destroyed
current_state_of_game[3][5] = 0
current_state_of_game[6][5] = 0
self.assertEqual(game.get_board(), current_state_of_game)
self.assertEqual(game.get_last_move(), {
'type': 'draw',
'from': {
'piece': {'side': 0, 'rank': '4'},
'position': {'x': 5, 'y': 5}
},
'to': {
'piece': {'side': 1, 'rank': '4'},
'position': {'x': 5, 'y': 4}
}
})
# Blue's turn
self.assertEqual(game.turn, 1)