##
# python.datetime - parts needed to use stdlib.datetime
##
import datetime

##
# stdlib.datetime representation of PostgreSQL 'infinity' and '-infinity'.
infinity_datetime = datetime.datetime(datetime.MAXYEAR, 12, 31, 23, 59, 59, 999999)
negative_infinity_datetime = datetime.datetime(datetime.MINYEAR, 1, 1, 0, 0, 0, 0)

infinity_date = datetime.date(datetime.MAXYEAR, 12, 31)
negative_infinity_date = datetime.date(datetime.MINYEAR, 1, 1)

class FixedOffset(datetime.tzinfo):
	def __init__(self, offset_in_seconds, tzname = None):
		self._tzname = tzname
		self._offset = offset_in_seconds
		self._offset_in_mins = offset_in_seconds // 60
		self._td_offset = datetime.timedelta(0, self._offset_in_mins * 60)
		self._dst = datetime.timedelta(0)

	def utcoffset(self, offset_from):
		return self._td_offset

	def tzname(self):
		return self._tzname

	def dst(self, arg):
		return self._dst

	def __repr__(self):
		return "{path}.{name}({off}{tzname})".format(
			path = type(self).__module__,
			name = type(self).__name__,
			off = repr(self._td_offset.days * 24 * 60 * 60 + self._td_offset.seconds),
			tzname = (
				", tzname = {tzname!r}".format(tzname = self._tzname) \
				if self._tzname is not None else ""
			)
		)

UTC = FixedOffset(0, tzname = 'UTC')

##
# python.datetime - parts needed to use stdlib.datetime
##
import datetime

##
# stdlib.datetime representation of PostgreSQL 'infinity' and '-infinity'.
infinity_datetime = datetime.datetime(datetime.MAXYEAR, 12, 31, 23, 59, 59, 999999)
negative_infinity_datetime = datetime.datetime(datetime.MINYEAR, 1, 1, 0, 0, 0, 0)

infinity_date = datetime.date(datetime.MAXYEAR, 12, 31)
negative_infinity_date = datetime.date(datetime.MINYEAR, 1, 1)

class FixedOffset(datetime.tzinfo):
	def __init__(self, offset_in_seconds, tzname = None):
		self._tzname = tzname
		self._offset = offset_in_seconds
		self._offset_in_mins = offset_in_seconds // 60
		self._td_offset = datetime.timedelta(0, self._offset_in_mins * 60)
		self._dst = datetime.timedelta(0)

	def utcoffset(self, offset_from):
		return self._td_offset

	def tzname(self, dt):
		return self._tzname

	def dst(self, arg):
		return self._dst

	def __repr__(self):
		return "{path}.{name}({off}{tzname})".format(
			path = type(self).__module__,
			name = type(self).__name__,
			off = repr(self._td_offset.days * 24 * 60 * 60 + self._td_offset.seconds),
			tzname = (
				", tzname = {tzname!r}".format(tzname = self._tzname) \
				if self._tzname is not None else ""
			)
		)

UTC = FixedOffset(0, tzname = 'UTC')

Fix FixedOffset.tzname() method declaration