/AirBnB_clone

Welcome to the AirBnB clone project!. This is the first full web application project in the ALX Software Engineering Programme

Primary LanguagePython

The AirBnB Clone Project

AirBnB Logo

Project Description

This project is an Airbnb clone, which aims to replicate the core functionality of the Airbnb website. The project will be developed using Python, JSON for file storage, My SQL, Flask web framework, Restful API, HTML and Javascript, and will implement features such as user authentication, property search and booking, messaging, and payment processing.

Project Scope

The project will focus on implementing the core features of the Airbnb website, while simplifying some of the more complex features (such as the Airbnb Experiences and Host features). The project will be developed using a modern tech stack, including Python, JSON for file storage, My SQL, Flask web framework, Restful API, HTML and Javascript and will use third-party libraries and APIs where necessary.

The project will be developed using an Agile methodology, with a focus on delivering working software in short iterations. The project will be divided into sprints, each of which will aim to deliver a set of features or improvements.

Project Goals

The goal of this project is to create a fully-functional Airbnb clone that provides a similar user experience to the original website. After 4 months, you will have a complete web application composed by:

  • A command interpreter to manipulate data without a visual interface, like in a Shell (perfect for development and debugging)
  • A website (the front-end) that shows the final product to everybody: static and dynamic
  • A database or files that store data (data = objects)
  • An API that provides a communication interface between the front-end and your data (retrieve, create, delete, update them)

Description of the command interpreter:

The interface of the application is just like the Bash shell except that this has a limited number of accepted commands that were solely defined for the purposes of the usage of the AirBnB website.

This command line interpreter serves as the frontend of the web app where users can interact with the backend which was developed with python OOP programming.

Some of the commands available are:

  • show
  • create
  • update
  • destroy
  • count

And as part of the implementation of the command line interpreter coupled with the backend and file storage system, the folowing actions can be performed:

  • Creating new objects (ex: a new User or a new Place)
  • Retrieving an object from a file, a database etc…
  • Doing operations on objects (count, compute stats, etc…)
  • Updating attributes of an object
  • Destroying an object

How to start it

These instructions will get you a copy of the project up and running on your local machine (Linux distro) for development and testing purposes.

Installing

You will need to clone the repository of the project from Github. This will contain the simple shell program and all of its dependencies.

git clone https://github.com/Artista001/AirBnB_clone.git

After cloning the repository you will have a folder called AirBnB_clone. In here there will be several files that allow the program to work.

/console.py : The main executable of the project, the command interpreter.

models/engine/file_storage.py: Class that serializes instances to a JSON file and deserializes JSON file to instances

models/__ init __.py: A unique FileStorage instance for the application

models/base_model.py: Class that defines all common attributes/methods for other classes.

models/user.py: User class that inherits from BaseModel

models/state.py: State class that inherits from BaseModel

models/city.py: City class that inherits from BaseModel

models/amenity.py: Amenity class that inherits from BaseModel

models/place.py: Place class that inherits from BaseModel

models/review.py: Review class that inherits from BaseModel

How to use it

It can work in two different modes:

Interactive and Non-interactive.

In Interactive mode, the console will display a prompt (hbnb) indicating that the user can write and execute a command. After the command is run, the prompt will appear again a wait for a new command. This can go indefinitely as long as the user does not exit the program.

$ ./console.py
(hbnb) help

Documented commands (type help <topic>):
========================================
EOF  help  quit

(hbnb) 
(hbnb) 
(hbnb) quit
$

In Non-intAOAeractive mode, the shell will need to be run with a command input piped into its execution so that the command is run as soon as the Shell starts. In this mode no prompt will appear, and no further input will be expected from the user.

$ echo "help" | ./console.py
(hbnb)

Documented commands (type help <topic>):
========================================
EOF  help  quit
(hbnb) 
$
$ cat test_help
help
$
$ cat test_help | ./console.py
(hbnb)

Documented commands (type help <topic>):
========================================
EOF  help  quit
(hbnb) 
$

Format of Command Input

In order to give commands to the console, these will need to be piped through an echo in case of Non-interactive mode.

In Interactive Mode the commands will need to be written with a keyboard when the prompt appears and will be recognized when an enter key is pressed (new line). As soon as this happens, the console will attempt to execute the command through several means or will show an error message if the command didn't run successfully. In this mode, the console can be exited using the CTRL + D combination, CTRL + C, or the command quit or EOF.

Arguments

Most commands have several options or arguments that can be used when executing the program. In order for the Shell to recognize those parameters, the user must separate everything with spaces.

Example:


user@ubuntu:~/AirBnB$ ./console.py
(hbnb) create BaseModel
49faff9a-6318-451f-87b6-910505c55907
user@ubuntu:~/AirBnB$ ./console.py

or

user@ubuntu:~/AirBnB$ ./console.py $ echo "create BaseModel" | ./console.py
(hbnb)
e37ebcd3-f8e1-4c1f-8095-7a019070b1fa
(hbnb)
user@ubuntu:~/AirBnB$ ./console.py

Available commands and what they do

The recognizable commands by the interpreter are the following:

Command Description
quit or EOF Exits the program
Usage By itself
----- -----
help Provides a text describing how to use a command.
Usage By itself --or-- help <command>
----- -----
create Creates a new instance of a valid Class, saves it (to the JSON file) and prints the id. Valid classes are: BaseModel, User, State, City, Amenity, Place, Review.
Usage create <class name>
----- -----
show Prints the string representation of an instance based on the class name and id
Usage show <class name> <id> --or-- <class name>.show(<id>)
----- -----
destroy Deletes an instance based on the class name and id (saves the change into a JSON file).
Usage destroy <class name> <id> --or-- .destroy()
----- -----
all Prints all string representation of all instances based or not on the class name.
Usage By itself or all <class name> --or-- <class name>.all()
----- -----
update Updates an instance based on the class name and id by adding or updating attribute (saves the changes into a JSON file).
Usage update <class name> <id> <attribute name> "<attribute value>" ---or--- <class name>.update(<id>, <attribute name>, <attribute value>) --or-- <class name>.update(<id>, <dictionary representation>)
----- -----
count Retrieve the number of instances of a class.
Usage <class name>.count()

Project Deliverables

The project will deliver the following items:

  • Source code: The project source code will be available on GitHub, and will be well-documented and modular.
  • Deployment: The project will be deployed to a production environment where it will be accessible to users.
  • Documentation: The project will be accompanied by documentation a README file that explains how to install, configure, and use the application.

Conclusion

This project aims to create a functional Airbnb clone that replicates the core features of the original website. By using modern technologies and development methodologies, the project will provide a valuable learning experience for us as we seek to improve skills in software development.

Author

Samwuel Simiyu