import re
s = """
### ?. Login Module
# REF: An exception route module. Don't use it as a reference guide for development!
from flask import Blueprint, request
from libraries.python.util import executeCommand as ec, TOKEN as TOK, checkUnsetMode as unset
from flask import request, jsonify
from libraries.python.util import writeDebugMessages as debug, showJson
from libraries.python import validation_types
from libraries.python.validate import dataValidation as validate
__all__ = ['login_module']
login_module = Blueprint('login_module', __name__)
#region Login, Logout, etc
# TODO: Current APIs of the login section need to be changed.
# Currently it does not communicate with AuthServer to verify usernames and passwords.
@login_module.route('/user/login', methods=['POST'])
def login():
debug('\033[0;35m*********************************************************\033[0m', True)
import inspect
showJson(request, inspect.stack()[0][3], True)
data = request.json
username = data['username']
password = data['password']
result = {'user': username,'code': 60204, 'message':"User and/or password is incorrect."}
if username == "admin" and password == "amnafzar":
result = {'code': 0, 'data':{'token':"admin-token"}}
elif username == "editor" :
result = {'code': 0, 'data':{'token':"editor-token"}}
return jsonify(result)
@login_module.route('/user/info', methods=['GET'])
def user_info():
debug('\033[0;35m*********************************************************\033[0m', True)
import inspect
showJson(request, inspect.stack()[0][3], True)
data = request.args
token = data['token']
result = {'code': 50008, 'message':"Login failed, unable to get user details"}
if token == "admin-token" :
result = {'code': 0, 'data':{'roles':["admin"],'introduction':"I am a super administrator",
'avatar':"RnRR.gif",'name': "Super Admin"}}
elif token == "editor-token" :
result = {'code': 0, 'data':{'roles':["editor"],'introduction':"I am an editor",
'avatar':"RnRR.gif",'name': "Normal Editor"}}
return jsonify(result)
@login_module.route('/user/logout', methods=['POST'])
def logout():
debug('\033[0;35m*********************************************************\033[0m', True)
import inspect
showJson(request, inspect.stack()[0][3], True)
result = {'code': 0, 'data':"success"}
return jsonify(result)
#endregion
"""
l = re.compile("^@.*route.*\ndef\s*.*\n", re.MULTILINE).split(s)
print l[1]
aW1wb3J0IHJlCnMgPSAiIiIKIyMjID8uIExvZ2luIE1vZHVsZQojIFJFRjogQW4gZXhjZXB0aW9uIHJvdXRlIG1vZHVsZS4gRG9uJ3QgdXNlIGl0IGFzIGEgcmVmZXJlbmNlIGd1aWRlIGZvciBkZXZlbG9wbWVudCEKZnJvbSBmbGFzayBpbXBvcnQgQmx1ZXByaW50LCByZXF1ZXN0CmZyb20gbGlicmFyaWVzLnB5dGhvbi51dGlsIGltcG9ydCBleGVjdXRlQ29tbWFuZCBhcyBlYywgVE9LRU4gYXMgVE9LLCBjaGVja1Vuc2V0TW9kZSBhcyB1bnNldApmcm9tIGZsYXNrIGltcG9ydCByZXF1ZXN0LCBqc29uaWZ5CmZyb20gbGlicmFyaWVzLnB5dGhvbi51dGlsIGltcG9ydCB3cml0ZURlYnVnTWVzc2FnZXMgYXMgZGVidWcsIHNob3dKc29uCmZyb20gbGlicmFyaWVzLnB5dGhvbiBpbXBvcnQgdmFsaWRhdGlvbl90eXBlcwpmcm9tIGxpYnJhcmllcy5weXRob24udmFsaWRhdGUgaW1wb3J0IGRhdGFWYWxpZGF0aW9uIGFzIHZhbGlkYXRlCgpfX2FsbF9fID0gWydsb2dpbl9tb2R1bGUnXQpsb2dpbl9tb2R1bGUgPSBCbHVlcHJpbnQoJ2xvZ2luX21vZHVsZScsIF9fbmFtZV9fKQoKCiNyZWdpb24gTG9naW4sIExvZ291dCwgZXRjCiMgVE9ETzogQ3VycmVudCBBUElzIG9mIHRoZSBsb2dpbiBzZWN0aW9uIG5lZWQgdG8gYmUgY2hhbmdlZC4KIyBDdXJyZW50bHkgaXQgZG9lcyBub3QgY29tbXVuaWNhdGUgd2l0aCBBdXRoU2VydmVyIHRvIHZlcmlmeSB1c2VybmFtZXMgYW5kIHBhc3N3b3Jkcy4KQGxvZ2luX21vZHVsZS5yb3V0ZSgnL3VzZXIvbG9naW4nLCBtZXRob2RzPVsnUE9TVCddKQpkZWYgbG9naW4oKToKICAgIGRlYnVnKCdcMDMzWzA7MzVtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXDAzM1swbScsIFRydWUpCiAgICBpbXBvcnQgaW5zcGVjdAogICAgc2hvd0pzb24ocmVxdWVzdCwgaW5zcGVjdC5zdGFjaygpWzBdWzNdLCBUcnVlKQogICAgZGF0YSA9IHJlcXVlc3QuanNvbgogICAgdXNlcm5hbWUgPSBkYXRhWyd1c2VybmFtZSddCiAgICBwYXNzd29yZCA9IGRhdGFbJ3Bhc3N3b3JkJ10KICAgIHJlc3VsdCA9IHsndXNlcic6IHVzZXJuYW1lLCdjb2RlJzogNjAyMDQsICdtZXNzYWdlJzoiVXNlciBhbmQvb3IgcGFzc3dvcmQgaXMgaW5jb3JyZWN0LiJ9CiAgICBpZiB1c2VybmFtZSAgPT0gImFkbWluIiBhbmQgcGFzc3dvcmQgPT0gImFtbmFmemFyIjoKICAgICAgICByZXN1bHQgPSB7J2NvZGUnOiAwLCAnZGF0YSc6eyd0b2tlbic6ImFkbWluLXRva2VuIn19CiAgICBlbGlmIHVzZXJuYW1lID09ICJlZGl0b3IiIDoKICAgICAgICByZXN1bHQgPSB7J2NvZGUnOiAwLCAnZGF0YSc6eyd0b2tlbic6ImVkaXRvci10b2tlbiJ9fQogICAgcmV0dXJuIGpzb25pZnkocmVzdWx0KQoKCkBsb2dpbl9tb2R1bGUucm91dGUoJy91c2VyL2luZm8nLCBtZXRob2RzPVsnR0VUJ10pCmRlZiB1c2VyX2luZm8oKToKICAgIGRlYnVnKCdcMDMzWzA7MzVtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXDAzM1swbScsIFRydWUpCiAgICBpbXBvcnQgaW5zcGVjdAogICAgc2hvd0pzb24ocmVxdWVzdCwgaW5zcGVjdC5zdGFjaygpWzBdWzNdLCBUcnVlKQogICAgZGF0YSA9IHJlcXVlc3QuYXJncwogICAgdG9rZW4gPSBkYXRhWyd0b2tlbiddCiAgICByZXN1bHQgPSB7J2NvZGUnOiA1MDAwOCwgJ21lc3NhZ2UnOiJMb2dpbiBmYWlsZWQsIHVuYWJsZSB0byBnZXQgdXNlciBkZXRhaWxzIn0KICAgIGlmIHRva2VuID09ICJhZG1pbi10b2tlbiIgOgogICAgICAgIHJlc3VsdCA9IHsnY29kZSc6IDAsICdkYXRhJzp7J3JvbGVzJzpbImFkbWluIl0sJ2ludHJvZHVjdGlvbic6IkkgYW0gYSBzdXBlciBhZG1pbmlzdHJhdG9yIiwKICAgICAgICAnYXZhdGFyJzoiUm5SUi5naWYiLCduYW1lJzogIlN1cGVyIEFkbWluIn19CiAgICBlbGlmIHRva2VuID09ICJlZGl0b3ItdG9rZW4iIDoKICAgICAgICByZXN1bHQgPSB7J2NvZGUnOiAwLCAnZGF0YSc6eydyb2xlcyc6WyJlZGl0b3IiXSwnaW50cm9kdWN0aW9uJzoiSSBhbSBhbiBlZGl0b3IiLAogICAgICAgICdhdmF0YXInOiJSblJSLmdpZiIsJ25hbWUnOiAiTm9ybWFsIEVkaXRvciJ9fQogICAgcmV0dXJuIGpzb25pZnkocmVzdWx0KQoKCkBsb2dpbl9tb2R1bGUucm91dGUoJy91c2VyL2xvZ291dCcsIG1ldGhvZHM9WydQT1NUJ10pCmRlZiBsb2dvdXQoKToKICAgIGRlYnVnKCdcMDMzWzA7MzVtKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXDAzM1swbScsIFRydWUpCiAgICBpbXBvcnQgaW5zcGVjdAogICAgc2hvd0pzb24ocmVxdWVzdCwgaW5zcGVjdC5zdGFjaygpWzBdWzNdLCBUcnVlKQogICAgcmVzdWx0ID0geydjb2RlJzogMCwgJ2RhdGEnOiJzdWNjZXNzIn0KICAgIHJldHVybiBqc29uaWZ5KHJlc3VsdCkKI2VuZHJlZ2lvbgoiIiIKbCA9IHJlLmNvbXBpbGUoIl5ALipyb3V0ZS4qXG5kZWZccyouKlxuIiwgcmUuTVVMVElMSU5FKS5zcGxpdChzKQpwcmludCBsWzFd