Giter Club home page Giter Club logo

airbnb_clone's Introduction

HolbertonBnB logo

HolbertonBnB An AirBnB clone.

Description ๐Ÿ  HolbertonBnB is a complete web application, integrating database storage, a back-end API, and front-end interfacing in a clone of AirBnB.

The project currently only implements the back-end console.

Classes ๐Ÿ†‘ HolbertonBnB utilizes the following classes:

BaseModel FileStorage User State City Amenity Place Review PUBLIC INSTANCE ATTRIBUTES id created_at updated_at Inherits from BaseModel Inherits from BaseModel Inherits from BaseModel Inherits from BaseModel Inherits from BaseModel Inherits from BaseModel PUBLIC INSTANCE METHODS save to_dict all new save reload "" "" "" "" "" "" PUBLIC CLASS ATTRIBUTES email password first_name last_name name state_id name name city_id user_id name description number_rooms number_bathrooms max_guest price_by_night latitude longitude amenity_ids place_id user_id text PRIVATE CLASS ATTRIBUTES file_path objects Storage ๐Ÿ›„ The above classes are handled by the abstracted storage engine defined in the FileStorage class.

Every time the backend is initialized, HolbertonBnB instantiates an instance of FileStorage called storage. The storage object is loaded/re-loaded from any class instances stored in the JSON file file.json. As class instances are created, updated, or deleted, the storage object is used to register corresponding changes in the file.json.

Console ๐Ÿ’ป The console is a command line interpreter that permits management of the backend of HolbertonBnB. It can be used to handle and manipulate all classes utilized by the application (achieved by calls on the storage object defined above).

Using the Console The HolbertonBnB console can be run both interactively and non-interactively. To run the console in non-interactive mode, pipe any command(s) into an execution of the file console.py at the command line.

$ echo "help" | ./console.py (hbnb) Documented commands (type help ):

EOF all count create destroy help quit show update

(hbnb) $ Alternatively, to use the HolbertonBnB console in interactive mode, run the file console.py by itself:

$ ./console.py While running in interactive mode, the console displays a prompt for input:

$ ./console.py (hbnb) To quit the console, enter the command quit, or input an EOF signal (ctrl-D).

$ ./console.py (hbnb) quit $ $ ./console.py (hbnb) EOF $ Console Commands The HolbertonBnB console supports the following commands:

create Usage: create Creates a new instance of a given class. The class' ID is printed and the instance is saved to the file file.json.

$ ./console.py (hbnb) create BaseModel 119be863-6fe5-437e-a180-b9892e8746b8 (hbnb) quit $ cat file.json ; echo "" {"BaseModel.119be863-6fe5-437e-a180-b9892e8746b8": {"updated_at": "2019-02-17T2 1:30:42.215277", "created_at": "2019-02-17T21:30:42.215277", "class": "Base Model", "id": "119be863-6fe5-437e-a180-b9892e8746b8"}} show Usage: show or .show() Prints the string representation of a class instance based on a given id.

$ ./console.py (hbnb) create User 1e32232d-5a63-4d92-8092-ac3240b29f46 (hbnb) (hbnb) show User 1e32232d-5a63-4d92-8092-ac3240b29f46 [User] (1e32232d-5a63-4d92-8092-ac3240b29f46) {'id': '1e32232d-5a63-4d92-8092-a c3240b29f46', 'created_at': datetime.datetime(2019, 2, 17, 21, 34, 3, 635828), 'updated_at': datetime.datetime(2019, 2, 17, 21, 34, 3, 635828)} (hbnb) (hbnb) User.show(1e32232d-5a63-4d92-8092-ac3240b29f46) [User] (1e32232d-5a63-4d92-8092-ac3240b29f46) {'id': '1e32232d-5a63-4d92-8092-a c3240b29f46', 'created_at': datetime.datetime(2019, 2, 17, 21, 34, 3, 635828), 'updated_at': datetime.datetime(2019, 2, 17, 21, 34, 3, 635828)} (hbnb) destroy Usage: destroy or .destroy() Deletes a class instance based on a given id. The storage file file.json is updated accordingly.

$ ./console.py (hbnb) create State d2d789cd-7427-4920-aaae-88cbcf8bffe2 (hbnb) create Place 3e-8329-4f47-9947-dca80c03d3ed (hbnb) (hbnb) destroy State d2d789cd-7427-4920-aaae-88cbcf8bffe2 (hbnb) Place.destroy(03486a3e-8329-4f47-9947-dca80c03d3ed) (hbnb) quit $ cat file.json ; echo "" {} all Usage: all or all or .all() Prints the string representations of all instances of a given class. If no class name is provided, the command prints all instances of every class.

