From 6ac27789b80ec14eedd1cc2156712dc85c7d4075 Mon Sep 17 00:00:00 2001 From: GonzaloDeLaIglesia Date: Fri, 23 May 2025 14:40:05 -0300 Subject: [PATCH 1/3] Implementation of ML ingestion system for elevator resting floor --- .../app_tests.cpython-311-pytest-8.3.3.pyc | Bin 0 -> 4626 bytes chatgpt/__pycache__/main.cpython-311.pyc | Bin 0 -> 3276 bytes chatgpt/instance/elevator.db | 0 chatgpt/main.py | 1 - .../app_test.cpython-311-pytest-8.3.3.pyc | Bin 0 -> 10007 bytes solution/__pycache__/main.cpython-311.pyc | Bin 0 -> 346 bytes solution/__pycache__/models.cpython-311.pyc | Bin 0 -> 1539 bytes solution/__pycache__/views.cpython-311.pyc | Bin 0 -> 1663 bytes solution/app/__init__.py | 17 ++++++ .../app/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 576 bytes solution/app/__pycache__/crud.cpython-311.pyc | Bin 0 -> 3161 bytes .../app/__pycache__/models.cpython-311.pyc | Bin 0 -> 1868 bytes .../__pycache__/validations.cpython-311.pyc | Bin 0 -> 693 bytes .../app/__pycache__/views.cpython-311.pyc | Bin 0 -> 1643 bytes solution/app/crud.py | 51 ++++++++++++++++++ solution/app/models.py | 22 ++++++++ solution/app/validations.py | 13 +++++ solution/app/views.py | 27 ++++++++++ solution/app_test.py | 47 ++++++++++++++++ solution/instance/elevator.db | Bin 0 -> 12288 bytes solution/main.py | 6 +++ 21 files changed, 183 insertions(+), 1 deletion(-) create mode 100644 chatgpt/__pycache__/app_tests.cpython-311-pytest-8.3.3.pyc create mode 100644 chatgpt/__pycache__/main.cpython-311.pyc create mode 100644 chatgpt/instance/elevator.db create mode 100644 solution/__pycache__/app_test.cpython-311-pytest-8.3.3.pyc create mode 100644 solution/__pycache__/main.cpython-311.pyc create mode 100644 solution/__pycache__/models.cpython-311.pyc create mode 100644 solution/__pycache__/views.cpython-311.pyc create mode 100644 solution/app/__init__.py create mode 100644 solution/app/__pycache__/__init__.cpython-311.pyc create mode 100644 solution/app/__pycache__/crud.cpython-311.pyc create mode 100644 solution/app/__pycache__/models.cpython-311.pyc create mode 100644 solution/app/__pycache__/validations.cpython-311.pyc create mode 100644 solution/app/__pycache__/views.cpython-311.pyc create mode 100644 solution/app/crud.py create mode 100644 solution/app/models.py create mode 100644 solution/app/validations.py create mode 100644 solution/app/views.py create mode 100644 solution/app_test.py create mode 100644 solution/instance/elevator.db create mode 100644 solution/main.py diff --git a/chatgpt/__pycache__/app_tests.cpython-311-pytest-8.3.3.pyc b/chatgpt/__pycache__/app_tests.cpython-311-pytest-8.3.3.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3adfc085147bf12aa3da60cffd1357b50c06e3bf GIT binary patch literal 4626 zcmd^DO=ufO6rR~#?dr$!Uz`%BX(9*-Q7O)^6X(bI!AYH_;8N@sVg%|&v$Ew%S~0Uu z{Ie>ixL`t|$K;ShFHPe*hulgJExq<;2M5eTA<#>GOK=atr@qr%|-~!pd);@ucJBT2Hi)a}8pGry1DHxTs;RqHM zeOL#JQZ!1@;V4FyJ{A+h5hCg=x(~uapg_ZMqRpb=1c?A`B6tv`^;K>iNMlbmE0vst z0;9uwKfKrGfV__|pA2?@53VsBa6~x=tRrQF#)35JrqGS5$VDHcJJ?SElDH4Z1&QX` zK?r*kG3}NzpV!#9uBD0uXV1`N9mI$_u|EihBn{8nqWHLL{6#SYiEt0 z@L3~QQx;@^k+0d>XF%^jDZU0_>qRh8h+4o8wQzZ=*u|S=uPP)`Rb9nZKlKY()m)8z z=R`LBjqzCiMRZroV`6Z0Ubznox4;)q*rJZywXk*M`0(z%iC9O-H{YQC<>LF0&64lH|iIAiTcIDp2AXX{h)@?s=*&}>Gpvs<1n#G zW|?@Ae9^Y)Dlf`B_Ovl(msfxBg>|L3cOFk2KX9lrc`VK1(;G~xH^sRlY1YLY(-~*k zoK38FHPtH&-D&1Usl_UGnOXCyrvjFfW1MuaH=7I|hK}#!6hJ|F$}>t9W9Eo8)qL5X zRw_p=)3FG|@8`iz1o45{h~HpJBbJlpNyMv%(wlRFK=T^i33<^sfbgIvXeV%?>6{kR zIX$27w2I9fFHw`A7r$7U^q=!4_1dyIvslbht3q>jsbW&gYXWoj#(1IV6w1ugi#8yb zw=2s=?eQY)Vp(S9E$+c?ck;mJIMR$6v`HGO;f?&$~pk3M{GZf<(1rDwUNXXfgPc5qoc zxEQ`4*N9KH0|@+5U=kQ9f>n-^%B`BMux&Bmp>BFY1K>Kmj8%sRaYehZtX)_P?xnCO z^}sw1Fu*@)43i!NMvAqgq*D5knys)pOq~dLxM8?pBo!I}*WqgeN$^%?4R#3HzCW0G ziT;3S_mqc`zvvM3m+lbYyn=Hmx^0ILdu<&;tijpwY8^scb_fa5^cp*aBx(K|9fINV z4xwe+4&mQgnOEx&T4jgOM%w@J4q?Z@lzx~We%2~)8;8;gO~9w8-!yY(*`Y}gXbUH; zoV0Vo&m-Ew$u3U#=}LD4nMw|FN5PR!-{gipob2UfA15hJ-T|`hIn!2q&iJ#UX8_AX zv$sOWOwXfBKX)v?{Vv@6sOevB>Hi-cHRqSL^NYc~q=iJO2j+2r0scv2nDihpQmh>% zmC}#YY=zZf>O{c94Z{T^sn7tp4qqEcg10jCBy5v((u)SY89e|BuQMyUxh~P}K!?>u zty{FaQP;~1~-CaJ+IIpe=pP{(5Ueu|CRz0VXC!|!$=&sC(f28y_fFJi8i Ov`NJmxT2o;GyD_xtN`Tz literal 0 HcmV?d00001 diff --git a/chatgpt/__pycache__/main.cpython-311.pyc b/chatgpt/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bac00b250b058829f9ee42160965012ad70a17e GIT binary patch literal 3276 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 literal 0 HcmV?d00001 diff --git a/solution/__pycache__/main.cpython-311.pyc b/solution/__pycache__/main.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..085408e638da1e88327d21fdcafe5395115124c3 GIT binary patch literal 346 zcmY*TJxjwt7=ABzE!EnoL#VS$7I7AFNia@2R2Mlo(%z9qlS{ZHqMaNZ9J~1s6wx0O z#X&L&PHus2oxE#x@ZtS<-tYIZ*INe-cC|AJwf{1~AMh`kdz#z>2aaM$;0zE5#H|a< z)K%XC0q09@Vvb+P0|I!~x&i{;8ZOmof18wpY8+%)-C-;VBFWf^&a}7~mEnPCf%#>0sa z8O_tUETU9Wb8b7kUUc@7l$WvCS6#iXDp!y|CDXgL$fCnPu?)~+e?IJY}k%AOPLpqaX7_eE5)!8h|AQmkkCGY_$9A=6EfAI;m&Mv(y z*I@-Ii~j>FsD#!~BK!?DNiZI()NI}GLQ95)H!<;8Rq?_Z+U|AQZUSxec-tx%=36fUCs4Lz zz2pg&Og6D4ZD^)RJV7p4ble83)ZW$KyRn%@Y^E8Tah6)~QOce=T0PEwzVF5- z8}Z3ze9~F|-Mq8xERzvGh5tr?0ooOyV<$v_?}3Ety$ zSv9&vc5X)S8Hlti&`z$`^Zyxs(!G06$r#;%fg(OqI1exk^99A->u(F)bFaVW9LG$Z iqkgEYR$qOG`5#xoD920yw-+ku>LPF_fZH4F)b|S!saI|Q literal 0 HcmV?d00001 diff --git a/solution/__pycache__/views.cpython-311.pyc b/solution/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..5794ff6d45d3e3e9d782f72501df863b3934d3a7 GIT binary patch literal 1663 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 OigTf1(?B;xH|t-*Ym>|X literal 0 HcmV?d00001 diff --git a/solution/app/__pycache__/models.cpython-311.pyc b/solution/app/__pycache__/models.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..81ed85330eb1612e6a3c01bb2495375cd82c0a33 GIT binary patch literal 1868 zcmd5+%}?A$6d!xPyo=3#C99C8s)E!=s8WSOg;-h@1e*jZN+d|6c4f&L)&ud@AKS4_ zOD^@H2b6Ny!%E@6p@)hRg#(BF5k1Zvy(a>}VQYYYXGs#Px?+rNEp-t+T& zZ{BZzmZSop>+!SkCwEc+{LYkkWln{YHWi)&6{wsJ46ey>Oy+go;F~-Lc<=zIsqcZB zMqHc5h}J%pUY=>q^uQ}ay|RDfl~Hr6U`+Ufg&5-qudY!PROlc_Gf?X^^x!9bs+{;# zcn%O~aw=%@JV2>-Y-4g<1Wo>s-{)yk^odq8oAA!XHYBw3v3!`i^j;zH-uYM3hnY*> zL;uQKRI{`NIWl}tN1M>Ga0408R3E+I$WRAs2E<#+S7?i>ITfu#S9k7HSukB)hif`o z9+QZmC?+(JqL6~37?$elOcoX8YZvN~1+$YO*?CKM4U^;+O$TitOn6NtLW8#Z5p6eS zZ6sOOX_?kHB+pL3cA(KAq66^;a+G!5vM>>0%b{^2?FBetU3;@MKP^AD5w_(G%X|vu zhbC%ZZ4=22tK}NVbSztbpg9Zfnmn&LSZl35L8v3!G#^K^Oc{1MGR++6_J^G?;eAe@q<1OdeU|+dvCC?P(kDx#m_Dlx8)wYwz>Lv& zh{Ez%1xrjBW>93n2!Trs$_y$Dstgzl@HGb4DUeJw^|?9A(h)RCb`!Rs>5u~D26hz2 z5+Wc|jU-WZF=P|1*r-K{80l6k(${skfp4&|gVDOlq+2nt3hiGh{HHk=uW!%oEOys= z?LfR8inqOceW|v+vh!sZ_nrpQXef<(_xt6W-AZp{_wL@uN5U^fzdRe1XT$QW_gTMq zV;k>m?N;{QIZ*xLL{OXvixb|$UwLxPuTBQl$*?*}`BQt3eoOn2|EX})@N4y;Ru5}+ z?;*RQB3XUQ^l(y?-ciF@b4liN#`K8ggBDzD%Nya7=uhlZe22QTxwe0xaGc^e?l(~J wFW!Cdu7B}9PN%v0F-SsprT4`vw*UIvI4p3}#~=yax!%Gnw*UGH055S_gbogyR0MrtimB!+83ilhl9jYZcrcg=I!kLXf_)_^83rPL&gApIq+A4 zxii@$=K=&s5KOXzKzQfD2T%Bt&2d237hwW%tqcz`t+A}3v<2opYPt~D(5G+moYV!_ ze{!c_y+s{dk^ggn(Gx5I;U#eG@9w>hy|ST<%8gC)o-BQp+nAxNHm>2L>AUTh{JoKA z_$Qs8r2K6zyQq#O@9JK0By+0`f1~V9vCp@aMb%3VrR;N~v%)H!^R(aR$7!ZS>Y#br z|6H!lvHV!w4j<4UcN^0obq2T5`qwAlTQ||hFxnUc3)`cIt$`h_tPNgFr~=B6*jo92 zw}Bybjy@&v3b)T(&YmI@-WxF!Vs^KbTsmsU9Nq6op HRt^0FB}bI# literal 0 HcmV?d00001 diff --git a/solution/app/__pycache__/views.cpython-311.pyc b/solution/app/__pycache__/views.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a97f2ad1e3c78040cb12d3efe0bbbeafef0e1432 GIT binary patch literal 1643 zcmcIj&ube;6rS0gm1M2tpNWmzi)f2}II)#O9Fk%J#iB8^b^=bJ2!T;GV{2VWtIq7Y zRMcx6JqkHiZXGMqYQC2P1s23Ydg#%8Qm5a3lw&%|p;p`xY zJbAqPRGn63PT8iSG^!7PJ{VUy056a;wswezlN00^LyXWdI){~u(JC;Gsb*oS?`x1f z*-71WuB1n_I`4djb=v-aukwanExH|V0_6RLHMWK#Ny!~qP^TIcRaZxz1 zYmH*zagF7;b;JreyX00`&9Oz{k>zZ;-xW43hg+rHGGq0Euq&=(*|h>NRXDQPk7BL< zlQ%y>*q-w9Ik+YSL!`kp(ck9$FB{F=C7C<>tV5Q%WJ!{xUhJk^N=Y-_{#2T)lB`}q zENX#V%QtWDyEJdnV0PdqJAFCArP#A+~Wds5iUem%V4vhgk-?GoF0$baSgTk^qFN z=2Y)`r6dGG8e60Ix?r49(;;*?!Y9}nwWyNWF`jJD6YW?NA*xXw#730Z02_cqzVO03 z9@%1?1>8;V*a<)B#J=s;sP!u(G$PdR6B-aoJfqI7n&Yc7;8kS-%@!FJ&1b;jg*X## z#SyB?L?SU{d#vXIwm*jT1sLLMFu*pMdY=4w`*gdxeK}BCe7Ti=dAAc!cjM{impyZ? zkFas4H@hr9T9Gri+M9AFDK#(t$Jz7G;syn7MQ{91{- z)bFQ27pe%);I`{9U-4Y2fUD$QA^#-5fVYv2s!iPrd&m>8q+U&2g6ZoRjX&r@A=R*L1wrM_~TZk(M5LVn{Rn@cXU(*0&NT zJ2=_JNfo}T!dF!|95C=i2jSBEr2VM None: + actual_floor = data.get("actual_floor") + target_floor = data.get("target_floor") + if not validate_floor(actual_floor) or not validate_floor(target_floor): + raise ValueError("Floor is not an integer") + new_demand = ElevatorDemand(actual_floor=actual_floor,target_floor=target_floor) + db.session.add(new_demand) + db.session.commit() + return + + +def create_state(data:Dict[str,Any]) -> None: + floor = data.get("floor") + vacant = data.get("vacant") + if not validate_floor(floor): + raise ValueError("Floor is not an integer") + if not validate_state(vacant): + raise ValueError("Vacant invalid") + new_state = ElevatorState(floor=data['floor'], vacant=data['vacant']) + db.session.add(new_state) + db.session.commit() + return + +def change_state(state_id:int, data:Dict[str,str]) -> Optional[ElevatorState]: + end_time = data.get("end_time") + end_time = datetime.fromisoformat(end_time) + state = ElevatorState.query.filter_by(id=state_id).first() + if not state: + return state + state.end_time = end_time + state.duration_sec = int((end_time - state.start_time).total_seconds()) + + #Business Rule: Idle Relocation + state.relocation_flag = state.duration_sec > 300 + db.session.commit() + return state + + + + + + + + \ No newline at end of file diff --git a/solution/app/models.py b/solution/app/models.py new file mode 100644 index 0000000..60e9322 --- /dev/null +++ b/solution/app/models.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +from app import db +from datetime import datetime + +class ElevatorDemand(db.Model): + id = db.Column(db.Integer, primary_key=True) + timestamp = db.Column(db.DateTime, default=datetime.utcnow) + target_floor = db.Column(db.Integer, nullable=False) + actual_floor = db.Column(db.Integer, nullable=False) + + +class ElevatorState(db.Model): + id = db.Column(db.Integer, primary_key=True) + timestamp = db.Column(db.DateTime, default=datetime.utcnow) + floor = db.Column(db.Integer) + vacant = db.Column(db.Boolean) + start_time = db.Column(db.DateTime, default=datetime.utcnow) + end_time = db.Column(db.DateTime,nullable=True) + duration_sec = db.Column(db.Integer,nullable=True) + relocation_flag = db.Column(db.Boolean,nullable=True) + + diff --git a/solution/app/validations.py b/solution/app/validations.py new file mode 100644 index 0000000..39afb58 --- /dev/null +++ b/solution/app/validations.py @@ -0,0 +1,13 @@ +# -*- coding: utf-8 -*- + + +def validate_floor(floor:int) -> bool: + if isinstance(floor, int): + return True + return False + +def validate_state(state:bool) -> bool: + if isinstance(state, bool): + return True + return False + diff --git a/solution/app/views.py b/solution/app/views.py new file mode 100644 index 0000000..4d68d7e --- /dev/null +++ b/solution/app/views.py @@ -0,0 +1,27 @@ +# -*- coding: utf-8 -*- +from flask import request +from app import app +from app.crud import create_demand,create_state,change_state + +@app.route('/demand', methods=['POST']) +def create_demand_view(): + data = request.json + create_demand(data) + return {'message': 'Demand created'}, 201 + + +@app.route('/state', methods=['POST']) +def create_state_view(): + data = request.json + create_state(data) + return {'message': 'State created'}, 201 + +@app.route('/state//end',methods=["PATCH"]) +def change_state_view(state_id): + data = request.json + result = change_state(state_id,data) + if not result: + return {"message":"No state found"},404 + return {"message":"State changed"},201 + + \ No newline at end of file diff --git a/solution/app_test.py b/solution/app_test.py new file mode 100644 index 0000000..86752cf --- /dev/null +++ b/solution/app_test.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +import pytest +from datetime import datetime,timedelta +from app import app,db +from app.models import ElevatorState + +@pytest.fixture +def client(): + app.config['TESTING'] = True + with app.app_context(): + db.drop_all() + db.create_all() + with app.test_client() as client: + yield client + + +def test_create_demand(client): + response = client.post('/demand',json={"actual_floor":3,"target_floor":6}) + assert response.status_code == 201 + assert response.json == {"message":"Demand created"} + +def test_create_state(client): + response = client.post('/state',json={"floor":2,"vacant":True}) + assert response.status_code == 201 + assert response.json == {"message":"State created"} + +def test_relocation(client): + response = client.post('/state',json={"floor":2,"vacant":True}) + state_id = 1 + end_time = datetime.utcnow() + timedelta(seconds=100) + response = client.patch(f'/state/{state_id}/end',json={"end_time":f"{end_time.isoformat()}"}) + assert response.status_code == 201 + assert response.json == {"message":"State changed"} + state = ElevatorState.query.filter_by(id=state_id).first() + assert not state.relocation_flag + +def test_idle_relocation(client): + response = client.post('/state',json={"floor":2,"vacant":True}) + state_id = 1 + end_time = datetime.utcnow() + timedelta(seconds=600) + response = client.patch(f'/state/{state_id}/end',json={"end_time":f"{end_time.isoformat()}"}) + assert response.status_code == 201 + assert response.json == {"message":"State changed"} + state = ElevatorState.query.filter_by(id=state_id).first() + assert state.relocation_flag + + diff --git a/solution/instance/elevator.db b/solution/instance/elevator.db new file mode 100644 index 0000000000000000000000000000000000000000..ed36543ca3aaf769090d1b86589a98b81dd85d31 GIT binary patch literal 12288 zcmeH~O>fgM9EY83F#0~=u&WOsts0BsBu?TStacEgiLQlGB*vu*Z8}xz3+l3+%eeC? z_#pi}dNRm(kV}zui2%#PE zxw|Aq6n57&@hip38AUOMGWuN+sa$=DYD9d&1qQ$X7ytuc01SWuFaQR?02lxR|F40Y zg1mQ7uS-A90`Kd@_b2|f7t9y^%fJg#wVl^px7l-XuX)mPak3{qEEdK?eA@20Z{03# zcY3(}snvRgi-ll3^~Gq@Z}^R%d#7h^*gBfb=Zkg!u;JPpc(VYXbUH1!*$!I-v&5!_mb7

