Esempio n. 1
0
class Email(HumanIdentifier):
    class Meta:
        proxy = True

    # data subfield
    email_address = SubfieldWrapper("uname")

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._otp = None

    def prepare(self):
        otp = str(randrange(100000, 1000000))
        self._otp = otp
        self.password = otp
        self.password_expire_date = now() + timedelta(minutes=10)
        self.save()
        # TODO : stock_front_pb/login.py 에 구현함. 추후 view 단 framework 만들 때 추가 고민
        # email_message = "OTP:{}".format(otp)
        # send_email("models_send", email_message, self.uname)
        return otp

    def authenticate(self, password):
        human = super().authenticate(password)
        self.expire_password()
        return human
Esempio n. 2
0
class TaxOffice(Actor):
    class Meta:
        proxy = True

    # data subfields
    tax_office_name = SubfieldWrapper("uname")
    code = ValueSubfield("data", int)
    account_number = ValueSubfield("data", int)
Esempio n. 3
0
class Post(Model):
    class Meta:
        proxy = True

    author = SubfieldWrapper("owner")
    title = ValueSubfield("data", str)
    content = ValueSubfield("data", str)

    container = ForeignKeySubfield("data",
                                   Type.Board,
                                   null=False,
                                   create_only=True,
                                   alias="board")

    @property
    def published_date(self):
        return self.created_date
Esempio n. 4
0
 def __new__(mcs, cls_name, bases, classdict):
     has_alias_fields = {k: v.alias for k, v in classdict.items() if isinstance(v, ValueSubfield) and v.alias}
     for k, alias in has_alias_fields.items():
         # 중복되는 alias 가 있는경우
         assert alias not in classdict, console_log("중복되는 alias 가 존재합니다. {}".format(alias))
         # 상위클래스에 alias 의 이름이 존재하는 경우 SubfieldWrapper 인지 확인하고 pass
         if alias in bases[0].__dict__.keys():
             base_alias = bases[0].__dict__[alias]
             assert isinstance(base_alias, SubfieldWrapper), console_log(
                 "상위클래스에 SubfieldWrapper 가 아닌 {} 가 존재합니다.".format(alias)
             )
             assert base_alias.original_subfield_name == k
         else:
             classdict[alias] = SubfieldWrapper(k)
     cls = super().__new__(mcs, cls_name, bases, classdict)
     t = getattr(Type, cls_name)
     t._model = cls
     assert cls.subfields
     return cls
Esempio n. 5
0
class LocalTaxGovernment(Actor):
    class Meta:
        proxy = True

    local_tax_government_name = SubfieldWrapper("uname")
    office_address = ValueSubfield("data", str)
    addresses = ReverseForeignKeySubfield("computed", Type.Address,
                                          "local_tax_government")

    @property
    def headquarter_position_name(self):
        local_tax_government_name = self.local_tax_government_name
        if local_tax_government_name.endswith("시청"):
            return "{}".format(local_tax_government_name.replace("시청", "시장"))
        elif local_tax_government_name.endswith("군청"):
            return "{}".format(local_tax_government_name.replace("군청", "군수"))
        elif local_tax_government_name.endswith("구청"):
            return "{}".format(local_tax_government_name.replace("구청", "구청장"))
        elif local_tax_government_name.endswith("도청"):
            return "{}".format(local_tax_government_name.replace("도청", "도지사"))
        else:
            raise NotImplementedError(
                "headquarter_position_name() 이 구현되지 않은 지방세관할청 타입입니다. : {}".
                format(self.local_tax_government_name))

    @classmethod
    def get_by_human_address(cls, human_address):
        splited_human_address = human_address.split()
        for token_count in range(4, 0, -1):
            address = Address.objects.filter(address=cls.join_address(
                splited_human_address, token_count)).first("-id")
            if address:
                return address.local_tax_government
        return None

    @classmethod
    def join_address(cls, splited_address, count):
        return " ".join(splited_address[:count])
Esempio n. 6
0
class LoginID(HumanIdentifier):
    class Meta:
        proxy = True

    # data subfields
    login_id = SubfieldWrapper("uname")
Esempio n. 7
0
class Board(Model):
    class Meta:
        proxy = True

    title = SubfieldWrapper("uname")
    posts = ReverseForeignKeySubfield("computed", Type.Post, "board")
Esempio n. 8
0
class DummyActor(Actor):
    class Meta:
        proxy = True

    container = ForeignKeySubfield("data", Type.User, alias="user")
    human = SubfieldWrapper("container")