From ebf8ee5a2e4506043e8fb8db744b84b49ee9d707 Mon Sep 17 00:00:00 2001 From: Tariq5mo Date: Thu, 22 Aug 2024 12:58:21 +0300 Subject: [PATCH] Add task 2 --- AUTHORS | 3 +- README.md | 22 +++++---- __pycache__/console.cpython-38.pyc | Bin 0 -> 4477 bytes file.json | 1 + models/__pycache__/__init__.cpython-38.pyc | Bin 0 -> 431 bytes models/__pycache__/amenity.cpython-38.pyc | Bin 0 -> 931 bytes models/__pycache__/base_model.cpython-38.pyc | Bin 0 -> 2471 bytes models/__pycache__/city.cpython-38.pyc | Bin 0 -> 1037 bytes models/__pycache__/place.cpython-38.pyc | Bin 0 -> 2530 bytes models/__pycache__/review.cpython-38.pyc | Bin 0 -> 1003 bytes models/__pycache__/state.cpython-38.pyc | Bin 0 -> 1356 bytes models/__pycache__/user.cpython-38.pyc | Bin 0 -> 1100 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 138 bytes .../__pycache__/db_storage.cpython-38.pyc | Bin 0 -> 3734 bytes .../__pycache__/file_storage.cpython-38.pyc | Bin 0 -> 3343 bytes models/engine/db_storage.py | 40 +++++++++++++++++ models/engine/file_storage.py | 42 +++++++++++++++++- test_get_count.py | 11 +++++ tests/__pycache__/test_console.cpython-38.pyc | Bin 0 -> 1879 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 142 bytes .../__pycache__/test_amenity.cpython-38.pyc | Bin 0 -> 4641 bytes .../test_base_model.cpython-38.pyc | Bin 0 -> 5779 bytes .../__pycache__/test_city.cpython-38.pyc | Bin 0 -> 4816 bytes .../__pycache__/test_place.cpython-38.pyc | Bin 0 -> 8015 bytes .../__pycache__/test_review.cpython-38.pyc | Bin 0 -> 5196 bytes .../__pycache__/test_state.cpython-38.pyc | Bin 0 -> 4537 bytes .../__pycache__/test_user.cpython-38.pyc | Bin 0 -> 5460 bytes .../__pycache__/__init__.cpython-38.pyc | Bin 0 -> 154 bytes .../test_db_storage.cpython-38.pyc | Bin 0 -> 4249 bytes .../test_file_storage.cpython-38.pyc | Bin 0 -> 4829 bytes 30 files changed, 108 insertions(+), 11 deletions(-) create mode 100644 __pycache__/console.cpython-38.pyc create mode 100644 file.json create mode 100644 models/__pycache__/__init__.cpython-38.pyc create mode 100644 models/__pycache__/amenity.cpython-38.pyc create mode 100644 models/__pycache__/base_model.cpython-38.pyc create mode 100644 models/__pycache__/city.cpython-38.pyc create mode 100644 models/__pycache__/place.cpython-38.pyc create mode 100644 models/__pycache__/review.cpython-38.pyc create mode 100644 models/__pycache__/state.cpython-38.pyc create mode 100644 models/__pycache__/user.cpython-38.pyc create mode 100644 models/engine/__pycache__/__init__.cpython-38.pyc create mode 100644 models/engine/__pycache__/db_storage.cpython-38.pyc create mode 100644 models/engine/__pycache__/file_storage.cpython-38.pyc create mode 100755 test_get_count.py create mode 100644 tests/__pycache__/test_console.cpython-38.pyc create mode 100644 tests/test_models/__pycache__/__init__.cpython-38.pyc create mode 100644 tests/test_models/__pycache__/test_amenity.cpython-38.pyc create mode 100644 tests/test_models/__pycache__/test_base_model.cpython-38.pyc create mode 100644 tests/test_models/__pycache__/test_city.cpython-38.pyc create mode 100644 tests/test_models/__pycache__/test_place.cpython-38.pyc create mode 100644 tests/test_models/__pycache__/test_review.cpython-38.pyc create mode 100644 tests/test_models/__pycache__/test_state.cpython-38.pyc create mode 100644 tests/test_models/__pycache__/test_user.cpython-38.pyc create mode 100644 tests/test_models/test_engine/__pycache__/__init__.cpython-38.pyc create mode 100644 tests/test_models/test_engine/__pycache__/test_db_storage.cpython-38.pyc create mode 100644 tests/test_models/test_engine/__pycache__/test_file_storage.cpython-38.pyc diff --git a/AUTHORS b/AUTHORS index 64b26acdc14..40cdf59a761 100644 --- a/AUTHORS +++ b/AUTHORS @@ -3,4 +3,5 @@ Jennifer Huang <133@holbertonschool.com> Alexa Orrico <210@holbertonschool.com> -Joann Vuong <130@holbertonschool.com> +Joann Vuong <130@holbertonschool.com> +Tariq Omer diff --git a/README.md b/README.md index f1d72de6355..8983dfc7925 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,9 @@ # AirBnB Clone - The Console + The console is the first segment of the AirBnB project at Holberton School that will collectively cover fundamental concepts of higher level programming. The goal of AirBnB project is to eventually deploy our server a simple copy of the AirBnB Website(HBnB). A command interpreter is created in this segment to manage objects for the AirBnB(HBnB) website. -#### Functionalities of this command interpreter: +## Functionalities of this command interpreter + * Create a new object (ex: a new User or a new Place) * Retrieve an object from a file, a database etc... * Do operations on objects (count, compute stats, etc...) @@ -9,6 +11,7 @@ The console is the first segment of the AirBnB project at Holberton School that * Destroy an object ## Table of Content + * [Environment](#environment) * [Installation](#installation) * [File Descriptions](#file-descriptions) @@ -28,16 +31,16 @@ This project is interpreted/tested on Ubuntu 14.04 LTS using python3 (version 3. * Run hbnb(non-interactively): `echo "" | ./console.py` ## File Descriptions -[console.py](console.py) - the console contains the entry point of the command interpreter. +[console.py](console.py) - the console contains the entry point of the command interpreter. List of commands this console current supports: -* `EOF` - exits console +* `EOF` - exits console * `quit` - exits console * `` - overwrites default emptyline method and does nothing * `create` - Creates a new instance of`BaseModel`, saves it (to the JSON file) and prints the id -* `destroy` - Deletes an instance based on the class name and id (save the change into the JSON file). +* `destroy` - Deletes an instance based on the class name and id (save the change into the JSON file). * `show` - Prints the string representation of an instance based on the class name and id. -* `all` - Prints all string representation of all instances based or not on the class name. -* `update` - Updates an instance based on the class name and id by adding or updating attribute (save the change into the JSON file). +* `all` - Prints all string representation of all instances based or not on the class name. +* `update` - Updates an instance based on the class name and id by adding or updating attribute (save the change into the JSON file). #### `models/` directory contains classes used for this project: [base_model.py](/models/base_model.py) - The BaseModel class from which future classes will be derived @@ -151,12 +154,13 @@ EOF all create destroy help quit show update ``` ## Bugs -No known bugs at this time. +No known bugs at this time. ## Authors -Alexa Orrico - [Github](https://github.com/alexaorrico) / [Twitter](https://twitter.com/alexa_orrico) +Alexa Orrico - [Github](https://github.com/alexaorrico) / [Twitter](https://twitter.com/alexa_orrico) Jennifer Huang - [Github](https://github.com/jhuang10123) / [Twitter](https://twitter.com/earthtojhuang) +Tariq Omer - [Github](https://github.com/tariq5mo) / [Twitter](https://twitter.com/tariq79252) Second part of Airbnb: Joann Vuong ## License -Public Domain. No copy write protection. +Public Domain. No copy write protection. diff --git a/__pycache__/console.cpython-38.pyc b/__pycache__/console.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d1e9a92edbe4c24572834533864abfc46e1a437a GIT binary patch literal 4477 zcma)9&2t<_6`${!{nUpg*`ks#7_eEzks&FlKsl*cPK*yhggAzHAT^A(TdS4kW7RW~ zt*uc(VN*p>K)E<@pg63!`Nn|*e*tHX)Lc3FU(m(;UeD}mwYIA=Q}gWZTLk1ErbgUSbZ(tklP#Z#Edv{3a_lzON|ny0B{o9^joGeRRW zJyW)sp%vMlEp;n&qMBEex*gV|hS!j~6E>rk*OGcIY)5n6oYd>#e6-*#NL>pTy+v+v zo7Z@QxA+`iV2!`o-i043tjSuB71rYF?$RUOTjndQy{CzP^5sX$=;Dcj@!DObGdHZc z-6T$vkh{=M`k0xJJF%fE@uf^1;q3{Szp9Khh8>AntoR4RW~S%XBlXz& znG#=90gtMn&6u<;mTmWy`^vs^Ux~HPp^?n3T+7WHXw8YI&hX8y;Gk9N1}^J&vwji> z;>g_=NraZLpJr~d?WUOk#_6g0-ZR<>g2c1uxK7o}h3cQGZpSRlbP)D46gwe*SlEIO zh{A>5kI}dtCP4(RQ0RO7s4x$M@PN;5mjxg1eEG^B z1OhJL8yJ>ehEOy^b#OPObk$3m2HjFixv19F;p@{_zA)1{RLPmpBT>zuT_uMHSyeJZ`_o(*8K@h~{4EeZQIB;XCEu?q+e)tgNj)~=CPo9j za&)HU#;!@V+!$HXgPK6b9)9iC1Q}S$?Z;^r#9dB!1a3DB(p2JbdTDK~th#X!fqMNk zB|@&P-4;t&{pRWFqytNM8eh$b7yx!{4S=koOQDB6F3bTy&I(&j%~L^^Ewny^s|gNy z$1F)qScx}Ce3jli<7LglRRdwlt@VBMOA+b-Qwfm)a2C}i)C_{=9OEaW&Ot)HP{$)7 zc>*O=OmO z2ic^SgLX9E{%V)51=(LsV=E) z;918#oOPNs>eX2O1v9-AOLvTAET)kBeTAeBB!68YX-Fi2)C))+j!_-K37-HnS+5br z_J4=@CF%D63{7Gy5tZ072Z+{&Z+*x^E?wgkq+bF?Njq^3zb4)yu}*@V)n=#uN_50^ z>h*0B-+?IfK{5~>s=iHP29G-MU>rLuIr8v&3KD{)1Y}-qmXNGW`@XY*=TM>Ki5|(Y zzd|`fr3Z#gvFu8w?;0Z$4$+9$D{L(A=1$q3A;6G3l+KS_ojt`#1EFyR;ZGkqSuHnm zllVo*?0=4aaGK2eBhp*w_NY#nO|?vOZLQ*3MJhlIv^Ff$rsWy40|hubOg5T zAqAU1bB(NpeTI}zWbURWXP+w4lv}3D-#>986QMjT=+=iqtu(PYFk0JQ?}Hi;Gy3; z0Q0>z!gZJXTStD}@9kj2h1mVs0pnf`d4Er;XQAcHCq1LI|CtUUPfR`9eRK^kAm+$b zOa+zUYiK-M=1hX|f_rPul4%lrX55>glwZ6KfoR0R+e}Dj_Yy`SsPY~csb|R?GA-1- zSvFCwaUgAfj2YASA&5{&0G}H&=V&56AwsG1vTTD`8fuoTms(qWql#cMip}OEP9)zSfeViVGuzF+rK1;f2ws7#knMllIL1KZ#A_>Z@#G54EA@N-j z?~&Lbapvl!MrS2KrwmHwWFAF%6aLGP_p&qREaF~}eQ0@6(2sq;b4lFBfI{y^Oc3M} z0k2)=0PFY#I)2MDw6{<-(q^T9;-NfNdyT5SOFbzi_L^0TOzq|V@mf`rkmq!H0H1V2 z#+q??9G}c}fW%#%&C9JqiHWD*!W!up1%)5a#*)JX;qN7uD4ZMk9*q7z{ZqOIQ9?|q V<@D`nfM1dKbIVx#l``+B{|DJ-?&tsj literal 0 HcmV?d00001 diff --git a/file.json b/file.json new file mode 100644 index 00000000000..87f95aaf7cc --- /dev/null +++ b/file.json @@ -0,0 +1 @@ +{"Amenity.1338e3bf-82ee-407e-aeec-9a2d451d3f89": {"id": "1338e3bf-82ee-407e-aeec-9a2d451d3f89", "created_at": "2024-08-21T19:05:46.076190", "updated_at": "2024-08-21T19:05:46.076190", "__class__": "Amenity"}, "BaseModel.819d7082-6c4d-4f61-94d5-7fe45d7c2e8f": {"id": "819d7082-6c4d-4f61-94d5-7fe45d7c2e8f", "created_at": "2024-08-21T19:05:46.076201", "updated_at": "2024-08-21T19:05:46.076201", "__class__": "BaseModel"}, "City.b94f3f91-2c5c-41bc-94f0-d10849d30e64": {"id": "b94f3f91-2c5c-41bc-94f0-d10849d30e64", "created_at": "2024-08-21T19:05:46.076209", "updated_at": "2024-08-21T19:05:46.076209", "__class__": "City"}, "Place.ee575b3d-d466-4c2d-803b-559c5051aa92": {"id": "ee575b3d-d466-4c2d-803b-559c5051aa92", "created_at": "2024-08-21T19:05:46.076216", "updated_at": "2024-08-21T19:05:46.076216", "__class__": "Place"}, "Review.0b6eb505-2c3e-40de-bcfa-8efd8273bc8a": {"id": "0b6eb505-2c3e-40de-bcfa-8efd8273bc8a", "created_at": "2024-08-21T19:05:46.076224", "updated_at": "2024-08-21T19:05:46.076224", "__class__": "Review"}, "State.33fcf67a-6633-40db-aff1-317a1115faff": {"id": "33fcf67a-6633-40db-aff1-317a1115faff", "created_at": "2024-08-21T19:05:46.076232", "updated_at": "2024-08-21T19:05:46.076232", "__class__": "State"}, "User.bce78d24-29eb-4c49-8a0f-3e98fb6f28a8": {"id": "bce78d24-29eb-4c49-8a0f-3e98fb6f28a8", "created_at": "2024-08-21T19:05:46.076239", "updated_at": "2024-08-21T19:05:46.076239", "__class__": "User"}} \ No newline at end of file diff --git a/models/__pycache__/__init__.cpython-38.pyc b/models/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dce734d943c568a350b506d9df39a43948451363 GIT binary patch literal 431 zcmY*UyH3L}6t$g~6IuzF5DOjY(n!FF5RE8wDyS_3UaYisOH?PWoU{^M`y(*&Bh1WM znfL`JZfJ$zNT0D%}1SP+F%!U#r^2y2a* zB`smkh&cn#QFiJu2Rvtun49f`<|;3xjDkihO}fwi3&Kcv1JtCeqaewWB8gS9l8xd~ zHc~C5${X`|Jd39?_=IBA#HBlxh0K<0uN(CuK76?A@WJr5-@fTEB1RDKucASr4cq~; zbDb!;rM+fQdYlVA=DZ|2H`P+i&o^OSu!BuyOJ>s~lPxjgThCaKEWIsbhyQaEsQ69V zRnj$5=~%oX;{*MHuj9~YU4-q#L|MegN@tQUPs7bqA?MZhoVVsrB|Qgmq2xvNzkCYx15VgI|ekCdWIsm8KP$ZNfxFSRgf)gC5xcFjiVkh0!yPMjZqC`C)wNg*; zKl(>FbM}=}{{kmwc0*fBelwo&dfvR9ul;^XVEumiYxaT>@&^wOR|gJnVY>-{B7!KY zn4yA#4Gb#+5fof-ig9i_MJU3?XC@L6#5yJ_Vi6aKNSb(P(xNN6lzb#AQt=g0u?{r9 zwaMzdD&29unBpT37vCJ*dvG*?rifsQ3LtdSQS6l2=PD4Pj&!W} zB{ZYLA50`ASCL4r$&9L4C0DUXuL&oj3-nVTZ5Xege$fl7oi6K!z@VD_Z)V_`nusK8 zTFbS&{SM_n45^6Ar7_vWXiuhe!wpTa*^j`wU4WWgk`sDCFW66tvO;CH-pfI$JTv)P z-|2>ub=-2Ht&gR|3sMdP&z&|i&oeuBK0N(~_J;aI%0_f4Z^++gV_Q}A_#n530b@YzFRFg}E^_4Y=9(OtbB)-K@_DSav>Jh3$B_oO^qW@eL# zq*T=u!eLv(C$6q+HrKKieJN|yrM+r#C~XMfIYt@^9_}>kr`i}PEmCS>2fclS7@!N= z^#EeZX$pInan@vpeft=1Jpu4LEs49H$p@*b={JIt74ZiQT062~5Htn?-`~%||>3skI literal 0 HcmV?d00001 diff --git a/models/__pycache__/base_model.cpython-38.pyc b/models/__pycache__/base_model.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d3bb1a03249cf4b395bf0cd73343af21034b7820 GIT binary patch literal 2471 zcmZuzOK%%D5GJ_~t=6(EyY3@FAB#3>sv@z`v_OHtNmD04n?u|~Tp-;hSgb|LUU?r5 zm$GX`1`0UW0{IEjF@K>ypy!@>=%uIpgelx2d7Z-g3zdvvM z(K~|K->A(0EKu&iD1QaPNk};5ETtI@DaE;!vXH^kPOZ!i?dh5mI9brttJ+kp)M4Np~;k4b(u2YF(7U zQIe*?jtIDrkTsVcg#T&-#CC^<3kNdEVtE|xi(|m2#zik4q^e6{|Lo_$1ji3B%D+I2 znEZXj#$-b7ktgpzW+&E(J+e66w`4=n5gAz{`_!W3X#=bnXWW`F`AAtK(zj2ka`rvY z+;MFLdzXmvCTv6^JNIF&J|Q?aezx&@Vf_55-;1fAJ@fPD{Cwl*pdYv36s;V!Fm6o9 zDMS@5=D|gM?mUPLEPO*gcNpBy6P3hiG6bd+c~JBM1(+jYf($vR>rrHA8AaOfN&yVx zQLMJKKR7^EqM}*CJ5B8*N@S(3l|sczNo@g9wXKd1gj@tHwN)x98O}VI9Uz}!8>Kr? z-Ml!GP298xgM^0;%CF=StaKc0mm=+HJC?hpcK46W(}IiC&S9Jm#7iPS1jBzmUzbIp z*1t{UX1)nw7rBTIzg#zol| z)}%fiuFQD3cIJA4JV+!Y&s`YhJ0Lh6!xi^wA1=LbC^5l`XTxh%y#`VoNKpzX{(0gqR5yU4l`x-?Xfc=6KJ4j?oJ4{ zLzC=A#go$T3VD(243r42p3~hNcPY7FgNF>Je!6EiyuUoZ&Z8Kof)J9|w4CP=wH= zf^PLmfUX|I(A0qH<+`DIc~+wEy-;!9t!m3aW7rU`L}d)jt~TKwp+-Bd`~(uwcDF#{ z!`=3<>?D%ZILVJ;)?tP&+5I11WCCoMGI`D z#HyO(Eq1@^h60?mQ6Melbrcxb9Msr}Bo?ZygTN~)S3!8xh9=a4=G0`~+n(dOUc*>) zmgN^{jcHYJv7(d+vi8fTX`FWVM0PwEAqE#-KHpjszo@mje+#mPZ+Z`fAqe&fZ6jLR kEq3~%tIWA?3R!y_6>_&RniAh(+sF(Yt00AMe~?Qvd(} literal 0 HcmV?d00001 diff --git a/models/__pycache__/city.cpython-38.pyc b/models/__pycache__/city.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..da7ac42c67cd32a309155aed980e9ce4d86f8cfb GIT binary patch literal 1037 zcmZ8fy>1jS5VpO({kxwe2n8rWSI}H@k)VwbBvL345h9{-W9_YdmrcC87ke)#rxZvR zDOGrnya){qwOgvZ0u?ix01+e2x8s?y=bM@R)bFPRikzlv2?q@dkPGNr1g z`WLYnToO*i8gx7G92;Cd`l#ntJ6$y`$6-Ak=HMTCrY0f;v(WBl8@MeK2PxW(3$+Jb z#nr-?Y-04y7YO>!2b1MEm1vUX$5u~0$teW>NB{=v8mM~!(2x~5qUZFSeWkb_pv0Ez zMFj;jQ!F)X0chapJ8m)8*2hv}R7w~)ciK!n&+N?k@c1)+uc=R@Y&R$6HTm^?%hq+X z^`@{p)eiXUO3TxiTP3d0ZQurWHrIgZk` z-0*(eQ?8AX(muwkEg)j6Hbz2G+$1qJZ{ literal 0 HcmV?d00001 diff --git a/models/__pycache__/place.cpython-38.pyc b/models/__pycache__/place.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e564cb6ecd0fe206f43b34989cc991633759fd8a GIT binary patch literal 2530 zcmcf@%WfP+u;;P!+Sy&d;y4drg%ZI+u)`w=p$OqPafA>kO2VZj)SBIHug9LprhC?5 zS8EB$k#aKP6Ov>23Qn9kaOx|k`~rwa)y&wj2?tKhsB5aKtE;=7Jzuq20fFb|_kP-X zHzed&Bu+lSBcH-hKLX%{5^iuaF{lAwD=|}xTB%KK1NnB+NFC~wxS6=r1zsa@Q;&M7 zPyIBYLE5CvG^AnLqODTSN!n?Lb_^nnojLCAn(_zH;-0W~=7q<7;q&0Y5Fu~!5Z>0I z#oN4dXv5sx@!b6BxdWRn+$Ma1FFqoCQCPwT<JOk>1jDp}U@~F_k zW-diM%sv+r-MAn16I>ojkwitDXKFhhX_NPLYlK^}C>2>;Ote>#F@Js?4l(shQmw|E zx*O~FHr8+6f^&I!HXiY)5QxF);7IpDd2=M=G?EjxD<(9kHL{pb!wQcDDjJ}5Cm*LK z)JFy(ful&LpXLSnF_P5Jhz{wQatS`#WN7C~^DI zU{{JQ?XFiTC0nq7cFOrW&0x!(rF|s^kUo$was_pIs3^~pi6%p!%V&U_9z7NyIPmCd z0YE_x$c`~HX6APW7B9HLoX*FP$Z?d!Q&HCwmQq8FM^GCcV>rzi>~AZPY-u}^L#3VF zhxmPFXrHmN6d8L)e!ILT^SoGFkL8W*2JrJtu)X)!QY=ZeR+_Xrn#fn-EZ6W*CIDhi z+jp?0R*&{NWkdrcz@20RhPnx$>|Z1`_Q8Z9**6Pw$9iJVjHkxFHM5>Ho|2p7>+}2e z%-(TkWCuIarJ4D}o7qoc#RI^>Y-@TA8bcvuH!7eV^v8whN>Pkurn<$p=q9l$FcYe1 zb>mDGQ8o~&3aTN`!a;hzZdI18$}*@WS34C?yQ;`#G!)v3l0-XuQ8I@0ZCI$ym}@5* zjYP(K4fz_d%B8ef>0!7#ZNf5EF%)&`9WJ442`-}|x1RqP2!*PN6&kh?*6*}cIkuMi zU;O&vfAVXc>n}U@9M}MkZP$*io1#Rvd;`Io2zm(KLV!lgw-H3CrT)b|F1n@8LyPjJeQ0)a|fDWfKqb z4uY!yASbIH1?Ny@6~p}}b7&NB6M`LOBNzy9G^>)dbnff89Me@U0$7HjHUW5$r~!;+ zc<114*Kd`)j$s<+pPp@l#7nOk+9AvbfoYUFdrR^I)Q<_G=j+tz!w&!kLnIR0jKof; z&0I+vkw862qGYfw(#Z*zqa#ail+KsQZaIJ? zoJcB}rkuj+X;ygLD}3%#%=@}i1UzVBrb8Y=uA{>u;!zRvxJY8Qu^XDo^=K zpLZoYB!g(N)jzJZwEeNptnDAD^ITorLs9a1z+AkSS@o%sN;@CJ0d>Jt)v7!ncrJKf z>3LDQ;IKA%Id#c?WmG;bKdP%SUa)Sc2hCmrC;~bNXOeQ@a?+9Pl$o#6g2- zvFt1mwBCMI$x-N&BwlX?0lw-i-f@ELO{2D ztMtVAnVDJ_oL=C1M_nvLGdLmc$e))ZQ&sioU2gWuJ;+z366dc+1&j$PC2H3b zqQ)MzM-7hO1PCF3i<*XtT)Gfjh=E_L%erBP?>3soN^2p^Q+%y~EsT)3i2(2qWVZn# z>eB>#2Y#E(hsbBmi9u?fcm$s@DpJ~@e1kJ`tg;41NL*sibf(A0s<`@( fbaUexnT8RPanWwupf`A*O#yrw(Z@6e-1hzgT{-;g literal 0 HcmV?d00001 diff --git a/models/__pycache__/state.cpython-38.pyc b/models/__pycache__/state.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4be5fe206faef5e1fe7e0b68c038ec2cde251d18 GIT binary patch literal 1356 zcmY*Z&2A($5VqZ({+pgjc3H%-Tv|d1%_WgQLVG|660{r;9EiAB0;@CjOgeFQPi#+6 zMiU7sk@f`7kUj2;aOUhQr+o!ZRCUj4gIiTDyUOkFtE%pwCzG7O`1`ZJ76m8dA6z^f zBUpS5;w&gd1W{BmLj{F7GOUS2)NsKm?sGG0ViEWD$RtfF(%xn!6B+nplQp@>o3R)- zg(!MoVkXU0Oey(}s8nTlL}fbC{FaM7#ZJg9-#jkQI-^`UHy&S>DrwZDcrUTUw~t63D{DxMIzRTP8GkUYNX;nn8!ZrD#wtNDf1i$LZS9B)Si2Ff0Ydko5xTXIgf zbj$vvSQT1WK#BJ zlkzqB_me~0b^h?1+8(t>u-~;>UVVPpVENo(5BFeoZQlbd?;|J%im=V}1UVnPz3YD@ zkSWSBh+AShIpV566ZTxEp>=0V}>fk zSCv_77t)@dtW{tjakX0MR?WD50+>aH*GRlm>7{hVLX1M+s6&5U{E89U&_-j1Z*L<#lihO|o0}Mvs7JoSi-XZ;za+-te(<$Su z;5lWqkC^S-Pcga&_GrlQ!6|&@NJSfq{b8|%!+7WH6V`V>>zu`3SIFI^sm%OLH`nhd s*c4o1`p$LG*=Asb&>mp!v)?B^{c=d)S9q=42gPX$pfUL=eL{=qKLXxbcmMzZ literal 0 HcmV?d00001 diff --git a/models/__pycache__/user.cpython-38.pyc b/models/__pycache__/user.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f1c1acbd7e0c3df530506ae2315cf4636bed8d22 GIT binary patch literal 1100 zcmZ8gJ5L-j5VpPVy$1(H6qJXqNOKKHNgG88k&-G=1fg+b?X7*sf_L|@_duK|kU*kJ z>ih-%Nb1yXQ}Gv4WoGXL2(RYzJpA}(#=GC^r3A*G*S{wh9wC3xcsK$u-h_IWh@sNkZUm5lnD2hNvgfmGwusIAQJ7T7h9uHNdV(DK( zCNliNc=E_j@9e0JcOKbY)swMIWD0xxpm$dKS~ZYeo`9qv9gyxdnNZo2{i~P{u8B|h zI@Dv$`B;L*=B}CF<1Wxb-T3LhHZU8jok{r@=dd_}QY#>l#i$PHpO_Awh zp=?V6n-kdiOc@sofl(nwp7X8J6X$1UYF&7Ait`P1i4bjXg}5RAUTvGYZni%ZW~bT# ze_bhY@@BilCfjW!y)`>C$mAJPVgQ6Kdixl-yJ-V&t+G-H;Zh-B^IW6e726D(@9}$)86J1c%n=`Wp literal 0 HcmV?d00001 diff --git a/models/engine/__pycache__/__init__.cpython-38.pyc b/models/engine/__pycache__/__init__.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..db18f8939474260e29d8ef10ef97cfca74bbe367 GIT binary patch literal 138 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 Mj|uR=@87QdAL?Rwg#Z8m literal 0 HcmV?d00001 diff --git a/models/engine/__pycache__/file_storage.cpython-38.pyc b/models/engine/__pycache__/file_storage.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9b9a64d7ddbb8ff36fa42200635020a6f5698456 GIT binary patch literal 3343 zcmaJ@&2!tv72jO|{D4SGR%E$yTMs(p+Tz4Rwd1tYdYm-2)h|!0rcp9UFljLmcPWDc z0eS(-H3vG`(_=f+a}QE){!4o88P}ZhFZ9y>-h!kk#w{qkefxpczTf-3_x96v+huru z(){NjYBTl~b(Wt7Iv?WA{tO|R&m@;3<~~Pj#bRXn7N;>gwnvWd7~P3$qq<)=dM$2@ znts#h_1GP)`D;dR#H~@=ZyUWCcSh^}I%mpKj;gDsT2pPcF5SP^{f%ETxh7k$nQXlh z{xvBMS+_m)+$U+0hf$Jw`7`DHB8t^vp6c*edHp!dGWTnomK}6?S${NANtC~Y+I$>l z>bI#>F*^2>YS8&84*LoNwU526&M?4>OdHVKDBjYORUA=Jlv z<)PId;?4dDp%~y|zL4Cvr10&C`HtL@wsc-|zb0$4{+ju9*^o`N4e81?v`u+kwqzSC zT-lN97+I4W@*3Kf+?Jd29n7?)1vqY$YfAu3_i^YbjH9W_JOGr3NgrCCdZG99@OKB^ z0AP7{JgJt}9fkc9TC!L_ZPK#dFiVqzKG{Ei$aq5G3Eu2i5CxcU($tS5b|wloWas>X z?Xy4J`BI!&XLi90dniss_Fkn8trMZQ3%d}7^^iT^F5pl43TB9@r&T`DGoQ++pGRpD z>X%*+q(?*5&$ENBU0x5Cj9tu>PL!)rRyKpc5FiN3Mi3<7NCiRHDeX+fgVO59ncqm% zi-0yStrPXKbWX!~qTVpQ30wYse@~}rzV|57kCVsPDNR&xdVg<3q{;SFavUXUkB|wn zif+B}%hC$t_}c_W2ZD(PxA`XD<}TXl`qE*0Sa$_WA_=_)%UvilEN>Tl$cBis8yFcv z0$C1}tU^3QtN|-)`r}OH{ql?qJ5c5S)F+e#CyyK4zaYlL4&hPnX!c zU;$B>^1&s~cgJD=>;XVBPNPn@3YwjTr|MnUo|!BwY_MXBcldN;nHRL^e?xbK&!->d6eb8YK(lei zb8&7J{DPl}OJE8CU~dy_6kIz1YKQHx0jqj{A?O_wbi1Fiq{SKizF>&}q?ASM>D?rEP=prj zoL#_6CgjERXMH3PoY}q( z=}Y_m{^ucko*2xX>G;tcXW)qPq$70-jwFUB0JZ13 z-t2j#kFy7h9t}p)+s$&_ec(ZoXS5n?l-(qsyQ%Vw_v`(|cQbYo7rrLZt(R_;&FgY$ zVW+Zw9H&QNjB5AuKlRm^%A|3u-ogi^la1pjM{H6)*Xty1(0B{%K}pLfXJvW^L%v(p zN-7SkY_N`1PUStLy2NTXQOsOULD}IoB!3s7X`}7T$M{X&5m(C{cKAk=5`RpT-h?ve zH(Fk0GZX;viV7T`{%slgemY5VL+oTSI#Sw82Xj_a4V)L_|K|)??(G_T?|G@gER5lq zPf#wZ5?T48=k2ROIEhhQ;qe1_y0`F6*II(vidBMvOOSi8Xca}r9DIP8s%+K>xs|vg z)4CjYRrA-W%CZ{-xO7Z#(Fn>`5ImoRadnv~>p>vXeh^eym&%H9yCy*O_efBT>pLXw zlGr2hLlT#X%4k&9H3cv!8Rawh)Ut&wT(?ncG#aj3Z`h4nW=(ffzenpS&HJ6|Lev9q z=x%K;$o{q2;1O=wba)k;JF~ww8}HLfx)k`W*~pl#-sU>(w`W7zT*A%mx|}b=6*gDq wuD#f6g6eNB-ugBjii~)hb!For_63R`P)5t>?6%$Dt>vGnae=7E?>{yBzyE#;DF6Tf literal 0 HcmV?d00001 diff --git a/models/engine/db_storage.py b/models/engine/db_storage.py index b8e7d291e6f..6d2d99d946e 100755 --- a/models/engine/db_storage.py +++ b/models/engine/db_storage.py @@ -74,3 +74,43 @@ def reload(self): def close(self): """call remove() method on the private session attribute""" self.__session.remove() + + def get(self, cls, id): + """A method to retrieve one object. + + Args: + id (str): string representing the object ID + """ + if cls is None or id is None or not isinstance(id, str): + return None + if isinstance(cls, str): # To convert cls to class object if string. + try: + cls = globals()[cls] + except Exception: + pass + + self.reload() + all_cls_objs = self.all(cls) + if all_cls_objs == {}: + return None + + for obj in all_cls_objs: + class_name = obj.split(".")[0] + try: + class_name = globals()[class_name] + except Exception: + pass + if cls == class_name and id == obj.split(".")[1]: + return all_cls_objs[obj] + + return None + + def count(self, cls=None): + """A method to count the number of objects in storage. + + Args: + cls (class, optional): The class object. Defaults to None. + """ + self.reload() + all_cls_objs = self.all(cls) + return len(all_cls_objs) diff --git a/models/engine/file_storage.py b/models/engine/file_storage.py index c8cb8c1764d..080b66450f4 100755 --- a/models/engine/file_storage.py +++ b/models/engine/file_storage.py @@ -59,7 +59,7 @@ def reload(self): pass def delete(self, obj=None): - """delete obj from __objects if it’s inside""" + """delete obj from __objects if it's inside""" if obj is not None: key = obj.__class__.__name__ + '.' + obj.id if key in self.__objects: @@ -68,3 +68,43 @@ def delete(self, obj=None): def close(self): """call reload() method for deserializing the JSON file to objects""" self.reload() + + def get(self, cls, id): + """A method to retrieve one object. + + Args: + id (str): string representing the object ID + """ + if cls is None or id is None or not isinstance(id, str): + return None + if isinstance(cls, str): # To convert cls to class object if string. + try: + cls = globals()[cls] + except Exception: + pass + + self.reload() + all_cls_objs = self.all(cls) + if all_cls_objs == {}: + return None + + for obj in all_cls_objs: + class_name = obj.split(".")[0] + try: + class_name = globals()[class_name] + except Exception: + pass + if cls == class_name and id == obj.split(".")[1]: + return all_cls_objs[obj] + + return None + + def count(self, cls=None): + """A method to count the number of objects in storage. + + Args: + cls (class, optional): The class object. Defaults to None. + """ + self.reload() + all_cls_objs = self.all(cls) + return len(all_cls_objs) diff --git a/test_get_count.py b/test_get_count.py new file mode 100755 index 00000000000..18194dfce69 --- /dev/null +++ b/test_get_count.py @@ -0,0 +1,11 @@ +#!/usr/bin/python3 +""" Test .get() and .count() methods +""" +from models import storage +from models.state import State + +print("All objects: {}".format(storage.count())) +print("State objects: {}".format(storage.count(State))) + +first_state_id = list(storage.all(State).values())[0].id +print("First state: {}".format(storage.get(State, first_state_id))) diff --git a/tests/__pycache__/test_console.cpython-38.pyc b/tests/__pycache__/test_console.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..596a49a71035c90b269db6570d48462bf9e2dfa4 GIT binary patch literal 1879 zcmcIl%Wm676rJHiWMnxn*KGPj#5TPb2Ov6s%ose64FekfI90K%wznQ)m`69EX#NS28lHYgix zIfb~h$A?M?Umrew7mOieN6H`c6+NPF0n$r)Oka6N(7&*v#b^6uN8WmR%m!$qRaVIdNslvFyo zok92SnJQsNy4xE}LmTXi{YPp0IZk_8jkrix@?DYdvEir?+OEJc2xXoeR9TUBj5Jxn z8fR1A23i!uG(->Dwv^CSVWvcN5W}5KC8gPXJW|``Hp>fH3ijK>O{7yh%jT%*8{qbp_>E3pyzh8zf+2%{U$wD_wYNMobZ6*giF95H6wjZ}A3C9GeFa!M77<}8(s)=pQm1`2v;pj?L) z8p$Uf>MZase_U-J^YPgz{AGKv-Io(c4oGfyLw&$KsBfMhJ;$WF3>)i)>IxKgWnqC@ zgC6w-nsqcNrnAJktB@@$f~*G0=iF_;qVwF{TdKiNxEXX~8#7jB6M?77W@p4~hcUc| znvn+bMFff$g!&52*J$Rs<7${d3V#t;aTyZRfW{HNuD=^MzOKT!jo=ToFLI+IXr*yg ljtr)Ux`u({{dq-`g`kf(u5+(m?cM5P=LBfgA@QE@lA|DGb33nv8xc8Hzx{2;!Hqeo=mYiN0fI zkyD;id~!~HUTS=qv3^NvaY-?ljL*$aNzEzNkB`sH%PfhH*DI*J#bE;!EX_%^0~z)i Gh#3GSJ0Qsb literal 0 HcmV?d00001 diff --git a/tests/test_models/__pycache__/test_amenity.cpython-38.pyc b/tests/test_models/__pycache__/test_amenity.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2f2b6d7c9755afd56898c03a053af2febc5b029 GIT binary patch literal 4641 zcmb_gOLH5?5#BczAV|?N%Mo2tw02BeNF>T7C$S>Sj^4IXW!PoWhrs39T4DzxNMIM5 z8A!zymX%j;q?K1zT4CXC?a*y4p(jkM=&6=H_0)Z0HEP9&wflJ{lWry= zxx=C@Cgj~d%er#^LEaWoyO#*TMC~W&Xf|vaw!*HK%e>S{-B;G3-SSf}^~VKN#HqE61oFN-AU&}{gs0yqb(EmiF)lYQ3T zW?ZOB`BGKuiq0@=lUAx)LKt@dqTB9?6N}gJ)}KGU&huPezuV>avU_p6muD<~{>gRy z3N7P4p)E|iTxD~xuWEwH?+5qEZ|BJd2f}iTcNY-boKBmwpSTc@UT^2N^|J<5l0T^rVx{$rfyTtrvMqc0Mkb+f0UvDrNFl{a96o2vGN z-2CORn=-Ye=@56iJtou=ahc19&xT1))nzV|UThXSag`@nucLfgL8yQ;G3-h03L}=G zi@HSc$227_O-Zsgi%ScChbcnud8cmI?V9cU-@tKqx}i4TxWaGhiO;8=pqG|RIh!?S zc!r;YImLUw`c>^E{uU-TIT4OuAVD0S0q*^?&DOmodcVgv7SX%01;u|Iz1d~vAS41! z$oxku^z}Kzu8^ZU&9DH}p9xxGiicPb)JU?;@Jx;`E`1~?% zJR}j3c#p*UB>q5Rfo~UQDS_w-c&9i~R6C8+RZ_RqXbHK%CLF#~we(~2i zI0pz&46%oj*@OTh>SmMF)@O1jPlblBSzLN~OB_U|FFK8}W@x}Ecp0E0v{XRBI+0VX z8;+)>@+g138FQL3g02c)SB*RgYr| z>Sja}1d*S-ZY<{XW`2>xB@!QypzXr1keHH3wyy|ky9y)oG`7!)5~gUhKa>H+U-=D&Fzy@1SEYm z0Ux0utwU=}KB+^R33NoYL+2Rv<>c8}cy`Tm>S@wx_n2%xetnl>n;33uc!_?K%1=4n zRMpy?p+rpM1l7-QK;wPD2qih7G1gWLtN8C|N{Ay{b#nuKWlC_|GENAIN>wIFwS9 zM^jKIZ#NanDiip0%)0?4RbbM%stTF&&B)2`hDM!Yp9U2oB)mq!RM9o zUThGrN=6wMowdR#Zv|LP$A*8Qk)n>*9s{yRHvHrQcLzRj)-6M7dY0rBBr5n$6MNF< z&-a;GI0yJg!3gJq($BOWW}?3`?JrLVr3dMR@I2`ana*0;o1DoZ&sZ9Dc;27*IN=QC zDd#v(6>A&+ytdK5wvldae06K%>suR7Ha9x_Gni#|$aQLc4AE?aria3V*&BaHOS#xy zoMx#Itqz@J_59Lrtx(2g(xYI&3AIJny*=kTW5N%Zr!$4+cy^$jwq~!{7wqElYh7l( zIp-`F%S^Tw)vIP}r8ZR&yNE}02sImP}6G z!zE55jb*bWC1_6i@J~r-8_Hwn<~Dx6Fh^>Wklw}&6%O%32w7tSLrD7H$3&g~_0nf) cqr%&!H2;ELsDDK8ygEn`B0rgX;GVzw3(0V`&;S4c literal 0 HcmV?d00001 diff --git a/tests/test_models/__pycache__/test_base_model.cpython-38.pyc b/tests/test_models/__pycache__/test_base_model.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d56242835b04074ae68565bbfb11849157be6e7c GIT binary patch literal 5779 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 ZtKH``q501#2Zenerh>xi(A8Km-Zw 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 literal 0 HcmV?d00001 diff --git a/tests/test_models/__pycache__/test_user.cpython-38.pyc b/tests/test_models/__pycache__/test_user.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b3f005307eb9e5ff4d5b10da3592e61de9653f2c GIT binary patch literal 5460 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 N=A_zz4E_wn3;^`VC7A#K literal 0 HcmV?d00001 diff --git a/tests/test_models/test_engine/__pycache__/test_db_storage.cpython-38.pyc b/tests/test_models/test_engine/__pycache__/test_db_storage.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a989397cf2c96f3b4199cfbd7c751ee8c338fcfa GIT binary patch literal 4249 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