Skip to content

Commit

Permalink
bugFix/pycodestyle-state-city-2
Browse files Browse the repository at this point in the history
  • Loading branch information
hima890 committed Jul 29, 2024
1 parent 284e445 commit b204e68
Show file tree
Hide file tree
Showing 6 changed files with 487 additions and 8 deletions.
4 changes: 1 addition & 3 deletions console.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@
import os
import json
import re
from models.city import City
from models import storage
from utility.dynamically_create_cls import dynamicallyCreateCls
from utility.parse_value import parse_value
from models.base_model import BaseModel
from models.user import User
from models.place import Place
from models.state import State
from models.city import City
from models.amenity import Amenity
from models.review import Review
""""
Expand Down Expand Up @@ -343,5 +343,3 @@ def do_quit(self, arg):
return True


if __name__ == "__main__":
HBNBCommand().cmdloop()
1 change: 0 additions & 1 deletion file.json

This file was deleted.

137 changes: 137 additions & 0 deletions main1.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
#!/usr/bin/python3
import inspect
import io
import sys
import cmd
import shutil

"""
Cleanup file storage
"""
import os
file_path = "file.json"
if not os.path.exists(file_path):
try:
from models.engine.file_storage import FileStorage
file_path = FileStorage._FileStorage__file_path
except:
pass
if os.path.exists(file_path):
os.remove(file_path)

"""
Backup console file
"""
if os.path.exists("tmp_console_main.py"):
shutil.copy("tmp_console_main.py", "console.py")
shutil.copy("console.py", "tmp_console_main.py")


"""
Updating console to remove "__main__"
"""
with open("tmp_console_main.py", "r") as file_i:
console_lines = file_i.readlines()
with open("console.py", "w") as file_o:
in_main = False
for line in console_lines:
if "__main__" in line:
in_main = True
elif in_main:
if "cmdloop" not in line:
file_o.write(line.lstrip(" "))
else:
file_o.write(line)

import console

"""
Create console
"""
console_obj = "HBNBCommand"
for name, obj in inspect.getmembers(console):
if inspect.isclass(obj) and issubclass(obj, cmd.Cmd):
console_obj = obj

my_console = console_obj(stdout=io.StringIO(), stdin=io.StringIO())
my_console.use_rawinput = False

"""
Exec command
"""
def exec_command(my_console, the_command, last_lines = 1):
my_console.stdout = io.StringIO()
real_stdout = sys.stdout
sys.stdout = my_console.stdout
my_console.onecmd(the_command)
sys.stdout = real_stdout
lines = my_console.stdout.getvalue().split("\n")
return "\n".join(lines[(-1*(last_lines+1)):-1])

"""
Objects creations
"""
state_id_1 = exec_command(my_console, "create State name=\"California\"")
if state_id_1 is None or state_id_1 == "":
print("FAIL: Can't create State 1")

city_id_1 = exec_command(my_console, "create City state_id=\"{}\" name=\"Fremont\"".format(state_id_1))
if city_id_1 is None or city_id_1 == "":
print("FAIL: Can't create City 1")

city_id_2 = exec_command(my_console, "create City state_id=\"{}\" name=\"Napa\"".format(state_id_1))
if city_id_2 is None or city_id_2 == "":
print("FAIL: Can't create City 2")

state_id_2 = exec_command(my_console, "create State name=\"California2\"")
if state_id_2 is None or state_id_2 == "":
print("FAIL: Can't create State 2")

city_id_3 = exec_command(my_console, "create City state_id=\"{}\" name=\"Sonoma\"".format(state_id_2))
if city_id_3 is None or city_id_3 == "":
print("FAIL: Can't create City 3")


"""
Tests
"""
from models import storage
from models.state import State

def wrapper_all_type(m_class):
res = {}
try:
res = storage.all(m_class)
except:
res = {}
if res is None or len(res.keys()) == 0:
try:
res = storage.all(m_class.__name__)
except:
res = {}
return res


all_states = wrapper_all_type(State)
state_1 = all_states.get(state_id_1)
if state_1 is None:
state_1 = all_states.get("State.{}".format(state_id_1))
if state_1 is not None:
all_cities = state_1.cities
if len(all_cities) != 2:
print("FAIL: {} cities found instead of 2".format(len(all_cities)))

city_ids_to_search = [city_id_1, city_id_2]
for city in all_cities:
if city.id in city_ids_to_search:
city_ids_to_search.remove(city.id)

if len(city_ids_to_search) > 0:
print("FAIL: {} missing".format(city_ids_to_search))
else:
print("FAIL: State 1 not found")


print("OK", end="")

shutil.copy("tmp_console_main.py", "console.py")
3 changes: 1 addition & 2 deletions models/engine/db_storage.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,12 @@
from sqlalchemy.orm import sessionmaker, scoped_session
import urllib.parse
from models.base_model import BaseModel, Base
from models.state import State
from models.city import City
from models.user import User
from models.place import Place
from models.amenity import Amenity
from models.review import Review

from models.state import State

class DBStorage:
"""This class manages storage of hbnb models in a SQL database"""
Expand Down
5 changes: 3 additions & 2 deletions models/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ class named state that inharits from BaseModel
from sqlalchemy import Column, String, DateTime
from sqlalchemy.orm import relationship
from models.base_model import BaseModel, Base
from models.city import City



class State(BaseModel, Base):
Expand Down Expand Up @@ -35,9 +35,10 @@ class State(BaseModel, Base):

@property
def cities(self):
from models import storage
from models.city import City
"""returns list of City instances with state_id equal
to the current State.id"""
from models import storage
cities_instances = []
for city in storage.all(City).values():
if city.state_id == self.id:
Expand Down
Loading

0 comments on commit b204e68

Please sign in to comment.