Personal DB - dvirby20/BotIt GitHub Wiki

ืขื‘ื•ื“ื” ืขืœ ื”DB ื”ืื™ืฉื™

ื“ืฃ ื–ื” ื™ืคืจื˜ ืœืขื•ืžืง ื›ื™ืฆื“ ื ื™ืชืŸ ืœืฉืžื•ืจ ื•ืœืงื‘ืœ ืžื™ื“ืข ืžื”-DB ื”ืื™ืฉื™ ืฉืœ ื”ืคื™ืฆ'ืจ ืฉืœื›ื (ื”ื‘ื”ืจื”: ืžื•ื“ืœ = DB)

[[TOC]]

ื”ื’ื“ืจืช ื”ืชื—ื‘ืจื•ืช ืœDB

ืืชื ืฆืจื™ื›ื™ื ืœืงื‘ืœ ืฉื ืžืฉืชืžืฉ ื•ืกื™ืกืžื ื•ืฆื•ื•ืช ื”ื‘ื•ื˜. ืœืื—ืจ ืžื›ืŸ

ื”ื’ื“ืจืช ื”ื”ืชื—ื‘ืจื•ืช ืœDB ืฆืจื™ื›ื” ืœื”ื™ืขืฉื•ืช ื“ืจืš ืฉืงื•ื‘ืฅ credentials.yaml. ื”ื•ื ืฆืจื™ืš ืœื”ื™ืจืื•ืช ื›ืš:

Annotation_2020-05-06_170909

ื‘ืื“ื•ื ืžืกื•ืžื ื™ื ื”ืฉื“ื•ืช ืฉืืชื ืฆืจื™ื›ื™ื ืœืฉื ื•ืช ืœืคื™ ื”ืคืจื˜ื™ื ืฉืชืงื‘ืœื• ืžื”ืฆื•ื•ืช.

ื™ืฆื™ืจืช ืžื•ื“ืœ

ื”-DB ื”ืื™ืฉื™ ืฉืœื›ื ืฆืจื™ืš ืœื”ื™ื•ืช ื‘ืขืœ ืžื‘ื ื” ืžืกื•ื™ื™ื ืฉืืชื ืชื’ื“ื™ืจื• ืื•ืชื•.

ื ื ื™ื— ืฉื ืจืฆื” ืœื™ืฆื•ืจ DB ืฉืฉื•ืžืจ ืžื›ื•ื ื™ื•ืช ืฉืœ ื—ื ื™ื›ื™ื. ื”ืฉื“ื•ืช ืฉืœื• ื”ื: ืžืกืคืจ ืจื›ื‘, ืฆื‘ืข ื”ืจื›ื‘, ื”ืžืฉืชืžืฉ ืฉื”ื•ื ื‘ื‘ืขืœื•ืชื• ื•ืฉื ืช ื™ื™ืฆื•ืจ. ื‘ืฉื‘ื™ืœ ืœืขืฉื•ืช ืืช ื–ื” ืชื™ื›ื ืกื• ืœื“ืฃ DBModels ืฉื‘ืชื•ืš ื”ืชื™ืงื™ื™ื” ืฉืœ ื”ืคื™ืฆ'ืจ ืฉืœื›ื (ืจืื• ืขืžื•ื“ "Feature Structure" ื‘ื•ื•ื™ืงื™), ื•ื›ืชื‘ื• ืืช ื”ืงื•ื“ ื”ื‘ื:

in TalpiBot/Features/my_feature_name/DBModels/car_model.py

from mongoengine import *

class Car(Document):
    meta = {'db_alias': 'cars_feature'}

    license_number: str = StringField(max_length=100, required=True)
    color: str = StringField(max_length=100, required=True)
    owner: str = StringField(max_length=100, requred=True)
    year: int = LongField()

ื”ืฉื•ืจื” ื”ืจืืฉื•ื ื” ื‘ืžื—ืœืงื” ืฉืœ ื”ืžื•ื“ืœ ื”ื™ื ืžื™ืœื•ืŸ ื”ืžื›ื™ืœ ื”ื’ื“ืจื•ืช ืฉืœ ื”ืžื•ื“ืœ. ืฉื ื”DB ืฉืœื›ื ืžื•ื’ื“ืจ ื‘init.py ืฉืœ ื”ืคื™ืฆืจ ื•ืœื ืฉืœ ื”ืชื™ืงื™ื™ื” DBModels! . ืœืžืฉืœ, ื–ื” ื™ื”ื™ื” ื”init.py ืฉืœ ืคื™ืฆ'ืจ ืงื‘ื•ืฆื•ืช ืฉืžืฉืชืžืฉ ื‘ืžื•ื“ืœ Car ืฉื”ื’ื“ืจื ื•:

in TalpiBot/Features/my_feature_name/init.py

def get_settings():
    return FeatureSettings(
        display_name = "cars",
        _type = FeatureType.REGULAR_FEATURE,
        db_name = "your_db_name"
    )

ืœืื—ืจ ืžื›ืŸ, ื›ืœ ืฉื•ืจื” ืžื™ื™ืฆื’ืช ืฉื“ื” ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืžื”ืกื•ื’ ื”ื–ื”. ื—ืฉื•ื‘ - ื›ืขืช ื‘ืฉื‘ื™ืœ ืœื’ืฉืช ืœืžื•ื“ืœ ืฉืœื›ื ืืชื ืฆืจื™ื›ื™ื ืœืขืฉื•ืช ืœื• import.

in TalpiBot/Features/my_feature_name/Logic/feature_logic.py

from car_model import Car

ื›ืขืช ื›ืœ ืฉืืจ ื”ืงื•ื“ ื ืจืฉื ื‘ื“ืจ"ื› ื‘ืชื™ืงื™ื™ืช Logic ืื• ื‘ืชื™ืงื™ื™ื” UI.

ื™ืฆื™ืจืช ืื•ื‘ื™ื™ืงื˜ื™ื

ื›ืขืช ืื—ืจื™ ืฉื™ืฆืจื ื• ืืช ื”ืžื•ื“ืœ ืขืฆืžื• ื•ื”ืฉื“ื•ืช ืฉืื ื—ื ื• ืจื•ืฆื™ื ืฉื™ื”ื™ื• ื‘ื•, ืื ื—ื ื• ืจื•ืฆื™ื ืœื™ืฆื•ืจ ืื•ื‘ื™ื™ืงื˜ื™ื ื ื™ืชืŸ ืœืขืฉื•ืช ืืช ื–ื” ืขืœ ื™ื“ื™ ืฉื™ืžื•ืฉ ื‘ืฉื ื”ืžื—ืœืงื” ืฉืœ ื”ืžื•ื“ื•ืœ ืžืžืงื•ื“ื (ื‘ืขืฆื ืื ื—ื ื• ื™ื•ืฆืจื™ื ืื•ื‘ื™ื™ืงื˜ ื—ื“ืฉ ืคื™ื™ืชื•ืŸ ืžื”ืกื•ื’ ืฉืœ ื”ืžื•ื“ืœ) ื•ืื– ืฉืžื™ืจื” ืฉืœื”ื ืขืœ ื™ื“ื™ save.

ืœืžืฉืœ, ืงื˜ืข ื”ืงื•ื“ ื”ื‘ื ื™ื™ืฆื•ืจ ืžื›ื•ื ื™ืช ื—ื“ืฉื” ื•ื™ืฉืžื•ืจ ืื•ืชื” ื‘DB:

in TalpiBot/Features/my_feature_name/Logic/feature_logic.py

new_car = Car(license_number='439018901', color='white', owner='ื™ืจื“ืŸ ื’ืœืคืŸ', year=2019)
new_car.save()

ืงื‘ืœืช ืื•ื‘ื™ื™ืงื˜ื™ื ืžื”ืžื•ื“ืœ ืฉืขื•ื ื™ื ืขืœ ืชื ืื™ ืžืกื•ื™ื

ืื—ืจื™ ืฉื™ืฆืจื ื• ืื•ื‘ื™ืงื˜ื™ื ื ืจืฆื” ืœื’ืฉืช ืืœื™ื”ื. ื‘ืฉื‘ื™ืœ ืœืขืฉื•ืช ืืช ื–ื” ื ืฉืชืžืฉ ื‘ืžืฉืชื ื” objects ืฉืื•ื˜ื•ืžื˜ื™ืช ืงื™ื™ื ื‘ื›ืœ ืžื•ื“ืœ, ืฉืžื—ื–ื™ืจ ืืช ื›ืœ ื”ืื•ื‘ื™ื™ืงื˜ื™ื ืฉื ืžืฆืื™ื ื‘ืžื•ื“ืœ ืžืกื•ื™ื™ื.

in TalpiBot/Features/my_feature_name/Logic/feature_logic.py

Car.objects

ืชื—ื–ื™ืจ ืœื ื• ืžืขืจืš ืฉืœ ื›ืœ ื”ืื•ื‘ื™ื™ืงื˜ื™ื.