$ ./console.py (hbnb) create BaseModel fce2124c-8537-489b-956e-22da455cbee8 (hbnb) create BaseModel 450490fd-344e-47cf-8342-126244c2ba99 (hbnb) create User b742dbc3-f4bf-425e-b1d4-165f52c6ff81 (hbnb) create User 8f2d75c8-fb82-48e1-8ae5-2544c909a9fe (hbnb) (hbnb) all BaseModel ["[BaseModel] (450490fd-344e-47cf-8342-126244c2ba99) {'updated_at': datetime.da tetime(2019, 2, 17, 21, 45, 5, 963516), 'created_at': datetime.datetime(2019, 2 , 17, 21, 45, 5, 963516), 'id': '450490fd-344e-47cf-8342-126244c2ba99'}", "[Bas eModel] (fce2124c-8537-489b-956e-22da455cbee8) {'updated_at': datetime.datetime (2019, 2, 17, 21, 43, 56, 899348), 'created_at': datetime.datetime(2019, 2, 17, 21, 43, 56, 899348), 'id': 'fce2124c-8537-489b-956e-22da455cbee8'}"] (hbnb) (hbnb) User.all() ["[User] (8f2d75c8-fb82-48e1-8ae5-2544c909a9fe) {'updated_at': datetime.datetim e(2019, 2, 17, 21, 44, 44, 428413), 'created_at': datetime.datetime(2019, 2, 17 , 21, 44, 44, 428413), 'id': '8f2d75c8-fb82-48e1-8ae5-2544c909a9fe'}", "[User] (b742dbc3-f4bf-425e-b1d4-165f52c6ff81) {'updated_at': datetime.datetime(2019, 2 , 17, 21, 44, 15, 974608), 'created_at': datetime.datetime(2019, 2, 17, 21, 44, 15, 974608), 'id': 'b742dbc3-f4bf-425e-b1d4-165f52c6ff81'}"] (hbnb) (hbnb) all ["[User] (8f2d75c8-fb82-48e1-8ae5-2544c909a9fe) {'updated_at': datetime.datetim e(2019, 2, 17, 21, 44, 44, 428413), 'created_at': datetime.datetime(2019, 2, 17 , 21, 44, 44, 428413), 'id': '8f2d75c8-fb82-48e1-8ae5-2544c909a9fe'}", "[BaseMo del] (450490fd-344e-47cf-8342-126244c2ba99) {'updated_at': datetime.datetime(20 19, 2, 17, 21, 45, 5, 963516), 'created_at': datetime.datetime(2019, 2, 17, 21, 45, 5, 963516), 'id': '450490fd-344e-47cf-8342-126244c2ba99'}", "[User] (b742db c3-f4bf-425e-b1d4-165f52c6ff81) {'updated_at': datetime.datetime(2019, 2, 17, 2 1, 44, 15, 974608), 'created_at': datetime.datetime(2019, 2, 17, 21, 44, 15, 97 4608), 'id': 'b742dbc3-f4bf-425e-b1d4-165f52c6ff81'}", "[BaseModel] (fce2124c-8 537-489b-956e-22da455cbee8) {'updated_at': datetime.datetime(2019, 2, 17, 21, 4 3, 56, 899348), 'created_at': datetime.datetime(2019, 2, 17, 21, 43, 56, 899348 ), 'id': 'fce2124c-8537-489b-956e-22da455cbee8'}"] (hbnb) count Usage: count or .count() Retrieves the number of instances of a given class.

$ ./console.py (hbnb) create Place 12c73223-f3d3-4dec-9629-bd19c8fadd8a (hbnb) create Place aa229cbb-5b19-4c32-8562-f90a3437d301 (hbnb) create City 22a51611-17bd-4d8f-ba1b-3bf07d327208 (hbnb) (hbnb) count Place 2 (hbnb) city.count() 1 (hbnb) update Usage: update "" or .update(, , ) or .update( , ). Updates a class instance based on a given id with a given key/value attribute pair or dictionary of attribute pairs. If update is called with a single key/value attribute pair, only "simple" attributes can be updated (ie. not id, created_at, and updated_at). However, any attribute can be updated by providing a dictionary.

$ ./console.py (hbnb) create User 6f348019-0499-420f-8eec-ef0fdc863c02 (hbnb) (hbnb) update User 6f348019-0499-420f-8eec-ef0fdc863c02 first_name "Holberton" (hbnb) show User 6f348019-0499-420f-8eec-ef0fdc863c02 [User] (6f348019-0499-420f-8eec-ef0fdc863c02) {'created_at': datetime.datetime( 2019, 2, 17, 21, 54, 39, 234382), 'first_name': 'Holberton', 'updated_at': date time.datetime(2019, 2, 17, 21, 54, 39, 234382), 'id': '6f348019-0499-420f-8eec- ef0fdc863c02'} (hbnb) (hbnb) User.update(6f348019-0499-420f-8eec-ef0fdc863c02, address, "98 Mission S t") (hbnb) User.show(6f348019-0499-420f-8eec-ef0fdc863c02) [User] (6f348019-0499-420f-8eec-ef0fdc863c02) {'created_at': datetime.datetime( 2019, 2, 17, 21, 54, 39, 234382), 'address': '98 Mission St', 'first_name': 'Ho lberton', 'updated_at': datetime.datetime(2019, 2, 17, 21, 54, 39, 234382), 'id ': '6f348019-0499-420f-8eec-ef0fdc863c02'} (hbnb) (hbnb) User.update(6f348019-0499-420f-8eec-ef0fdc863c02, {'email': 'holberton@h olberton.com', 'last_name': 'School'}) [User] (6f348019-0499-420f-8eec-ef0fdc863c02) {'email': '[email protected] m', 'first_name': 'Holberton', 'updated_at': datetime.datetime(2019, 2, 17, 21, 54, 39, 234382), 'address': '98 Mission St', 'last_name': 'School', 'id': '6f34 8019-0499-420f-8eec-ef0fdc863c02', 'created_at': datetime.datetime(2019, 2, 17, 21, 54, 39, 234382)} (hbnb) Testing ๐Ÿ“ Unittests for the HolbertonBnB project are defined in the tests folder. To run the entire test suite simultaneously, execute the following command:

$ python3 unittest -m discover tests Alternatively, you can specify a single test file to run at a time:

airbnb_clone's People

Contributors

yora3vs3 avatar careennaitore avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.