Skip to content

Module mongo_livre

Livre

Bases: BaseEntity

Source code in nbs/mongo_livre.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
class Livre(BaseEntity):
    collection: str = "livres"

    def __init__(self, titre: str) -> None:
        """Initialise une instance de livre.

        Args:
            nom (str): Le titre du livre.
        """
        super().__init__(titre, self.collection)
        self.titre = titre  # je le duplique pour la comprehension du concept de livre
        self.auteur = None  # on mettra l'oid de l'auteur
        self.editeur = None  # on mettra l'oid de l'editeur

    def add_auteur(self, auteur: Auteur):
        if auteur is not None:
            self.auteur = auteur.get_oid()

    def add_editeur(self, editeur: Editeur):
        if editeur is not None:
            self.editeur = editeur.get_oid()

    @classmethod
    def with_details(cls, titre: str, auteur: Auteur, editeur: Editeur):
        """Alternative constructor to instantiate a Livre with title, auteur and editeur.

        Args:
            titre (str): The title of the book.
            auteur (Auteur): Instance of Auteur.
            editeur (Editeur): Instance of Editeur.
        Returns:
            Livre: An instance of Livre.
        """
        instance = cls(titre)
        instance.add_auteur(auteur)
        instance.add_editeur(editeur)
        return instance

    @classmethod
    def from_oid(cls: Type[T], oid: ObjectId) -> T:
        """Creates an instance of Livre class from a MongoDB ObjectId.
        Returns None if the ObjectId is not found in the database or is None.

        Args:
            oid (ObjectId): The MongoDB ObjectId.

        Returns:
            T: An instance of the derived class.
        """
        if oid is None:
            return None
        DB_HOST, DB_NAME, _ = get_DB_VARS()
        collection = get_collection(
            target_db=DB_HOST, client_name=DB_NAME, collection_name=cls.collection
        )
        document = collection.find_one({"_id": oid})
        if document is None:
            return None
        inst = cls.with_details(
            document.get("titre"),
            Auteur.from_oid(document.get("auteur")),
            Editeur.from_oid(document.get("editeur")),
        )
        return inst

    def __str__(self) -> str:
        """Official string representation of the entity.

        Returns:
            str: The name of the entity: Titre, Auteur, Editeur.
        """
        return f"""
        Titre: {self.titre}
        Auteur: {Auteur.from_oid(self.auteur) if self.auteur is not None else None}
        Editeur: {Editeur.from_oid(self.editeur) if self.editeur is not None else None}
        """

__init__(titre)

Initialise une instance de livre.

Parameters:

Name Type Description Default
nom str

Le titre du livre.

required
Source code in nbs/mongo_livre.py
20
21
22
23
24
25
26
27
28
29
def __init__(self, titre: str) -> None:
    """Initialise une instance de livre.

    Args:
        nom (str): Le titre du livre.
    """
    super().__init__(titre, self.collection)
    self.titre = titre  # je le duplique pour la comprehension du concept de livre
    self.auteur = None  # on mettra l'oid de l'auteur
    self.editeur = None  # on mettra l'oid de l'editeur

__str__()

Official string representation of the entity.

Returns:

Name Type Description
str str

The name of the entity: Titre, Auteur, Editeur.

Source code in nbs/mongo_livre.py
82
83
84
85
86
87
88
89
90
91
92
def __str__(self) -> str:
    """Official string representation of the entity.

    Returns:
        str: The name of the entity: Titre, Auteur, Editeur.
    """
    return f"""
    Titre: {self.titre}
    Auteur: {Auteur.from_oid(self.auteur) if self.auteur is not None else None}
    Editeur: {Editeur.from_oid(self.editeur) if self.editeur is not None else None}
    """

from_oid(oid) classmethod

Creates an instance of Livre class from a MongoDB ObjectId. Returns None if the ObjectId is not found in the database or is None.

Parameters:

Name Type Description Default
oid ObjectId

The MongoDB ObjectId.

required

Returns:

Name Type Description
T T

An instance of the derived class.

Source code in nbs/mongo_livre.py
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
@classmethod
def from_oid(cls: Type[T], oid: ObjectId) -> T:
    """Creates an instance of Livre class from a MongoDB ObjectId.
    Returns None if the ObjectId is not found in the database or is None.

    Args:
        oid (ObjectId): The MongoDB ObjectId.

    Returns:
        T: An instance of the derived class.
    """
    if oid is None:
        return None
    DB_HOST, DB_NAME, _ = get_DB_VARS()
    collection = get_collection(
        target_db=DB_HOST, client_name=DB_NAME, collection_name=cls.collection
    )
    document = collection.find_one({"_id": oid})
    if document is None:
        return None
    inst = cls.with_details(
        document.get("titre"),
        Auteur.from_oid(document.get("auteur")),
        Editeur.from_oid(document.get("editeur")),
    )
    return inst

with_details(titre, auteur, editeur) classmethod

Alternative constructor to instantiate a Livre with title, auteur and editeur.

Parameters:

Name Type Description Default
titre str

The title of the book.

required
auteur Auteur

Instance of Auteur.

required
editeur Editeur

Instance of Editeur.

required

Returns: Livre: An instance of Livre.

Source code in nbs/mongo_livre.py
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
@classmethod
def with_details(cls, titre: str, auteur: Auteur, editeur: Editeur):
    """Alternative constructor to instantiate a Livre with title, auteur and editeur.

    Args:
        titre (str): The title of the book.
        auteur (Auteur): Instance of Auteur.
        editeur (Editeur): Instance of Editeur.
    Returns:
        Livre: An instance of Livre.
    """
    instance = cls(titre)
    instance.add_auteur(auteur)
    instance.add_editeur(editeur)
    return instance