ื›ืขืช ื ื ื™ื— ืฉืื ื—ื ื• ืจื•ืฆื™ื ืืช ื›ืœ ื”ืื•ื‘ื™ืงื˜ื™ื ืฉืขืจื›ื ื‘ืฉื“ื” ืžืกื•ื™ื ื”ื•ื ืกืคืฆื™ืคื™, ืœื“ื•ื’ืžื ื›ืœ ื”ืžื›ื•ื ื™ื•ืช ืž2019. ืื– ื ืฉืชืžืฉ ืขื“ื™ื™ืŸ ื‘obhects ืื‘ืœ ื”ืคืขื ื‘ืชื•ืจ ืคื•ื ืงืฆื™ื” ื•ืขื ื”ืคืจืžื˜ืจื™ื ืฉืื ื—ื ื• ืจื•ืฆื™ื:

in TalpiBot/Features/my_feature_name/Logic/feature_logic.py

Car.objects(year=2019)

ืงื˜ืข ื”ืงื•ื“ ื”ื–ื” ื™ื—ื–ื™ืจ ืžื›ื•ื ื™ื•ืช ืž2019.

ื•ืื ื ืจืฆื” ืœื“ื•ื’ืžื ืœืžืฆื•ื ืืช ื”ืฆื‘ืข ืฉืœ ืื—ืช ืžื”ืžื›ืŸื ื™ื•ืช ืž2019, ื ืฉืชืžืฉ ื‘ืงื•ื“ ื”ื‘ื:

in TalpiBot/Features/my_feature_name/Logic/feature_logic.py

color = Car.objects(year=2019)[0].color

ืฉื™ืžื• ืœื‘ ืœื‘ื—ื™ืจื” ืฉืœ ื”ืื™ื‘ืจ ื”ืจืืฉื•ืŸ ืขืœ ื™ื“ื™ [0]- ื”ืคืงื•ื“ื” objects() ืžื—ื–ื™ืจื” ืจืฉื™ืžื” ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื, ื’ื ืื ื™ืฉ ืจืง ืื•ื‘ื™ื™ืงื˜ ืื—ื“ ื”ืขื•ื ื” ืขืœ ื”ืชื ืื™ื (ื•ืœืฆื•ืจืš ื”ืขื ื™ื™ืŸ ื’ื ืื ืื™ืŸ ืื•ื‘ื™ื™ืงื˜ื™ื ื”ืขื•ื ื™ื ืขืœ ื”ืชื ืื™ื, ื‘ืžืงืจื” ื–ื” ืชื•ื—ื–ืจ ืจืฉื™ืžื” ืจื™ืงื”).

ื ื™ืชืŸ ื’ื ืœื™ืฆื•ืจ ืชื ืื™ื ืžืกื•ื‘ื›ื™ื ื™ื•ืชืจ, ืืš ื™ื•ืชืจ ืงืœ ืคืฉื•ื˜ ืœืกื ืŸ ืืช ื”ืื•ื‘ื™ื™ืงื˜ื™ื ื™ื“ื ื™ืช ื‘ืงื•ื“.

ืื ื‘ื›ืœ ื–ืืช ืืชื ืžืขื“ื™ืคื™ื ืœืขืฉื•ืช ื–ืืช , ื ื™ืชืŸ ืœืžืฆื•ื ืžื™ื“ืข ื ื•ืกืฃ ื›ืืŸ.

ืขืจื™ื›ืช ืื•ื‘ื™ื™ืงื˜ื™ื

ื ื™ืชืŸ ืœืขืจื•ืš ืืช ื”ืžื™ื“ืข ืฉืœ ืื•ื‘ื™ื™ืงื˜ื™ื ืฉื›ื‘ืจ ืงื™ื™ืžื™ื ื‘DB ื‘ืื•ืคืŸ ื”ื‘ื:

ืœืฉืœื•ืฃ ืืช ื”ืื•ื‘ื™ื™ืงื˜ ืžื”ืžื•ื“ืœ, ืœืขืจื•ืš ืืช ื”ืžื™ื“ืข ืขืœ ื”ืื•ื‘ื™ื™ืงื˜ ืขืฆืžื•, ื•ืื– ืœืฉืžื•ืจ ืืช ื”ืฉื™ื ื•ื™ื™ื ืขืœ ื™ื“ื™ ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื™ืช save.

ืœื“ื•ื’ืžื ืงื˜ืข ื”ืงื•ื“ ื”ื‘ื ืžืฆื™ื’ ื›ื™ืฆื“ ื ื™ืชืŸ ืœืฉื ื•ืช ืืช ื”ืฆื‘ืข ืฉืœ ืžื›ื•ื ื™ืช ืขื ืžืกืคืจ ืจื™ืฉื•ื™ ื›ืœืฉื”ื•. ืฉื™ืžื• ืœื‘ ืฉืื ื—ื ื• ืขื•ื‘ื“ื™ื ืขื ื”ืื•ื‘ื™ื™ืงื˜ื™ื ืขืฆืžื ื•ืœื ืขื ืžืขืจื›ื™ื ื•ืœื›ืŸ [0].

