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.