Skip to content

Python command-line tool for managing AirBnB objects in a web application project.

Notifications You must be signed in to change notification settings

RaphSchp/holbertonschool-AirBnB_clone

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

36 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🏑 AirBnB clone - The console πŸ§‘β€πŸ’»

Holberton School Logo

UBUNTUPYTHON

πŸ“ŒDescription

This project is to understand what is Python and how use it, it was made in the software development program of Holberton School.

πŸ“šBackground Context

Welcome to the AirBnB clone project!

Before starting, please read the AirBnB concept page.

First step: Write a command interpreter to manage your AirBnB objects.

This is the first step towards building your first full web application: the AirBnB clone. This first step is very important because you will use what you build during this project with all other following projects: HTML/CSS templating, database storage, API, front-end integration…

Each task is linked and will help you to:

  • put in place a parent class (called BaseModel) to take care of the initialization, serialization and deserialization of your future instances
  • create a simple flow of serialization/deserialization: Instance <-> Dictionary <-> JSON string <-> file
  • create all classes used for AirBnB (User, State, City, Place…) that inherit from BaseModel
  • create the first abstracted storage engine of the project: File storage.
  • create all unittests to validate all our classes and storage engine

What’s a command interpreter?

Do you remember the Shell? It’s exactly the same but limited to a specific use-case. In our case, we want to be able to manage the objects of our project:

  • 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

Learning Objectives

At the end of this project, you are expected to be able to explain to anyone, without the help of Google:

General

  • How to create a Python package
  • How to create a command interpreter in Python using the cmd module
  • What is Unit testing and how to implement it in a large project
  • How to serialize and deserialize a Class
  • How to write and read a JSON file
  • How to manage datetime
  • What is an UUID
  • What is *args and how to use it
  • What is **kwargs and how to use it
  • How to handle named arguments in a function

Requirements

Python Scripts

  • Allowed editors: vi, vim, emacs
  • All your files will be interpreted/compiled on Ubuntu 20.04 LTS using python3 (version 3.8.5)
  • All your files should end with a new line
  • The first line of all your files should be exactly #!/usr/bin/python3
  • A README.md file, at the root of the folder of the project, is mandatory
  • Your code should use the pycodestyle (version 2.7.*)
  • All your files must be executable
  • The length of your files will be tested using wc
  • All your modules should have a documentation (python3 -c 'print(__import__("my_module").__doc__)')
  • All your classes should have a documentation (python3 -c 'print(__import__("my_module").MyClass.__doc__)')
  • All your functions (inside and outside a class) should have a documentation (python3 -c 'print(__import__("my_module").my_function.__doc__)' and python3 -c 'print(__import__("my_module").MyClass.my_function.__doc__)')
  • A documentation is not a simple word, it’s a real sentence explaining what’s the purpose of the module, class or method (the length of it will be verified)

Python Unit Tests

  • Allowed editors: vi, vim, emacs
  • All your files should end with a new line
  • All your test files should be inside a folder tests
  • You have to use the unittest module
  • All your test files should be python files (extension: .py)
  • All your test files and folders should start by test_
  • Your file organization in the tests folder should be the same as your project
  • e.g., For models/base_model.py, unit tests must be in: tests/test_models/test_base_model.py
  • e.g., For models/user.py, unit tests must be in: tests/test_models/test_user.py
  • All your tests should be executed by using this command: python3 -m unittest discover tests
  • You can also test file by file by using this command: python3 -m unittest tests/test_models/test_base_model.py
  • All your modules should have a documentation (python3 -c 'print(__import__("my_module").__doc__)')
  • All your classes should have a documentation (python3 -c 'print(__import__("my_module").MyClass.__doc__)')
  • All your functions (inside and outside a class) should have a documentation (python3 -c 'print(__import__("my_module").my_function.__doc__)' and python3 -c 'print(__import__("my_module").MyClass.my_function.__doc__)')
  • We strongly encourage you to work together on test cases, so that you don’t miss any edge case

GitHub

There should be one project repository per group. If you clone/fork/whatever a project repository with the same name before the second deadline, you risk a 0% score.

More Info

Execution

Your shell should work like this in interactive mode:

$ ./console.py
(hbnb) help

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

(hbnb)
(hbnb)
(hbnb) quit
$

But also in non-interactive mode: (like the Shell project in C)

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

All tests should also pass in non-interactive mode: $ echo "python3 -m unittest discover tests" | bash

SCHEME

AirBnb clone - The Console

Description

This repository is the starting point for our ambitious AirBnB Clone project. Here, we've built a command-line interpreter to manage AirBnB objects, laying the foundation for a full web application. You'll find Python scripts, unit tests, and comprehensive documentation that demonstrate our commitment to quality and best practices.


Files

.
β”œβ”€β”€ AUTHORS
β”œβ”€β”€ README.md
β”œβ”€β”€ console.py
β”œβ”€β”€ file.json
β”œβ”€β”€ models
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ amenity.py
β”‚   β”œβ”€β”€ base_model.py
β”‚   β”œβ”€β”€ city.py
β”‚   β”œβ”€β”€ engine
β”‚   β”‚   β”œβ”€β”€ __init__.py
β”‚   β”‚   └── file_storage.py
β”‚   β”œβ”€β”€ place.py
β”‚   β”œβ”€β”€ review.py
β”‚   β”œβ”€β”€ state.py
β”‚   └── user.py
└── tests
    β”œβ”€β”€ __init__.py
    └── test_models
        β”œβ”€β”€ __init__.py
        β”œβ”€β”€ test_amenity.py
        β”œβ”€β”€ test_base_model.py
        β”œβ”€β”€ test_city.py
        β”œβ”€β”€ test_engine
        β”‚   β”œβ”€β”€ __init__.py
        β”‚   └── test_file_storage.py
        β”œβ”€β”€ test_place.py
        β”œβ”€β”€ test_review.py
        β”œβ”€β”€ test_state.py
        └── test_user.py

Installation

Clone this repository:

root@user$ git clone https://github.com/RaphSchp/holbertonschool-AirBnB_clone.git

In terminal navigate to root directory and run this command:

holbertonschool-AirBnB_clone$ ./console.py

Interpreter will begin and prompt user:

(hbnb)

Using Command Interpreter


Commands Sample Usage Functionality
help help displays all commands available
create create <class> creates new object (ex. a new User, Place)
update User.update('123', {'name' : '(NAME)'}) updates attribute of an object
destroy User.destroy('123') destroys specified object
show User.show('123') retrieve an object from a file, a database
all User.all() display all objects in class
quit quit exits

Interactive and Non-Interactive

Interactive Mode

$ ./console.py
(hbnb) help

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

(hbnb)
(hbnb)
(hbnb) quit
$

Non-Interactive Mode

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

Testing

To test the files, classes, and functions in this project use the following commands:

python3 -m unittest discover tests

You can also test file by file by using this command:

python3 -m unittest tests/test_models/test_base_model.py

✍️Authors

  • Benjamin Marchal github
  • Raphael Schopfer github
  • Holberton Thonon-les-bains holberton

πŸ“œLicense

This program is distributed under the terms of the Holberton license.

About

Python command-line tool for managing AirBnB objects in a web application project.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published