Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mungasoftwiz/airbnb_clone
https://github.com/mungasoftwiz/airbnb_clone
html-css python testdrivendevelopment
Last synced: about 11 hours ago
JSON representation
- Host: GitHub
- URL: https://github.com/mungasoftwiz/airbnb_clone
- Owner: MungaSoftwiz
- Created: 2023-12-05T15:50:00.000Z (11 months ago)
- Default Branch: master
- Last Pushed: 2023-12-19T02:22:31.000Z (11 months ago)
- Last Synced: 2023-12-19T18:49:42.600Z (11 months ago)
- Topics: html-css, python, testdrivendevelopment
- Language: Python
- Homepage:
- Size: 67.4 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Authors: AUTHORS
Awesome Lists containing this project
README
hbnb
An AirBnB clone.
---
## Description
hbnb is a complete web application, integrating database storage,
a back-end API, and front-end interfacing in a clone of AirBnB.This is the first part of the project that currently only implements
the back-end console.## Storage
The above classes are handled by the abstracted storage engine defined in the
[FileStorage](./models/engine/file_storage.py) class.Every time the backend is initialized, hbnb 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`.## Console
The console is a command line interpreter that permits management of the backend
of hbnb. It can be used to handle and manipulate all classes utilized by
the application (achieved by calls on the `storage` object defined above).### Using the Console
The hbnb 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)
(hbnb)quit
$
```Alternatively, to use the hbnb console in interactive mode, run the
file `console.py` by itself:```
$ ./console.py
```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 hbnb console supports the following commands:
* **create**
* Usage: `create `Creates a new instance of a given class. The class' ID is printed and
the instance is saved to the file `file.json`.```
$ ./console.py
(hbnb) create BaseModel
119be863-6fe5-437e-a180-b9892e8746b8
(hbnb) quit
$ cat file.json ; echo ""
{"BaseModel.119be863-6fe5-437e-a180-b9892e8746b8": {"updated_at": "2017-02-17T2
1:30:42.215277", "created_at": "2017-02-17T21:30:42.215277", "__class__": "Base
Model", "id": "119be863-6fe5-437e-a180-b9892e8746b8"}}
```* **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(2017, 2, 17, 21, 34, 3, 635828),
'updated_at': datetime.datetime(2017, 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(2017, 2, 17, 21, 34, 3, 635828),
'updated_at': datetime.datetime(2017, 2, 17, 21, 34, 3, 635828)}
(hbnb)
```
* **destroy**
* Usage: `destroy ` or `.destroy()`Deletes a class instance based on a given id. The storage file `file.json`
is updated accordingly.```
$ ./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(2017, 2, 17, 21, 45, 5, 963516), 'created_at': datetime.datetime(2017, 2
, 17, 21, 45, 5, 963516), 'id': '450490fd-344e-47cf-8342-126244c2ba99'}", "[Bas
eModel] (fce2124c-8537-489b-956e-22da455cbee8) {'updated_at': datetime.datetime
(2017, 2, 17, 21, 43, 56, 899348), 'created_at': datetime.datetime(2017, 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(2017, 2, 17, 21, 44, 44, 428413), 'created_at': datetime.datetime(2017, 2, 17
, 21, 44, 44, 428413), 'id': '8f2d75c8-fb82-48e1-8ae5-2544c909a9fe'}", "[User]
(b742dbc3-f4bf-425e-b1d4-165f52c6ff81) {'updated_at': datetime.datetime(2017, 2
, 17, 21, 44, 15, 974608), 'created_at': datetime.datetime(2017, 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(2017, 2, 17, 21, 44, 44, 428413), 'created_at': datetime.datetime(2017, 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(2017, 2, 17, 21,
45, 5, 963516), 'id': '450490fd-344e-47cf-8342-126244c2ba99'}", "[User] (b742db
c3-f4bf-425e-b1d4-165f52c6ff81) {'updated_at': datetime.datetime(2017, 2, 17, 2
1, 44, 15, 974608), 'created_at': datetime.datetime(2017, 2, 17, 21, 44, 15, 97
4608), 'id': 'b742dbc3-f4bf-425e-b1d4-165f52c6ff81'}", "[BaseModel] (fce2124c-8
537-489b-956e-22da455cbee8) {'updated_at': datetime.datetime(2017, 2, 17, 21, 4
3, 56, 899348), 'created_at': datetime.datetime(2017, 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 ""` or
`.update(, , )` or `.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`). However, any attribute can be updated by
providing a dictionary.```
$ ./console.py
(hbnb) create User
6f348019-0499-420f-8eec-ef0fdc863c02
(hbnb)
(hbnb) update User 6f348019-0499-420f-8eec-ef0fdc863c02 first_name "Betty"
(hbnb) show User 6f348019-0499-420f-8eec-ef0fdc863c02
[User] (6f348019-0499-420f-8eec-ef0fdc863c02) {'created_at': datetime.datetime(
2017, 2, 17, 21, 54, 39, 234382), 'first_name': 'Betty', 'updated_at': date
time.datetime(2017, 2, 17, 21, 54, 39, 234382), 'id': '6f348019-0499-420f-8eec-
ef0fdc863c02'}
(hbnb)
(hbnb) User.update(6f348019-0499-420f-8eec-ef0fdc863c02, address, "98 Mission S
t")
(hbnb) User.show(6f348019-0499-420f-8eec-ef0fdc863c02)
[User] (6f348019-0499-420f-8eec-ef0fdc863c02) {'created_at': datetime.datetime(
2017, 2, 17, 21, 54, 39, 234382), 'address': '98 Mission St', 'first_name': 'Betty',
'updated_at': datetime.datetime(2017, 2, 17, 21, 54, 39, 234382), 'id
': '6f348019-0499-420f-8eec-ef0fdc863c02'}
(hbnb)
(hbnb) User.update(6f348019-0499-420f-8eec-ef0fdc863c02, {'email': 'airbnb@m
ail.com', 'last_name': 'Bar'})
[User] (6f348019-0499-420f-8eec-ef0fdc863c02) {'email': '@mail.co
m', 'first_name': 'Betty', 'updated_at': datetime.datetime(2017, 2, 17, 21,
54, 39, 234382), 'address': '98 Mission St', 'last_name': 'Bar', 'id': '6f34
8019-0499-420f-8eec-ef0fdc863c02', 'created_at': datetime.datetime(2017, 2, 17,
21, 54, 39, 234382)}
(hbnb)
```## Testing
Unittests for the hbnb project are defined in the [tests](./tests)
folder. To run the entire test suite, 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
```