データの有効期限をdatetime使ってチェックする

よくある、サービスに登録すると登録確認用URLが記載されたメールが送信されて、そのURLへアクセスすると登録完了となるようなもの。で、有効期限を定める部分と有効期間内かどうかをチェックする部分。

from google.appengine.ext import db
import datetime

class SaveData(db.Model):

    time_limit = db.DateTimeProperty()
    auth_element = db.StringProperty()

    def set_data(self, time_limit, auth_element):
        if not isinstance(time_limit, datetime.datetime) :
            return False
        if not isnstance(auth_element, unicode) :
            return False
        self.time_limit = time_limit
        self.auth_element = auth_element
        try:
            self.put()
            return self.key()
        except:
            return False

    def get_data(self, key):
        if not isinstance(key, unicode) :
            return False
        try:
            return self.get(key)
        except:
            return False


class Action :

    TIME_LIMIT_HOUR = 24    # 有効期限24時間

    # 確認URL取得
    def get_confirm_url(self):
        key = self._get_confirm_key()
        return = self._confirm_url() % key

    def _confirm_url(self):
        return 'http://hogehage.com/?key=%s'

    def _get_confirm_key(self):
        time_limit = self._create_time_limit(self.TIME_LIMIT_HOUR)
        auth_element = self._create_auth_element()
        sd = SaveData()
        confirm_key = sd.set_data(time_limit, auth_element)
        return str(confirm_key)

    def _create_time_limit(self, hour):
        second_span = 60 * hour   # 有効期間(秒)
        return datetime.datetime.now() + datetime.timedelta(0, second_span)

    def _create_auth_element(self):
        # 必要な情報をごにょごにょ
        return u''

    # 有効かの確認
    def is_effective(self, requested_key):
        confirm_data = self._confirm_data(requested_key)
        if not confirm_data :
            return False
        if not self._is_effective_timespan(confirm_data.time_limit) :
            return False
        return True

    def _get_confirm_data(self, requested_key) :
        sd = SaveData()
        return sd.get_data()

    def _is_effective_timespan(self, time_limit) :
        now = datetime.datetime.now()
        time_diff = now - time_limit
        if time_diff > datetime.timedelta(0) :
            return False
        else :
            return True

メモレベル。色々肉付けしなきゃー
ネーミングセンスってどうやって鍛えればいいのかな。