holbertonschool-AirBnB_clone_v4
holbertonschool-AirBnB_clone_v4 copied to clipboard
AirBnB clone (V4) called "HBNB" that includes a command interpreter, website, database and a RESTful API.
HBNB - The Console
Description
This repository contains version 4 of a project to build a clone of the AirBnB website. This version implements a console and an API to manage program data. Console commands and the API allow the user to create, update, and destroy objects, as well as manage file storage, using a JSON serialization system or using MySQL as the database, Flask was also an implementation in this version.
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...)
- Update attributes of an object
- Destroy an object
Table of Content
- Environment
- Installation
- File Descriptions
- Usage
- Examples of use
- API
- Bugs
- Authors
- License
Environment
This project is interpreted/tested on Ubuntu 14.04 LTS using python3 (version 3.4.3)
Installation
- Clone this repository:
git clone "https://github.com/alexaorrico/AirBnB_clone.git" - Access AirBnb directory:
cd AirBnB_clone - Run hbnb(interactively):
./consoleand enter command - Run hbnb(non-interactively):
echo "<command>" | ./console.py
File Descriptions
console.py - the console contains the entry point of the command interpreter. List of commands this console current supports:
EOF- exits consolequit- exits console<emptyline>- overwrites default emptyline method and does nothingcreate- Creates a new instance ofBaseModel, saves it (to the JSON file) and prints the iddestroy- 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).
models/ directory contains classes used for this project:
base_model.py - The BaseModel class from which future classes will be derived
def __init__(self, *args, **kwargs)- Initialization of the base modeldef __str__(self)- String representation of the BaseModel classdef save(self)- Updates the attributeupdated_atwith the current datetimedef to_dict(self)- returns a dictionary containing all keys/values of the instance
Classes inherited from Base Model:
- amenity.py
- city.py
- place.py
- review.py
- state.py
- user.py
/models/engine directory contains File Storage class that handles JASON serialization and deserialization :
file_storage.py - serializes instances to a JSON file & deserializes back to instances
def all(self)- returns the dictionary __objectsdef new(self, obj)- sets in __objects the obj with key.id def save(self)- serializes __objects to the JSON file (path: __file_path)def reload(self)- deserializes the JSON file to __objects
/tests directory contains all unit test cases for this project:
/test_models/test_base_model.py - Contains the TestBaseModel and TestBaseModelDocs classes TestBaseModelDocs class:
def setUpClass(cls)- Set up for the doc testsdef test_pep8_conformance_base_model(self)- Test that models/base_model.py conforms to PEP8def test_pep8_conformance_test_base_model(self)- Test that tests/test_models/test_base_model.py conforms to PEP8def test_bm_module_docstring(self)- Test for the base_model.py module docstringdef test_bm_class_docstring(self)- Test for the BaseModel class docstringdef test_bm_func_docstrings(self)- Test for the presence of docstrings in BaseModel methods
TestBaseModel class:
def test_is_base_model(self)- Test that the instatiation of a BaseModel worksdef test_created_at_instantiation(self)- Test created_at is a pub. instance attribute of type datetimedef test_updated_at_instantiation(self)- Test updated_at is a pub. instance attribute of type datetimedef test_diff_datetime_objs(self)- Test that two BaseModel instances have different datetime objects
/test_models/test_amenity.py - Contains the TestAmenityDocs class:
def setUpClass(cls)- Set up for the doc testsdef test_pep8_conformance_amenity(self)- Test that models/amenity.py conforms to PEP8def test_pep8_conformance_test_amenity(self)- Test that tests/test_models/test_amenity.py conforms to PEP8def test_amenity_module_docstring(self)- Test for the amenity.py module docstringdef test_amenity_class_docstring(self)- Test for the Amenity class docstring
/test_models/test_city.py - Contains the TestCityDocs class:
def setUpClass(cls)- Set up for the doc testsdef test_pep8_conformance_city(self)- Test that models/city.py conforms to PEP8def test_pep8_conformance_test_city(self)- Test that tests/test_models/test_city.py conforms to PEP8def test_city_module_docstring(self)- Test for the city.py module docstringdef test_city_class_docstring(self)- Test for the City class docstring
/test_models/test_file_storage.py - Contains the TestFileStorageDocs class:
def setUpClass(cls)- Set up for the doc testsdef test_pep8_conformance_file_storage(self)- Test that models/file_storage.py conforms to PEP8def test_pep8_conformance_test_file_storage(self)- Test that tests/test_models/test_file_storage.py conforms to PEP8def test_file_storage_module_docstring(self)- Test for the file_storage.py module docstringdef test_file_storage_class_docstring(self)- Test for the FileStorage class docstring
/test_models/test_place.py - Contains the TestPlaceDoc class:
def setUpClass(cls)- Set up for the doc testsdef test_pep8_conformance_place(self)- Test that models/place.py conforms to PEP8.def test_pep8_conformance_test_place(self)- Test that tests/test_models/test_place.py conforms to PEP8.def test_place_module_docstring(self)- Test for the place.py module docstringdef test_place_class_docstring(self)- Test for the Place class docstring
/test_models/test_review.py - Contains the TestReviewDocs class:
def setUpClass(cls)- Set up for the doc testsdef test_pep8_conformance_review(self)- Test that models/review.py conforms to PEP8def test_pep8_conformance_test_review(self)- Test that tests/test_models/test_review.py conforms to PEP8def test_review_module_docstring(self)- Test for the review.py module docstringdef test_review_class_docstring(self)- Test for the Review class docstring
/test_models/state.py - Contains the TestStateDocs class:
def setUpClass(cls)- Set up for the doc testsdef test_pep8_conformance_state(self)- Test that models/state.py conforms to PEP8def test_pep8_conformance_test_state(self)- Test that tests/test_models/test_state.py conforms to PEP8def test_state_module_docstring(self)- Test for the state.py module docstringdef test_state_class_docstring(self)- Test for the State class docstring
/test_models/user.py - Contains the TestUserDocs class:
def setUpClass(cls)- Set up for the doc testsdef test_pep8_conformance_user(self)- Test that models/user.py conforms to PEP8def test_pep8_conformance_test_user(self)- Test that tests/test_models/test_user.py conforms to PEP8def test_user_module_docstring(self)- Test for the user.py module docstringdef test_user_class_docstring(self)- Test for the User class docstring
Examples of use
vagrantAirBnB_clone$./console.py
(hbnb) help
Documented commands (type help <topic>):
========================================
EOF all create destroy help quit show update
(hbnb) all MyModel
** class doesn't exist **
(hbnb) create BaseModel
7da56403-cc45-4f1c-ad32-bfafeb2bb050
(hbnb) all BaseModel
[[BaseModel] (7da56403-cc45-4f1c-ad32-bfafeb2bb050) {'updated_at': datetime.datetime(2017, 9, 28, 9, 50, 46, 772167), 'id': '7da56403-cc45-4f1c-ad32-bfafeb2bb050', 'created_at': datetime.datetime(2017, 9, 28, 9, 50, 46, 772123)}]
(hbnb) show BaseModel 7da56403-cc45-4f1c-ad32-bfafeb2bb050
[BaseModel] (7da56403-cc45-4f1c-ad32-bfafeb2bb050) {'updated_at': datetime.datetime(2017, 9, 28, 9, 50, 46, 772167), 'id': '7da56403-cc45-4f1c-ad32-bfafeb2bb050', 'created_at': datetime.datetime(2017, 9, 28, 9, 50, 46, 772123)}
(hbnb) destroy BaseModel 7da56403-cc45-4f1c-ad32-bfafeb2bb050
(hbnb) show BaseModel 7da56403-cc45-4f1c-ad32-bfafeb2bb050
** no instance found **
(hbnb) quit
API
This project have 6 entities, all HTTP methods are supported:
- /amenities
- /cities
- /places
- /reviews
- /states
- /users
Note: Resources have relations.
The available nested routes are:
- /states/
<state_id>/cities - /places/
<place_id>/reviews - /cities/
<city_id>/places
Bugs
No known bugs at this time.
Authors
- Alexa Orrico - Github
- Jennifer Huang - Github
- Juan Esteban Duque - Github
- Felipe Villamizar - Github
- Andres Solarte - Github
License
Public Domain. No copy write protection.