in TalpiBot/Features/my_feature_name/Logic/feature_logic.py

from car_model import Car

car= Car.objects(license_number='439018901')[0]
car.color = 'red'
car.save()

ื”ืฉื•ืจื” ื”ืจืืฉื•ื ื” (ืื—ืจื™ ื”import) ืžื•ืฆืืช ืืช ื”ืื•ื‘ื™ื™ืงื˜ ื”ืžืชืืจ ืืช ื”ืžื›ื•ื ื™ืช. ื”ืฉื•ืจื” ื”ืฉื ื™ื™ื” ืžืขื“ื›ื ืช ืืช ื”ืฆื‘ืข ืฉืœ ื”ืžื›ื•ื ื™ืช, ืื‘ืœ ืขื“ื™ื™ืŸ ืœื ืžืขื“ื›ื ืช ืืช ื”ืžื™ื“ืข ื‘DB. ื”ืฉื•ืจื” ื”ืื—ืจื•ื ื” ืฉื•ืžืจืช ืืช ื”ืžื™ื“ืข ื”ื—ื“ืฉ ื‘DB.

ืžื—ื™ืงืช ืื•ื‘ื™ื™ืงื˜ื™ื

ื ื™ืชืŸ ืœืžื—ื•ืง ืื•ื‘ื™ื™ืงื˜ื™ื ืขืœ ื™ื“ื™ ื”ืคื•ื ืงืฆื™ื” delete(). ืœืžืฉืœ, ืงื˜ืข ื”ืงื•ื“ ื”ื‘ื ื™ืžื—ืง ืžื›ื•ื ื™ืช ืขื ืžืกืคืจ ืจื™ืฉื•ื™ ื›ืœืฉื”ื•:

Car.objects(license_number='439018901')[0].delete()

ื“ื•ื’ืžื” - ืคื™ืฆ'ืจ ืขืจื™ื›ืช ืชื™ืื•ืจ ืงื‘ื•ืฆื”

ืงื•ื“ ื–ื” ื”ื•ื ื“ื•ื’ืžื” ืœืคื™ืฆ'ืจ ืฉืžืงื‘ืœ ืžื”ืžืฉืชืžืฉ ืžืกืคืจ ืจื›ื‘, ื‘ื•ื“ืง ื”ืื ื”ืจื›ื‘ ืฉื™ื™ืš ืœืžืฉืชืžืฉ, ื•ืื ื›ืŸ ื”ื•ื ืžืฉื ื” ืืช ื”ืฆื‘ืข ืฉืœื• ืœื‘ื—ื™ืจืช ื”ืžืฉืชืžืฉ.

in TalpiBot/Features/my_feature_name/UI/feature_main.py

from typing import List
from BotAPI.Feature.bot_feature import BotFeature
from BotAPI.View.view import View
from BotAPI.session import Session
from BotAPI.ui.ui import UI, Button
from TalpiotAPIs.User.user import User
from TalpiotAPIs.User.user import Gender


class CarColorChanger(BotFeature):

    # init the class and call to super init - The same for every feature
    def __init__(self, ui: UI):
        super().__init__(ui)

    # This is the first function that run when user press to to start the feature
    def main(self, session: Session):
        self.ui.create_text_view(session, "ืื™ื–ื” ืžื›ื•ื ื™ืช ืœืขืจื•ืš?").draw()
        self.ui.get_text(session, self.get_car_number)

    def get_car_number(self, session: Session, number: str):
        # Get car with the correct number from DB
        car = Car.objects(license_number=number)[0]

        if session.user.name != car.owner:
            self.ui.create_text_view(session, "ืืชื” ืœื ื”ื‘ืขืœื™ื, ื ืกื” ืฉื ื™ืช").draw()
            self.main(session)

        self.ui.create_text_view(session, "ืœืžื” ืœืฉื ื•ืช ืืช ื”ืฆื‘ืข?").draw()

        # Get the new color, and pass both the color and the car object itself to the final method
        self.ui.get_text(session, lambda s,new_color: self.edit_and_end(s, new_color, car))


    def edit_and_end(self, session: Session, new_color: str, car: Car):
        car.color= new_color
        car.save()
        self.ui.create_text_view(session, "ืฆื‘ืข ื”ืžื›ื•ื ื™ืช ืฉื•ื ื”").draw()
        self.ui.summarize_and_close(session, [])


    def get_command(self) -> str:
        """
        :return: The string tha invoke this feature
        """
        return "cars"

    def get_summarize_views(self, session: Session) -> [View]:
        return []

    def is_authorized(self, user: User) -> bool:
        return "ืžืชืœื" in user.role

โš ๏ธ **GitHub.com Fallback** โš ๏ธ