This is the first part of the AirBnB clone project where we worked on the backend of the project whiles interfacing it with a console application with the help of the cmd module in python.
Data (python objects) generated are stored in a json file and can be accessed with the help of the json module in python
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
/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 applicationmodels/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
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.
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
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() |
Enoch Omosebi