Пример #1
0
    def all(self, cls=None):
        """ get dictionary of all objects """

        if cls is None:
            all_list = []
            for x in BaseModel.__subclasses__():
                all_list.extend(self.__session.query(x).all())
            return {"{}.{}".format(type(obj).__name__, obj.id): obj
                    for obj in all_list}

        if type(cls) is str:
            cls = eval(cls)

        return {"{}.{}".format(type(obj).__name__, obj.id): obj
                for obj in self.__session.query(cls).all()}
Пример #2
0
#!/usr/bin/python3

from models.engine.file_storage import FileStorage
from models.base_model import BaseModel
from models.city import City
from models.state import State
from models.review import Review
from models.amenity import Amenity
from models.place import Place
from models.user import User

class_list = ["BaseModel"]
for x in BaseModel.__subclasses__():
    class_list.append(x.__name__)

__all__ = class_list

storage = FileStorage()
storage.reload()
Пример #3
0
    qq_no = CharField(null=True, max_length=16, verbose_name="qq号")
    wechat = CharField(null=True, max_length=32, verbose_name="微信号")
    email = CharField(null=True, max_length=32, verbose_name="电子邮箱")

    class Meta:
        verbose_name = "demo用户表"
        table_name = "demo_user"
        indexes = ((("uid", "status"), True), )


def generate_subclass(sub_model: list, list_model: list) -> list:
    for item in sub_model:
        if item.__subclasses__():
            generate_subclass(item.__subclasses__(), list_model)
        if item.__name__ not in list_model and len(item.__subclasses__()) == 0:
            list_model.append(item)
    return list_model


if __name__ == '__main__':

    sub_model = BaseModel.__subclasses__()
    list_model = generate_subclass(sub_model, [])
    list_model = [
        item for item in list_model
        if not item.table_exists() and "verbose_name" in item._meta.__dict__
    ]
    logging.debug("Start create models: " +
                  ",".join([item.__name__ for item in list_model]))
    database_proxy.create_tables(list_model)
Пример #4
0
class HBNBCommand(cmd.Cmd):
    """ Class which control the console, and user interface """

    prompt = '(hbtn) '
    __BaseModel_subclass = [cls.__name__ for cls in BaseModel.__subclasses__()]
    __buff_class = ['BaseModel', *__BaseModel_subclass]

    # general commands

    def do_quit(self, line):
        """ Exist of the console by cmd """
        return True

    def do_EOF(self, line):
        """ Exist of the console by signal """
        return True

    def emptyline(self):
        """ Disable any action on BlankLine """
        pass

    # handle data comands

    def do_create(self, items):
        """ create a new BaseModel instance """
        if self.check_input(items):
            className = items.split()[0]
            obj = storage.create_obj(className)
            obj.save()
            print(obj.id)

    def do_show(self, items):
        """ Show info of a BaseModel instance """
        if self.check_input(items, 1):
            items = items.split()
            print(storage.all()[".".join(items[:2])])

    def do_destroy(self, items):
        """ Delete an instance """
        if self.check_input(items, 1):
            items = items.split()
            storage.delete(*items[:2])
            storage.save()

    def do_all(self, items):
        """ show all elements stored, compatible with given class """
        items = items.split()
        if not items:
            print([str(v) for v in storage.all().values()])
        elif items[0] not in HBNBCommand.__buff_class:
            print("** class doesn't exist **")
        else:
            print([str(v) for k, v in storage.all().items()
                  if k.split(".")[0] == items[0]])

    def do_update(self, items):
        """ Update the propertie of a instance """
        if self.check_input(items, 2):
            import re

            items = items.split()
            if '"' not in items[3]:
                value = items[3]
            else:
                value = " ".join(items[3:])
                value = re.findall(r'"([^"]*)"', value)[0]

            obj = storage.all()[".".join(items[:2])]
            value = storage.auto_caster(value)
            setattr(obj, items[2], value)
            obj.save()

    # Check functions

    @staticmethod
    def check_input(items, step=0):
        """
        Check a given input and alert on incorrect format according to
        step.
        """
        items = items.split()
        outValue = False

        # check class input
        if not items:
            print("** class name missing **")
        elif items[0] not in HBNBCommand.__buff_class:
            print("** class doesn't exist **")
        else:
            outValue = True

        if not outValue or step <= 0:
            return outValue
        outValue = False

        # check id input
        if len(items) < 2:
            print("** instance id missing **")
        elif not any(".".join(items[:2]) == x for x in storage.all()):
            print("** no instance found **")
        else:
            outValue = True

        if not outValue or step <= 1:
            return outValue
        outValue = False

        # check atribute and value inputs
        if len(items) < 3:
            print("** attribute name missing **")
        elif len(items) < 4:
            print("** value missing **")
        elif items[2] in storage.constants():
            print("** can't modify that property **")
        else:
            return True

        return False