Skip to content

ZeynalMustafayev/holbertonschool-AirBnB_clone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

62 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Holbertonschool-AirBnB_clone

An AirBnB clone.

HolbertonAirBnB logo

Description 🏠

HolbertonBnB is a complete RESTful web application, integrating file and database (MySQL) storage in a back-end API with front-end interfacing in a clone of AirBnB. The front-end is designed using HTML5/CSS3 and is served using Python Flask. The application is configured on a distributed system - two web servers and one load balancer - with Nginx and HAProxy.

HolbertonBnB is still in active development, with complete functionality set to deploy in the coming month:

  • Complete integration of a RESTful API
  • Full configuration of website with domain name
  • Serving of dynamic content using JavaScript

Classes 🆑

HolbertonBnB supports 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

FileStorage

The default mode.

In FileStorage mode, 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.

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

Remember, the console can be run with storage instantiated in either FileStorage or DBStorage mode. The above examples instantiate FileStorage by default, but DBStorage can be instantiated like so:

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 <param 1 name>=<param 1 value> <param 2 name>=<param 2 value> ...

Creates a new instance of a given class. The class' ID is printed and the instance is saved to the file file.json. When passing parameter key/value pairs, any underscores contained in value strings are replaced by spaces.

$ ./console.py (hbnb) create BaseModel 119be863-6fe5-437e-a180-b9892e8746b8 (hbnb) (hbnb) create State name="California" (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"}, {'id': 'd80e0344-63eb-43 4a-b1e0-07783522124e', 'created_at': datetime.datetime(2017, 11, 10, 4, 41, 7, 842160), 'updated_at': datetime.datetime(2017, 11, 10, 4, 41, 7, 842235), 'name ': 'California'}}

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.

$ ./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 ""

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).

$ ./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)

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:

$ python3 unittest -m tests/test_console.py

Authors ✒️

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published