I have the following code snippet, I marked my question in a comment line 
inside the hybrid_property.expression part. As you can see, it is now not 
implemented:

from sqlalchemy.ext.declarative import declared_attr
from sqlalchemy import Column, Integer, String, Unicode, UnicodeText
from sqlalchemy.ext.hybrid import hybrid_property, hybrid_method
import arrow


datetimeString_format = {
    "UTC": "%Y-%m-%d %H:%M:%S+00:00",
    "local_with_timezoneMarker": "%Y-%m-%d %H:%M:%S %Z",
    "local_without_timezoneMarker": "%Y-%m-%d %H:%M:%S"
}


dateString_format = "%Y-%m-%d"


class My_TimePoint_Mixin:
    # define output formats:
    datetimeString_inUTC_format = "%Y-%m-%d %H:%M:%S+00:00"
    datetimeString_naive_format = "%Y-%m-%d %H:%M:%S"


    # instrumented fields:
    _TimePoint_in_database = Column('timepoint', String, nullable=False)
    _TimePoint_in_database_suffix = Column(
    'timepoint_suffix', String, nullable=False)


    @hybrid_property
    def timepoint(self):
        twoPossibleType_handlers = [
            self._report_ACCRT_DATE,
            self._report_ACCRT_DATETIME
        ]
        for handler in twoPossibleType_handlers:
            print("handler: ", handler)
            try:
                return handler(self)
            except (AssertionError, ValueError) as e:
                logging.warning("Try next handler!")
 
    @timepoint.expression
    def timepoint(cls):
        pass
        # How can I implement SQL expression for a equivalent function 
dispatch here? There seems to be no SQL equivalent structure for this?


    @timepoint.setter
    def timepoint(self, datetimepointOBJ):
        handlers_lookup = {
            datetime.datetime: self._set_ACCRT_DATETIME,
            datetime.date: self._set_ACCRT_DATE
        }
        this_time = type(datetimepointOBJ)
        this_handler = handlers_lookup[this_time]
        print("handler: ", this_handler)
        this_handler(datetimepointOBJ)


    def _report_ACCRT_DATE(self):
        """Accurate Date"""
        assert self._TimePoint_in_database_suffix == "ACCRT_DATE"
        date_string = self._TimePoint_in_database
        dateString_format = "%Y-%m-%d"
        # return a datetime.date
        return datetime.datetime.strptime(date_string, dateString_format).
date()


    def _report_ACCRT_DATETIME(self):
        """Accurate DateTime"""
        assert self._TimePoint_in_database_suffix in pytz.all_timezones_set
        datetimeString_inUTC = self._TimePoint_in_database
        utc_naive = datetime.datetime.strptime(
        datetimeString_inUTC, self.datetimeString_inUTC_format)
        utc_timepoint = arrow.get(utc_naive, "utc")
        # localize
        local_timepoint = utc_timepoint.to(self.
_TimePoint_in_database_suffix)
        # return a datetime.datetime
        return local_timepoint.datetime


    def _set_ACCRT_DATETIME(self, datetimeOBJ_aware):
        assert isinstance(datetimeOBJ_aware, datetime.datetime), "Must be a 
valid datetime.datetime!"
        assert datetimeOBJ_aware.tzinfo is not None, "Must contain tzinfo!"
        utctime_aware_arrow = arrow.get(datetimeOBJ_aware).to('utc')
        utctime_aware_datetime = utctime_aware_arrow.datetime
        store_datetime_string = utctime_aware_datetime.strftime(
        self.datetimeString_inUTC_format)
        self._TimePoint_in_database = store_datetime_string


    def _set_ACCRT_DATE(self, dateOBJ):
        store_date_string = dateOBJ.isoformat()
        self._TimePoint_in_database = store_date_string

Could someone please point out a clue as to implement the 
hybrid_property.expression part? Thanks.

I've also posted a similar issue on stackoverflow.com, for reference:

http://stackoverflow.com/questions/39485440/calling-from-the-same-class-why-is-one-treated-as-bound-method-while-the-other

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to