From e99ccc475b036ddf319025a6c9ff33fcfae42eba Mon Sep 17 00:00:00 2001 From: bracha Vekselman Date: Sun, 21 May 2023 14:55:03 +0300 Subject: [PATCH] flask-exercise --- .env | 0 .gitignore | 7 --- __pycache__/app.cpython-311.pyc | Bin 0 -> 6678 bytes .../conftest.cpython-311-pytest-7.3.1.pyc | Bin 0 -> 665 bytes .../test_app.cpython-311-pytest-7.3.1.pyc | Bin 0 -> 14992 bytes app.py | 59 ++++++++++++++++-- conftest.py | 2 +- mockdb/__pycache__/dummy_data.cpython-311.pyc | Bin 0 -> 498 bytes .../mockdb_interface.cpython-311.pyc | Bin 0 -> 2246 bytes mockdb/dummy_data.py | 9 +-- mockdb/mockdb_interface.py | 1 - test_app.py | 34 ++++++++++ 12 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 .env delete mode 100644 .gitignore create mode 100644 __pycache__/app.cpython-311.pyc create mode 100644 __pycache__/conftest.cpython-311-pytest-7.3.1.pyc create mode 100644 __pycache__/test_app.cpython-311-pytest-7.3.1.pyc create mode 100644 mockdb/__pycache__/dummy_data.cpython-311.pyc create mode 100644 mockdb/__pycache__/mockdb_interface.cpython-311.pyc diff --git a/.env b/.env new file mode 100644 index 0000000..e69de29 diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 7ac0cc2..0000000 --- a/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -*.pyc -.vscode/ -venv/ -__pycache__ -.DS_Store/ -migrations/ -.pytest_cache \ No newline at end of file diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..800fd18279288ccd4a089c0014439e8f117585a4 GIT binary patch literal 6678 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 literal 0 HcmV?d00001 diff --git a/app.py b/app.py index 314e633..edba9eb 100644 --- a/app.py +++ b/app.py @@ -1,5 +1,5 @@ from typing import Tuple - +import json from flask import Flask, jsonify, request, Response import mockdb.mockdb_interface as db @@ -18,7 +18,6 @@ def create_response( IMPORTANT: data must be a dictionary where: - the key is the name of the type of data - the value is the data itself - :param data optional data :param status optional status code, defaults to 200 :param message optional message @@ -39,8 +38,11 @@ def create_response( """ ~~~~~~~~~~~~ API ~~~~~~~~~~~~ """ - - +def write_data(): + new_data = json.dumps({"users" :db.get("users") }) + with open("mockdb/dummy_data.py" ,'w') as f: + f.write( "initial_db_state = " + new_data ) + @app.route("/") def hello_world(): return create_response({"content": "hello world!"}) @@ -51,9 +53,56 @@ def mirror(name): data = {"name": name} return create_response(data) - # TODO: Implement the rest of the API here! +@app.route("/users") +def get_users(): + data = db.get('users') + team = request.args.get('team') + if team == None: + return create_response({"users":data}) + data_team = (list(filter(lambda x:x["team"]==team,data))) + return create_response({"users":data_team}) + +@app.route("/users/") +def get_users_by_id(id): + data = db.getById("users",int(id)) + if data == None: + return create_response({} , 404 , "User does not exist" ) + return create_response({"user":data}) + +@app.route("/users", methods=['POST']) +def create_user(): + data = request.get_json() + required_fildes = ["name","age","team"] + if not all(filed in data for filed in required_fildes): + return create_response({"None":None} , 422 ,"Missing data The object should contain: ID, name and team" ) + new_user={ + "name":data["name"], "age": data["age"], "team": data["team"] + } + res = db.create("users",new_user) + write_data() + return create_response({"users":res} , 201 ) + + +@app.route("/users/" , methods=['PUT'] ) +def update_users(id): + data = request.get_json() + update_user = db.updateById("users", int(id) , data) + if update_user == None: + return create_response({"users":data} ,404 ,"" ) + write_data() + return create_response({"users":update_user}) + +@app.route("/users/" , methods=['DELETE'] ) +def delete_user(id): + data = db.getById("users",int(id)) + if data == None: + return create_response({} , 404 , "User does not exist" ) + db.deleteById("users", int(id) ) + write_data() + return create_response({} , 200 ,'') + """ ~~~~~~~~~~~~ END API ~~~~~~~~~~~~ """ diff --git a/conftest.py b/conftest.py index e919768..0087b5d 100644 --- a/conftest.py +++ b/conftest.py @@ -1,7 +1,7 @@ import pytest -@pytest.fixture("session") +@pytest.fixture(scope = "session") def client(): from app import app diff --git a/mockdb/__pycache__/dummy_data.cpython-311.pyc b/mockdb/__pycache__/dummy_data.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eefa7b637eae2ed9fe78aa3d2c9e05d7ffdc49ef GIT binary patch literal 498 zcmYk2&r1S96vt<0W>YK6YN0~#7UZFX&LL>f4@gl8D?7;On`Cu&wb@k?ivEl)2Hm1V z(6K+EqsQ25r@ckpJTphnXH^A~OpB$TZV1(-M zB%h`}Ho>P3v$;=Lll#=;%npb$=oKbqn+y!HqqjAluW&QXeOAuG%YDxLE%&o-G8nF#1* zUO*r70s5IAFu;Tv5)HgULs4qWndOX;QL^*w&b)3YhMG!K?!y7}=z&@v2G}EpGs@8< zgKiHj(iB(=G_62eG&b_8j>aOdV`EA_Kemun^ra8gbyZ7ebagDZl3rqW8n5}xvY~1V zN?MKOH*C+MYG?uY)DKnf0|rg2oRNHrjHC0$ret zZU+op(I_T4gcT?5sw6ptnUm%;(0K^ZXgCtFG(7t2j`*Uwtgh#^ z#O4ria(!c(#p2nOw35{mF?WuC_dcvYdr4jbRj2XM?*b3`vh;%)wu89Ed+p|1u4| zvOH0dC!Y3|r9?%7m?gNoe~%e5-ySiD7WqHXYLDfXUqbtc(g;54`QwK zM)4H-3;}PVvufXvHC0I7`{ISz zRhZpQJr@U`iG%y^mc`MEIC?6MR;93&axP43aBv^kuVWT!zc3~S446C@EQa0^7?~la zaNx=uK6FdF;FIKb@N2NJC2o05k~Q2XY!S@e6=E9tr5X{iNlUqpoMEysjHYQOco}qZwwTY#n8^w zSyk$>ZvInzE|)2AhzZk8k}X{QSCTaF?ly`^kSFB(VxmM>TqGYr<370JGLbLJ1kxlA zHl|6COlXE^$OspV7KBz?V$?3d$mV6HW>rJIkQH5>yp3Ot0-S+R`s2>C|7l5iB0gSx z8a~dIaz&*CSjusRK$rNR!{wpjmK||6vS8=AGc5{}5nS*d09da!t%Hw8y$7=o1|JSW zv)muA^vA#dyfAw&Wx>z!(qV_3zrGk-%jGua;ld~yp4}F|)mN4s_k1ImZ@JL;1>s&D zJ}`GXDI*Zit+2JMn$VD544#geujZkYR!Qu%{izbk;=eznH?2U;N9j