Uid*jVI^VF8w6M0B&WmXcEYo{IP}8>2EYIq z00UqE41fVJ00zJS7ytuc01P}}1L65!s{KOZmTNC+sJf~ytBoqEtSZY&qk_t-^0M40 zqtdFhEHxgm2-q4J00UqE41fVJ00zJS82AeV{CNR2r9xA5)l`ihtMpjYF|iz#I;y3p zgc6;~*%5!1!i<_;tjeX7NTizph)%($ah^;`_P0W-yf+TlpyBwJctDR8^sd z&X|?vV-c_B@`li7Zuq<9qlj0sc+Jt6qEVd^H9dbU;^kbPP}AP@cgsf+FJ<#8QHW)j zY-9bJb06_yF0a~@(k<&3d=&9Q7Oy(QR8-YA*v9jVMf^z)PZdT?i`i*^f?r2`Z!2#) zl!cuP(D2t~KH55y;&D8z{AB*^IE^q2Kv-!@}K9-{s zaf^4{HVl?nV>04$4zDVV8B9w*<8bJ8^hJvJrd&w=k?5LZFol>pwe Date: Fri, 23 May 2025 14:52:45 -0300 Subject: [PATCH 2/3] Added docstrings --- solution/app/__init__.py | 4 +- .../app/__pycache__/__init__.cpython-311.pyc | Bin 576 -> 861 bytes solution/app/__pycache__/crud.cpython-311.pyc | Bin 3161 -> 4185 bytes .../__pycache__/validations.cpython-311.pyc | Bin 693 -> 1204 bytes .../app/__pycache__/views.cpython-311.pyc | Bin 1643 -> 2006 bytes solution/app/crud.py | 57 +++++++++++++++++- solution/app/validations.py | 33 +++++++++- solution/app/views.py | 19 +++--- solution/instance/elevator.db | Bin 12288 -> 0 bytes 9 files changed, 100 insertions(+), 13 deletions(-) delete mode 100644 solution/instance/elevator.db diff --git a/solution/app/__init__.py b/solution/app/__init__.py index a37dc43..083ffbc 100644 --- a/solution/app/__init__.py +++ b/solution/app/__init__.py @@ -10,8 +10,8 @@ from app import models -#with app.app_context(): -# db.create_all() +with app.app_context(): + db.create_all() from app import views diff --git a/solution/app/__pycache__/__init__.cpython-311.pyc b/solution/app/__pycache__/__init__.cpython-311.pyc index fe4c0c1bc358d042098a84964ce78c45374290bf..a0fceaad5b6ebb2ce64e98cf13db209b62d00868 100644 GIT binary patch delta 421 zcmX@Wa+ghgIWI340}!m)YLH>V$iVOz#DM`eDC6_DiRzj4sjLe)VKT_{G9YI)T)>op zks+0R0oYKuAe4csl93^W4Fs1l0rdkh1TZq>aVs+zG8D6vGgUB0GL$niGDHH+WaMW^ zVMt-mVa?@^;s$A*I4_FFPm}Q$YguM$d9fzXWEMte$y?ls1qJcR`FSO&6(zU0l8aIk zOH$(#b8;rTGp2J11FZo1k)in0wfi>t zHu|^tH~4>Gh6#h^K7v$zfh$F5LSy~-@dHf+!ewJ%6uZD63Pvgr3Q86W0UdUbUDQ#7 Q`Je`iqYnE)eMTS&0L$%GW&i*H delta 115 zcmcc1c7R2FIWI340}vS18f2I;GB7*_abSQM%J^J1Q9Y9{g&~D4hc%Zoij$Ecg?+Ld zV-$}j<1N;*%+&H?KTWR5EsV~SA26nK2?BKiO=2i+m>kHI$@GD1vL3SpYY{(C2ms=` B7Tf>; diff --git a/solution/app/__pycache__/crud.cpython-311.pyc b/solution/app/__pycache__/crud.cpython-311.pyc index ea038bfb58751f5c6fe2b2e920f26aac2b2fd257..5108d38e15d192fad499241b8a165ac3b1f2d7ee 100644 GIT binary patch delta 1416 zcma)6&ubGw6y9x`v`uW>VxT{0>7cY$ut5=&RuoE8q@YzA@lvD=+1X@ZGpnDRn$NUMtnawX_tS(`GW#_%`ec$_be`p^iU-kFL zHF%!BJyZA^-%Q@slbh><`q9l`JZhK;l6>=ixXX)XwNo*CR@byRf@hu+EC|Agk$Z?T zS74SS$g$9ZP0Cm}JVT0@nQ63)sY}o;Y?sIa=MG2ILZU!W8Qavvf;tRYnA&b!g}s3} zE)qewtG3gP$5VT_fYB_<(41It1wT!hxUK$>ka7+a7@(-|I44TjMgRc`%=1Jb%XS=| z4$~-5ttnKHCdfw2#SpAzUxLejV6I0aqQqHixM>w&$zdeS=YQ*()0h0w$cKavOs{Lz zNi8+x|BO8IAL@NN^EbM`NAyQs{^RHqF9uBa;KF}1ofV+OVMOOJ6A0id29Sc*&OU0= z?{(x~-D;Ma4O-YYXCqP&n2x?s>FvWBZYw< zbRhI&dtEiT|0&QxR6#w6m9c*^HUU~)joHQoXyrZ+1)I|P2mFsQd}Lu~@{=+1*_hcg zW_B<3{Lnq@*0s9HX+96ltLn`aFv}}XgxIiYQkF-AnX7^p!8_2KW{HO$5Ds{$?j5CQ z!&OabIxFMJ=2t0JsR`}?Qz+8p@nS}LQnIgJNOzPGob(qN8(1j=tsKkYMJ(F8Ugod) zRE58ON4gr@E5DV~%&;7)0rfXZZ2fT5inkECPhGHWU0YckvEf@HZB@f?&%tyMMHR#IweA7;nkO*1$b zxWR?3VpW4}rCUwy!{t$ZAUILgVA{@9j#aXi!57!mcBk-eZSQ=zRtMD~`Bu1WtoR7P F`vq`oo|FIp delta 385 zcmcbqa8rVBIWI340}$NVV35(qHj%H8k!fOsI3wT08Suu`vWQXtMfE z7GQCl9K>>%b0Sbf1H%nr@yQCT^MqJ|JZ2#N+{VbjFrA@>VZr2!tRj=2upW|TNMV!& z%0NI3LkbguH+dynFW6i*zsV~&3?|>?$l((PDlA?JB!GtV2uu#;OcZfhA-=?ShsutM zJ$e@eJTD4(UJ>xze2DW2BctDBIo?}*@*pj%AzJu_H*@fDF>-?}DFR6pX-t;oUs}(> z$UUKChVugE8SYbRKQI8fD@4E)Iw1zsJRxO<@r>db=2LP%FaWtLSilrIA;H5aI79gZ n1CUzavO;)8Fvyu;?uLvVwO7m_Y_Pxw36LrX6V57<0y+->?qy*< diff --git a/solution/app/__pycache__/validations.cpython-311.pyc b/solution/app/__pycache__/validations.cpython-311.pyc index 160efa04eb8d5e6d0a1ca9c07e566e14ad79b86a..97991c8fbff5a58a7415d61ca92eccd34b8ef869 100644 GIT binary patch literal 1204 zcmb_bJ8u&~5Z?2h9~ewXoPs8Jix9;EEQ-)rh$c~>;psquPD1OuvAxpy_O!caiHL%N zA|+jDBBcT$N`4566rsp1f54JOlZx3r#{r`tgqUJxXLshCx%uWkR4QeH^5yf*-Zhty zZ^k(hZ*mx~;9-}91W4$B)A7RG8}E58bitYU9{O&WZ;^UonD0bF$YDW(PGuZ8CunF5 zAQmCxHB`Gq|Md2X=p0^73eJ1Yn=Am*klIu#E$D16r0i( zB09~L=^wv0gWB4x=Z0mjc&s#w0~oqkzwSsgP-SLLj~}l${ih1M_PZk9X8yw%HY6W_ zzafIu3`HpaF4yo^Hz)ZD~yc}Mf`0&DhwJc#FL%5=- zUX$;XlosAz-K!oHmkx_dBjV&2kLId7`sneB-G>fE7T!u4<`5pIPD4x_Y`)o^Hrw}Qin+){?&+shsW^kTq1{pU0a>lSM zn)_2ua1(GzD|mU?#86bo$rZ!N%HHxpv36Lj&2S>mVbFuRCktrh1)~h77UUzbueQo@ z>2_a)X#{uV9KM?cQ!P{@*KwRtX~CI)R~->F`-|4hs?~XnSRN5H`)k&mscg|74Sgtd delta 313 zcmdnOxs{b~IWI340}wpxG00$KoXEG3c_p*o4kci9Ce=QGK( zu@;vkmZVNh^s6so1xjc#6|n)STP#WW`8k@5Mcg1Aj6g!6hyx_fSC*KQnF7=i57t-2 z2NVREj4*YA>RgeF>~dGwKpC(HYJCH8o1rZ>fU?WyC z6jg$x!Iu2uu*uC&Da}c>D-r;Tfov}h1`;2b85tQra4<6p&Jg~<0HhX(fGKo>3#0-f PwLk@35~L3y26htw(h);J diff --git a/solution/app/__pycache__/views.cpython-311.pyc b/solution/app/__pycache__/views.cpython-311.pyc index a97f2ad1e3c78040cb12d3efe0bbbeafef0e1432..c1d585e3eaaa6dceb34244b1358fe7acc3418c63 100644 GIT binary patch delta 1046 zcmc&yO=uHA6rP`*blWu9C~2D}{w$_6h6G6u{vgs))N4RuEj`JS-L%m*k=YF`r7^{m zhaL(mSbv~`peZ6Kcour}wuKE? zcjRzQ4m)yK_&5Q^RWpu~a^%!MvAQL-T71x6qv!Dr`#m{EvBhjGMJre*ForZoVEAAh zfiuD5o^`J%SxGdY~vyUAf(OGq3ZbAh;fG zn5B8k6r-xD;0vtw8z~q#4n){vP6Di=UHgkPPMXL*$u5kF5#=JuMb#GKCj=L*-{ngS zMZGj{jPs~nX19kt7^V^68%5-F4aXWpC;|Hi3;mIc)$nLHcg8b3!f>L207T!p8a~?~ KU8OCzPy7jXLj3&z delta 713 zcmZ`$PiqrF6rY)$-PCT9Hc6A99=cfBO|UCoqE$*R78EsJdhsS9yS3ZaRAx5{LP-KS z6!8#Pq5TA!;z9ffeuD`tA`3kVf|p2dUi7^*hW6mV`|;lI{eSay?q@RnA(fgX@LHd4 zZ2n=N(+!$dz(hG&12_n~^e!v&&}55?WksMP=3D-5Q>dUG(U?2+pzc#J!adfwlL18o z@k;<5@?FoqUG1zL^GyHhkQXCfl)U&YnU_UN>ZQSw)NRS_6Nn{YSIPgU`9pqbd(vE_ zAXH!nkp>tyHpD!rai$^Mdf-0w1H_k}`${YTj|sj7aAunM{=$$KB3_WZ0Mqo_Qnv;< zsV_^uEV7}k-l_(WaX(x57v=Y(Eh-viNhyY;x&2!9{791!03n^r$ AA^-pY diff --git a/solution/app/crud.py b/solution/app/crud.py index 7365ab2..b3c621f 100644 --- a/solution/app/crud.py +++ b/solution/app/crud.py @@ -5,7 +5,25 @@ from app.models import ElevatorDemand,ElevatorState from app.validations import validate_floor, validate_state -def create_demand(data:Dict[str,Any]) -> None: +def create_demand(data:Dict[str,int]) -> None: + ''' + Create a new instance of ElevatorDemand. Raise ValueError if the validation fails + + Parameters + ---------- + data : Dict[str,int] + contains the actual and target floor. + + Raises + ------ + ValueError + If the floor validation fails. + + Returns + ------- + None + + ''' actual_floor = data.get("actual_floor") target_floor = data.get("target_floor") if not validate_floor(actual_floor) or not validate_floor(target_floor): @@ -17,18 +35,53 @@ def create_demand(data:Dict[str,Any]) -> None: def create_state(data:Dict[str,Any]) -> None: + ''' + Create a new instance of ElevatorState. Raise ValueError if the vacant or floor + validation fails + + Parameters + ---------- + data : Dict[str,Any] + Contains the actual floor of the elevator and if it is vacant. + + Raises + ------ + ValueError + If the floor or state validation fails + + Returns + ------- + None + + ''' floor = data.get("floor") vacant = data.get("vacant") if not validate_floor(floor): raise ValueError("Floor is not an integer") if not validate_state(vacant): raise ValueError("Vacant invalid") - new_state = ElevatorState(floor=data['floor'], vacant=data['vacant']) + new_state = ElevatorState(floor=floor, vacant=vacant) db.session.add(new_state) db.session.commit() return def change_state(state_id:int, data:Dict[str,str]) -> Optional[ElevatorState]: + ''' + Triggers the change of state adding end_time and duration to a ElevatorState instance + + Parameters + ---------- + state_id : int + ID of the state. + data : Dict[str,str] + Contains the end_time in isoformat. + + Returns + ------- + Optional[ElevatorState] + Returns an instance of ElevatorState if exist for state_id else None. + + ''' end_time = data.get("end_time") end_time = datetime.fromisoformat(end_time) state = ElevatorState.query.filter_by(id=state_id).first() diff --git a/solution/app/validations.py b/solution/app/validations.py index 39afb58..891e4c2 100644 --- a/solution/app/validations.py +++ b/solution/app/validations.py @@ -2,12 +2,41 @@ def validate_floor(floor:int) -> bool: + ''' + Validate if the floor is an integer. More restrictions could be implemented + in particular cases (e.g. top and bottom floor) + + Parameters + ---------- + floor : int + The floor number. + + Returns + ------- + bool + True if the floor is an integer. + + ''' if isinstance(floor, int): return True return False -def validate_state(state:bool) -> bool: - if isinstance(state, bool): +def validate_state(vacant:bool) -> bool: + ''' + Validate if the elevator is vacant + + Parameters + ---------- + vacant : bool + True if the elevator is vacant. + + Returns + ------- + bool + True if vacant is a bool, else False. + + ''' + if isinstance(vacant, bool): return True return False diff --git a/solution/app/views.py b/solution/app/views.py index 4d68d7e..92ab75b 100644 --- a/solution/app/views.py +++ b/solution/app/views.py @@ -5,16 +5,21 @@ @app.route('/demand', methods=['POST']) def create_demand_view(): - data = request.json - create_demand(data) - return {'message': 'Demand created'}, 201 - + try: + data = request.json + create_demand(data) + return {'message': 'Demand created'}, 201 + except Exception as e: + return {'message':f'{e.str()}'},404 @app.route('/state', methods=['POST']) def create_state_view(): - data = request.json - create_state(data) - return {'message': 'State created'}, 201 + try: + data = request.json + create_state(data) + return {'message': 'State created'}, 201 + except Exception as e: + return {'message':f'{e.str()}'},404 @app.route('/state//end',methods=["PATCH"]) def change_state_view(state_id): diff --git a/solution/instance/elevator.db b/solution/instance/elevator.db deleted file mode 100644 index ed36543ca3aaf769090d1b86589a98b81dd85d31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeH~O>fgM9EY83F#0~=u&WOsts0BsBu?TStacEgiLQlGB*vu*Z8}xz3+l3+%eeC? z_#pi}dNRm(kV}zui2%#PE zxw|Aq6n57&@hip38AUOMGWuN+sa$=DYD9d&1qQ$X7ytuc01SWuFaQR?02lxR|F40Y zg1mQ7uS-A90`Kd@_b2|f7t9y^%fJg#wVl^px7l-XuX)mPak3{qEEdK?eA@20Z{03# zcY3(}snvRgi-ll3^~Gq@Z}^R%d#7h^*gBfb=Zkg!u;JPpc(VYXbUH1!*$!I-v&5!_mb7

Uid*jVI^VF8w6M0B&WmXcEYo{IP}8>2EYIq z00UqE41fVJ00zJS7ytuc01P}}1L65!s{KOZmTNC+sJf~ytBoqEtSZY&qk_t-^0M40 zqtdFhEHxgm2-q4J00UqE41fVJ00zJS82AeV{CNR2r9xA5)l`ihtMpjYF|iz#I;y3p zgc6;~*%5!1!i<_;tjeX7NTizph)%($ah^;`_P0W-yf+TlpyBwJctDR8^sd z&X|?vV-c_B@`li7Zuq<9qlj0sc+Jt6qEVd^H9dbU;^kbPP}AP@cgsf+FJ<#8QHW)j zY-9bJb06_yF0a~@(k<&3d=&9Q7Oy(QR8-YA*v9jVMf^z)PZdT?i`i*^f?r2`Z!2#) zl!cuP(D2t~KH55y;&D8z{AB*^IE^q2Kv-!@}K9-{s zaf^4{HVl?nV>04$4zDVV8B9w*<8bJ8^hJvJrd&w=k?5LZFol>pwe Date: Sun, 25 May 2025 10:13:35 -0300 Subject: [PATCH 3/3] delete chatgpt solution --- .../app_tests.cpython-311-pytest-8.3.3.pyc | Bin 4626 -> 0 bytes chatgpt/__pycache__/main.cpython-311.pyc | Bin 3276 -> 0 bytes chatgpt/app_tests.py | 10 ----- chatgpt/db.sql | 12 ----- chatgpt/instance/elevator.db | 0 chatgpt/main.py | 42 ------------------ chatgpt/requirements.txt | 4 -- 7 files changed, 68 deletions(-) delete mode 100644 chatgpt/__pycache__/app_tests.cpython-311-pytest-8.3.3.pyc delete mode 100644 chatgpt/__pycache__/main.cpython-311.pyc delete mode 100644 chatgpt/app_tests.py delete mode 100644 chatgpt/db.sql delete mode 100644 chatgpt/instance/elevator.db delete mode 100644 chatgpt/main.py delete mode 100644 chatgpt/requirements.txt diff --git a/chatgpt/__pycache__/app_tests.cpython-311-pytest-8.3.3.pyc b/chatgpt/__pycache__/app_tests.cpython-311-pytest-8.3.3.pyc deleted file mode 100644 index 3adfc085147bf12aa3da60cffd1357b50c06e3bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4626 zcmd^DO=ufO6rR~#?dr$!Uz`%BX(9*-Q7O)^6X(bI!AYH_;8N@sVg%|&v$Ew%S~0Uu z{Ie>ixL`t|$K;ShFHPe*hulgJExq<;2M5eTA<#>GOK=atr@qr%|-~!pd);@ucJBT2Hi)a}8pGry1DHxTs;RqHM zeOL#JQZ!1@;V4FyJ{A+h5hCg=x(~uapg_ZMqRpb=1c?A`B6tv`^;K>iNMlbmE0vst z0;9uwKfKrGfV__|pA2?@53VsBa6~x=tRrQF#)35JrqGS5$VDHcJJ?SElDH4Z1&QX` zK?r*kG3}NzpV!#9uBD0uXV1`N9mI$_u|EihBn{8nqWHLL{6#SYiEt0 z@L3~QQx;@^k+0d>XF%^jDZU0_>qRh8h+4o8wQzZ=*u|S=uPP)`Rb9nZKlKY()m)8z z=R`LBjqzCiMRZroV`6Z0Ubznox4;)q*rJZywXk*M`0(z%iC9O-H{YQC<>LF0&64lH|iIAiTcIDp2AXX{h)@?s=*&}>Gpvs<1n#G zW|?@Ae9^Y)Dlf`B_Ovl(msfxBg>|L3cOFk2KX9lrc`VK1(;G~xH^sRlY1YLY(-~*k zoK38FHPtH&-D&1Usl_UGnOXCyrvjFfW1MuaH=7I|hK}#!6hJ|F$}>t9W9Eo8)qL5X zRw_p=)3FG|@8`iz1o45{h~HpJBbJlpNyMv%(wlRFK=T^i33<^sfbgIvXeV%?>6{kR zIX$27w2I9fFHw`A7r$7U^q=!4_1dyIvslbht3q>jsbW&gYXWoj#(1IV6w1ugi#8yb zw=2s=?eQY)Vp(S9E$+c?ck;mJIMR$6v`HGO;f?&$~pk3M{GZf<(1rDwUNXXfgPc5qoc zxEQ`4*N9KH0|@+5U=kQ9f>n-^%B`BMux&Bmp>BFY1K>Kmj8%sRaYehZtX)_P?xnCO z^}sw1Fu*@)43i!NMvAqgq*D5knys)pOq~dLxM8?pBo!I}*WqgeN$^%?4R#3HzCW0G ziT;3S_mqc`zvvM3m+lbYyn=Hmx^0ILdu<&;tijpwY8^scb_fa5^cp*aBx(K|9fINV z4xwe+4&mQgnOEx&T4jgOM%w@J4q?Z@lzx~We%2~)8;8;gO~9w8-!yY(*`Y}gXbUH; zoV0Vo&m-Ew$u3U#=}LD4nMw|FN5PR!-{gipob2UfA15hJ-T|`hIn!2q&iJ#UX8_AX zv$sOWOwXfBKX)v?{Vv@6sOevB>Hi-cHRqSL^NYc~q=iJO2j+2r0scv2nDihpQmh>% zmC}#YY=zZf>O{c94Z{T^sn7tp4qqEcg10jCBy5v((u)SY89e|BuQMyUxh~P}K!?>u zty{FaQP;~1~-CaJ+IIpe=pP{(5Ueu|CRz0VXC!|!$=&sC(f28y_fFJi8i Ov`NJmxT2o;GyD_xtN`Tz diff --git a/chatgpt/__pycache__/main.cpython-311.pyc b/chatgpt/__pycache__/main.cpython-311.pyc deleted file mode 100644 index 7bac00b250b058829f9ee42160965012ad70a17e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3276 zcmdT`OKcNI7@mFlv3BAlq`^>!h*E+}l@}qD6cyziBM5~AiCB?V8}B4>*hiRM2NFRs zC=wADtSVA+=phG`29X0t4n6eR+ZtJ_wGvXLst0aC;ZUI-I0M@YiqSyf9mHTF> z_-Ka8JsCpKBZqD|&p?N9wyIL{9fn-BQC&U{cus4EojZEyE%A&pHrKC6#x2`};O!JN zOxrVU=vs1OE=t+{;cJ(>l*ANNNzE%uCNz^OoUb)*D@hY}Ha9mz1H&e+_9qU-26*dp`rp|7WN z?1ll6F*d1d^U~N=4fdksEFA0A6DbvHrf!T4B+bFp_*hTUM9IYP6ofNli7CmPoH55# zDXBHh%ptP59Uz8r14Fv>%lm|<;V0ot+fwIx`(iljYsvXq(%tz`^|J4K-^%eHPOsnH zc#!dBLl<+Qi|JTCQ1LYOB$gRpnqEJ<7|RA)bAi@$ANiq3@i`wS&!4#a|4g0(NEg6E zbBer|bio4Yf<@8|n}h|32pS4v=tq?phoTjTC<3Y`P($Dlfm#Be5U3+?m;hl93KKX& z;3x*$)2-_Ylr)>4l@gL>qEAVevn2JzYA8Yo8-{}6UnfC6Sow7H$!G>G&9C<@j%I^x zxnNtmpZwexA@4BnX_lQ`XS3g49Uj3N*fa#K5F46aa zS=#&n+{4mCrpPT=gvySg`;^HS`*6mRjIHj-u-$);DvzeXKG8dJZbz5DC5|P_T_`dm zv&miAWp0ATGQ|%$3mc^h>x(7AkS5`Lg)3SO2?Q~ZG9B`p-g9%t4@*t$1DbtYyVYqn}yvO;T4XnlFc5;`ol!=cSQ-;Bl4gk}67 z@9*$~#_Rge`GMI&?_kTW1Lr@(7FOo=u!VQn;&Iu6j^lZW(hg-D8=b@r^Fc>*ij+Z( z#L1-$I)!al92~iclIj-(P7`oxg1*GI?ISF4R-%j~fdWaK9@L6G8}MyRW7xxyP-L}t zz3$nSS0`TG{i(?c#j>GTE)+}0wwZE1%SLi+#9|}+GG*m~RnwdmT5>|m%g-#~ti_&n zh(Zo$a^{I5krhsc=$h!Iq7Jz&0W!DsJMHpfw*u;Pnpo!7|zIT2BoxJ%KO24!TnD727QfVh