diff --git a/Pipfile b/Pipfile index b548a5a..a5f0f01 100644 --- a/Pipfile +++ b/Pipfile @@ -32,6 +32,8 @@ flask-sqlalchemy = "*" pymysql = "*" cryptography = "*" deprecated = "*" +setuptools = "*" +flasgger = "*" [dev-packages] diff --git a/Pipfile.lock b/Pipfile.lock index bd5d540..5cec398 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "23773f4bbfa489415484a32b77751e98de78d5a91ad30ac56bea7f0fe86c2ef5" + "sha256": "9a94dd40b7d382b78f84e7ff24136ec2537b55efb11c31eeee80ab83a4bc8629" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,14 @@ ] }, "default": { + "attrs": { + "hashes": [ + "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4", + "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==21.4.0" + }, "certifi": { "hashes": [ "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872", @@ -161,6 +169,14 @@ "index": "pypi", "version": "==3.4.2" }, + "flasgger": { + "hashes": [ + "sha256:0603941cf4003626b4ee551ca87331f1d17b8eecce500ccf1a1f1d3a332fc94a", + "sha256:6ebea406b5beecd77e8da42550f380d4d05a6107bc90b69ce9e77aee7612e2d0" + ], + "index": "pypi", + "version": "==0.9.5" + }, "flask": { "hashes": [ "sha256:7b2fb8e934ddd50731893bdcdb00fc8c0315916f9fcd50d22c7cc1a95ab634e2", @@ -262,6 +278,14 @@ "index": "pypi", "version": "==3.0.3" }, + "jsonschema": { + "hashes": [ + "sha256:636694eb41b3535ed608fe04129f26542b59ed99808b4f688aa32dcf55317a83", + "sha256:77281a1f71684953ee8b3d488371b162419767973789272434bbc3f29d9c8823" + ], + "markers": "python_version >= '3.7'", + "version": "==4.4.0" + }, "lxml": { "hashes": [ "sha256:0607ff0988ad7e173e5ddf7bf55ee65534bd18a5461183c33e8e41a59e89edf4", @@ -403,13 +427,20 @@ "index": "pypi", "version": "==2.0.1" }, + "mistune": { + "hashes": [ + "sha256:6bab6c6abd711c4604206c7d8cad5cd48b28f072b4bb75797d74146ba393a049", + "sha256:6fc88c3cb49dba8b16687b41725e661cf85784c12e8974a29b9d336dd596c3a1" + ], + "version": "==2.0.2" + }, "pip": { "hashes": [ - "sha256:deaf32dcd9ab821e359cd8330786bcd077604b5c5730c0b096eda46f95c24a2d", - "sha256:fd11ba3d0fdb4c07fbc5ecbba0b1b719809420f25038f8ee3cd913d3faa3033a" + "sha256:c146f331f0805c77017c6bb9740cec4a49a0d4582d0c3cc8244b057f83eca359", + "sha256:f29d589df8c8ab99c060e68ad294c4a9ed896624f6368c5349d70aa581b333d0" ], - "markers": "python_version >= '3.6'", - "version": "==21.3.1" + "markers": "python_version >= '3.7'", + "version": "==22.0.3" }, "pipenv": { "hashes": [ @@ -442,6 +473,33 @@ "index": "pypi", "version": "==1.0.2" }, + "pyrsistent": { + "hashes": [ + "sha256:0e3e1fcc45199df76053026a51cc59ab2ea3fc7c094c6627e93b7b44cdae2c8c", + "sha256:1b34eedd6812bf4d33814fca1b66005805d3640ce53140ab8bbb1e2651b0d9bc", + "sha256:4ed6784ceac462a7d6fcb7e9b663e93b9a6fb373b7f43594f9ff68875788e01e", + "sha256:5d45866ececf4a5fff8742c25722da6d4c9e180daa7b405dc0a2a2790d668c26", + "sha256:636ce2dc235046ccd3d8c56a7ad54e99d5c1cd0ef07d9ae847306c91d11b5fec", + "sha256:6455fc599df93d1f60e1c5c4fe471499f08d190d57eca040c0ea182301321286", + "sha256:6bc66318fb7ee012071b2792024564973ecc80e9522842eb4e17743604b5e045", + "sha256:7bfe2388663fd18bd8ce7db2c91c7400bf3e1a9e8bd7d63bf7e77d39051b85ec", + "sha256:7ec335fc998faa4febe75cc5268a9eac0478b3f681602c1f27befaf2a1abe1d8", + "sha256:914474c9f1d93080338ace89cb2acee74f4f666fb0424896fcfb8d86058bf17c", + "sha256:b568f35ad53a7b07ed9b1b2bae09eb15cdd671a5ba5d2c66caee40dbf91c68ca", + "sha256:cdfd2c361b8a8e5d9499b9082b501c452ade8bbf42aef97ea04854f4a3f43b22", + "sha256:d1b96547410f76078eaf66d282ddca2e4baae8964364abb4f4dcdde855cd123a", + "sha256:d4d61f8b993a7255ba714df3aca52700f8125289f84f704cf80916517c46eb96", + "sha256:d7a096646eab884bf8bed965bad63ea327e0d0c38989fc83c5ea7b8a87037bfc", + "sha256:df46c854f490f81210870e509818b729db4488e1f30f2a1ce1698b2295a878d1", + "sha256:e24a828f57e0c337c8d8bb9f6b12f09dfdf0273da25fda9e314f0b684b415a07", + "sha256:e4f3149fd5eb9b285d6bfb54d2e5173f6a116fe19172686797c056672689daf6", + "sha256:e92a52c166426efbe0d1ec1332ee9119b6d32fc1f0bbfd55d5c1088070e7fc1b", + "sha256:f87cc2863ef33c709e237d4b5f4502a62a00fab450c9e020892e8e2ede5847f5", + "sha256:fd8da6d0124efa2f67d86fa70c851022f87c98e205f0594e1fae044e7119a5a6" + ], + "markers": "python_version >= '3.7'", + "version": "==0.18.1" + }, "python-dateutil": { "hashes": [ "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86", @@ -450,6 +508,45 @@ "index": "pypi", "version": "==2.8.2" }, + "pyyaml": { + "hashes": [ + "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293", + "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b", + "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57", + "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b", + "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4", + "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07", + "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba", + "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9", + "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287", + "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513", + "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0", + "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0", + "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92", + "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f", + "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2", + "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc", + "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c", + "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86", + "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4", + "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c", + "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34", + "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b", + "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c", + "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb", + "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737", + "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3", + "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d", + "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53", + "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78", + "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803", + "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a", + "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174", + "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5" + ], + "markers": "python_version >= '3.6'", + "version": "==6.0" + }, "requests": { "hashes": [ "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61", @@ -460,11 +557,11 @@ }, "setuptools": { "hashes": [ - "sha256:2404879cda71495fc4d5cbc445ed52fdaddf352b36e40be8dcc63147cb4edabe", - "sha256:68eb94073fc486091447fcb0501efd6560a0e5a1839ba249e5ff3c4c93f05f90" + "sha256:07e97e2f1e5607d240454e98c75c7004560ac8417ca5ae1dbaa50811cb6cc95c", + "sha256:23aad87cc27f4ae704079618c1d117a71bd43d41e355f0698c35f6b1c796d26c" ], - "markers": "python_version >= '3.7'", - "version": "==60.5.0" + "index": "pypi", + "version": "==60.8.1" }, "six": { "hashes": [ diff --git a/app.py b/app.py index a7f1246..1a18c5c 100644 --- a/app.py +++ b/app.py @@ -3,11 +3,12 @@ import config import utils.response as response import service.faker_data as faker from base import db -from model import SexEnum +from flasgger import Swagger, swag_from app = Flask(__name__) config.init_config(app) db.init_app(app) +swagger = Swagger(app) @app.route('/') @@ -17,43 +18,138 @@ def hello_world(): @app.route("/faker/railway/") def faker_railway(number): + """Faker Railway Datas + --- + parameters: + - name: number + in: path + type: number + required: true + description: the number of to be generated + responses: + 200: + description: A list of railway + """ return response.succ(faker.faker_railways(int(number))) @app.route("/faker/hotel/") def faker_hotel(number): + """Faker Hotel Datas + --- + parameters: + - name: number + in: path + type: number + required: true + description: the number of to be generated + responses: + 200: + description: A list of hotel + """ return response.succ(faker.faker_hotels(int(number))) @app.route("/faker/contacts//") def faker_contacts(num_hotel, num_railway): + """Faker Contacts Datas + --- + parameters: + - name: num_hotel + in: path + type: number + required: true + description: the number of hotel to be generated + - name: num_railway + in: path + type: number + required: true + description: the number of railway to be generated + responses: + 200: + description: the contacts and patient + """ return response.succ(faker.faker_contacts(int(num_hotel), int(num_railway))) @app.route("/query/patient") def query_patient(): + """Query Patients + --- + responses: + 200: + description: A list of patients + """ return response.succ(faker.query_patients()) @app.route("/query/contacts/hotel/") def query_contacts_hotel(identification): + """Query Hotel Contacts by Patient's Identification + --- + parameters: + - name: identification + in: path + type: number + required: true + description: the identification of patient + responses: + 200: + description: A list of contacts + """ return response.succ(faker.query_contacts_hotel(identification)) @app.route("/query/contacts/railway/") def query_contacts_railway(identification): + """Query Railway Contacts by Patient's Identification + --- + parameters: + - name: identification + in: path + type: number + required: true + description: the identification of patient + responses: + 200: + description: A list of contacts + """ return response.succ(faker.query_contacts_railway(identification)) @app.route("/query/contacts/classify/") def query_contacts_classify(identification): + """Query Classified Hotel and Railway Contacts by Patient's Identification + --- + parameters: + - name: identification + in: path + type: number + required: true + description: the identification of patient + responses: + 200: + description: A list of contacts + """ return response.succ(faker.query_contacts_classify(identification)) @app.route("/query/contacts/") def query_contacts(identification): + """Query All Contacts by Patient's Identification + --- + parameters: + - name: identification + in: path + type: number + required: true + description: the identification of patient + responses: + 200: + description: A list of contacts + """ return response.succ(faker.query_contacts(identification)) if __name__ == '__main__': - app.run() + app.run(debug=True) diff --git a/config.py b/config.py index 85352ec..d0d06ae 100644 --- a/config.py +++ b/config.py @@ -10,8 +10,16 @@ SQLALCHEMY_DATABASE_URI = f'{DIALECT}+{DRIVER}://{USERNAME}:{PASSWORD}@{HOST}:{P SQLALCHEMY_TRACK_MODIFICATIONS = False SQLALCHEMY_ECHO = True +SWAGGER_CONFIG = { + "title": "nCovTrack-Faker", + "description": "API for nCovTrack-Faker", + 'uiversion': 3, + "version": "0.0.1" +} + def init_config(app): app.config["SQLALCHEMY_DATABASE_URI"] = SQLALCHEMY_DATABASE_URI app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False app.config["SQLALCHEMY_ECHO"] = True + app.config["SWAGGER"] = SWAGGER_CONFIG