123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- #
- # Metrix++, Copyright 2009-2013, Metrix++ Project
- # Link: http://metrixplusplus.sourceforge.net
- #
- # This file is a part of Metrix++ Tool.
- #
- # Metrix++ is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, version 3 of the License.
- #
- # Metrix++ is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with Metrix++. If not, see <http://www.gnu.org/licenses/>.
- #
- class PackagerError(Exception):
- def __init__(self, message=None):
- if message == None:
- Exception.__init__(self, "Failed to pack or unpack.")
- else:
- Exception.__init__(self, message)
- class PackagerFactory(object):
- def create(self, python_type, non_zero):
- if python_type == None:
- return PackagerFactory.SkipPackager()
- if python_type == int:
- if non_zero == False:
- return PackagerFactory.IntPackager()
- else:
- return PackagerFactory.IntNonZeroPackager()
- if python_type == float and non_zero == False:
- return PackagerFactory.FloatPackager()
- if python_type == str:
- return PackagerFactory.StringPackager()
-
- class PackagerFactoryError(Exception):
- def __init__(self, python_type):
- Exception.__init__(self, "Python type '" + str(python_type) + "' is not supported by the factory.")
- raise PackagerFactoryError(python_type)
-
- def get_python_type(self, sql_type):
- if sql_type == "integer":
- return int
- if sql_type == "real":
- return float
- if sql_type == "text":
- return str
- class PackagerFactoryError(Exception):
- def __init__(self, sql_type):
- Exception.__init__(self, "SQL type '" + str(sql_type) + "' is not supported by the factory.")
- raise PackagerFactoryError(sql_type)
- class IPackager(object):
- def pack(self, unpacked_data):
- assert False, "Internal interface not implemented"
- def unpack(self, packed_data):
- assert False, "Internal interface not implemented"
- def get_sql_type(self):
- assert False, "Internal interface not implemented"
- def get_python_type(self):
- assert False, "Internal interface not implemented"
- def is_non_zero(self):
- return False
-
- class IntPackager(IPackager):
- def pack(self, unpacked_data):
- if not isinstance(unpacked_data, int):
- raise PackagerError()
- return str(unpacked_data)
-
- def unpack(self, packed_data):
- try:
- return int(packed_data)
- except ValueError:
- raise PackagerError()
-
- def get_sql_type(self):
- return "integer"
-
- def get_python_type(self):
- return int
-
- class IntNonZeroPackager(IntPackager):
- def pack(self, unpacked_data):
- if unpacked_data == 0:
- raise PackagerError()
- return PackagerFactory.IntPackager.pack(self, unpacked_data)
- def is_non_zero(self):
- return True
- class FloatPackager(IPackager):
- def pack(self, unpacked_data):
- if not isinstance(unpacked_data, float):
- raise PackagerError()
- return str(unpacked_data)
-
- def unpack(self, packed_data):
- try:
- return float(packed_data)
- except ValueError:
- raise PackagerError()
-
- def get_sql_type(self):
- return "real"
- def get_python_type(self):
- return float
- class FloatNonZeroPackager(FloatPackager):
- def pack(self, unpacked_data):
- if unpacked_data == 0:
- raise PackagerError()
- return PackagerFactory.FloatPackager.pack(self, unpacked_data)
- def is_non_zero(self):
- return True
- class StringPackager(IPackager):
- def pack(self, unpacked_data):
- if not isinstance(unpacked_data, str):
- raise PackagerError()
- return str(unpacked_data)
-
- def unpack(self, packed_data):
- try:
- return str(packed_data)
- except ValueError:
- raise PackagerError()
-
- def get_sql_type(self):
- return "text"
- def get_python_type(self):
- return str
-
- class SkipPackager(IPackager):
- def pack(self, unpacked_data):
- return None
-
- def unpack(self, packed_data):
- return None
-
- def get_sql_type(self):
- return None
-
- def get_python_type(self):
- return None
|