Improve pylint score to above 9 for most gen.lib objects
This commit is contained in:
		@@ -28,7 +28,7 @@ AttributeRootBase class for Gramps.
 | 
			
		||||
# Gramps modules
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
from .attribute import Attribute
 | 
			
		||||
from .attribute import Attribute, AttributeRoot
 | 
			
		||||
from .srcattribute import SrcAttribute
 | 
			
		||||
from .const import IDENTICAL, EQUAL
 | 
			
		||||
 | 
			
		||||
@@ -41,7 +41,7 @@ class AttributeRootBase(object):
 | 
			
		||||
    """
 | 
			
		||||
    Base class for attribute-aware objects.
 | 
			
		||||
    """
 | 
			
		||||
    _CLASS = None
 | 
			
		||||
    _CLASS = AttributeRoot
 | 
			
		||||
 | 
			
		||||
    def __init__(self, source=None):
 | 
			
		||||
        """
 | 
			
		||||
 
 | 
			
		||||
@@ -34,30 +34,30 @@ import math
 | 
			
		||||
# Constants
 | 
			
		||||
#
 | 
			
		||||
#-------------------------------------------------------------------------
 | 
			
		||||
_GRG_SDN_OFFSET         = 32045
 | 
			
		||||
_GRG_DAYS_PER_5_MONTHS  = 153
 | 
			
		||||
_GRG_DAYS_PER_4_YEARS   = 1461
 | 
			
		||||
_GRG_SDN_OFFSET = 32045
 | 
			
		||||
_GRG_DAYS_PER_5_MONTHS = 153
 | 
			
		||||
_GRG_DAYS_PER_4_YEARS = 1461
 | 
			
		||||
_GRG_DAYS_PER_400_YEARS = 146097
 | 
			
		||||
 | 
			
		||||
_JLN_SDN_OFFSET            = 32083
 | 
			
		||||
_JLN_DAYS_PER_5_MONTHS     = 153
 | 
			
		||||
_JLN_DAYS_PER_4_YEARS      = 1461
 | 
			
		||||
_JLN_SDN_OFFSET = 32083
 | 
			
		||||
_JLN_DAYS_PER_5_MONTHS = 153
 | 
			
		||||
_JLN_DAYS_PER_4_YEARS = 1461
 | 
			
		||||
 | 
			
		||||
_HBR_HALAKIM_PER_HOUR          = 1080
 | 
			
		||||
_HBR_HALAKIM_PER_DAY           = 25920
 | 
			
		||||
_HBR_HALAKIM_PER_LUNAR_CYCLE   = 29 * _HBR_HALAKIM_PER_DAY + 13753
 | 
			
		||||
_HBR_HALAKIM_PER_HOUR = 1080
 | 
			
		||||
_HBR_HALAKIM_PER_DAY = 25920
 | 
			
		||||
_HBR_HALAKIM_PER_LUNAR_CYCLE = 29 * _HBR_HALAKIM_PER_DAY + 13753
 | 
			
		||||
_HBR_HALAKIM_PER_METONIC_CYCLE = _HBR_HALAKIM_PER_LUNAR_CYCLE * (12 * 19 + 7)
 | 
			
		||||
_HBR_SDN_OFFSET                = 347997
 | 
			
		||||
_HBR_NEW_MOON_OF_CREATION      = 31524
 | 
			
		||||
_HBR_NOON                      = 18 * _HBR_HALAKIM_PER_HOUR
 | 
			
		||||
_HBR_AM3_11_20                 = (9 * _HBR_HALAKIM_PER_HOUR) + 204
 | 
			
		||||
_HBR_AM9_32_43                 = (15 * _HBR_HALAKIM_PER_HOUR) + 589
 | 
			
		||||
_HBR_SDN_OFFSET = 347997
 | 
			
		||||
_HBR_NEW_MOON_OF_CREATION = 31524
 | 
			
		||||
_HBR_NOON = 18 * _HBR_HALAKIM_PER_HOUR
 | 
			
		||||
_HBR_AM3_11_20 = (9 * _HBR_HALAKIM_PER_HOUR) + 204
 | 
			
		||||
_HBR_AM9_32_43 = (15 * _HBR_HALAKIM_PER_HOUR) + 589
 | 
			
		||||
 | 
			
		||||
_HBR_SUNDAY    = 0
 | 
			
		||||
_HBR_MONDAY    = 1
 | 
			
		||||
_HBR_TUESDAY   = 2
 | 
			
		||||
_HBR_SUNDAY = 0
 | 
			
		||||
_HBR_MONDAY = 1
 | 
			
		||||
_HBR_TUESDAY = 2
 | 
			
		||||
_HBR_WEDNESDAY = 3
 | 
			
		||||
_HBR_FRIDAY    = 5
 | 
			
		||||
_HBR_FRIDAY = 5
 | 
			
		||||
 | 
			
		||||
_HBR_MONTHS_PER_YEAR = [
 | 
			
		||||
    12, 12, 13, 12, 12, 13, 12, 13, 12, 12,
 | 
			
		||||
@@ -69,25 +69,25 @@ _HBR_YEAR_OFFSET = [
 | 
			
		||||
    136, 148, 160, 173, 185, 197, 210, 222
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
_FR_SDN_OFFSET         = 2375474
 | 
			
		||||
_FR_DAYS_PER_4_YEARS   = 1461
 | 
			
		||||
_FR_DAYS_PER_MONTH     = 30
 | 
			
		||||
_PRS_EPOCH             = 1948320.5
 | 
			
		||||
_ISM_EPOCH             = 1948439.5
 | 
			
		||||
_FR_SDN_OFFSET = 2375474
 | 
			
		||||
_FR_DAYS_PER_4_YEARS = 1461
 | 
			
		||||
_FR_DAYS_PER_MONTH = 30
 | 
			
		||||
_PRS_EPOCH = 1948320.5
 | 
			
		||||
_ISM_EPOCH = 1948439.5
 | 
			
		||||
 | 
			
		||||
def _tishri1(metonic_year, molad_day, molad_halakim):
 | 
			
		||||
 | 
			
		||||
    tishri1 = molad_day
 | 
			
		||||
    dow = tishri1 % 7
 | 
			
		||||
    leap_year = metonic_year in [ 2, 5, 7, 10, 13, 16, 18]
 | 
			
		||||
    last_was_leap_year = metonic_year in [ 3, 6, 8, 11, 14, 17, 0]
 | 
			
		||||
    leap_year = metonic_year in [2, 5, 7, 10, 13, 16, 18]
 | 
			
		||||
    last_was_leap_year = metonic_year in [3, 6, 8, 11, 14, 17, 0]
 | 
			
		||||
 | 
			
		||||
    # Apply rules 2, 3 and 4.
 | 
			
		||||
    if ((molad_halakim >= _HBR_NOON) or
 | 
			
		||||
        ((not leap_year) and dow == _HBR_TUESDAY and
 | 
			
		||||
         molad_halakim >= _HBR_AM3_11_20) or
 | 
			
		||||
        (last_was_leap_year and dow == _HBR_MONDAY
 | 
			
		||||
         and molad_halakim >= _HBR_AM9_32_43)) :
 | 
			
		||||
            ((not leap_year) and dow == _HBR_TUESDAY and
 | 
			
		||||
             molad_halakim >= _HBR_AM3_11_20) or
 | 
			
		||||
            (last_was_leap_year and dow == _HBR_MONDAY
 | 
			
		||||
             and molad_halakim >= _HBR_AM9_32_43)):
 | 
			
		||||
        tishri1 += 1
 | 
			
		||||
        dow += 1
 | 
			
		||||
        if dow == 7:
 | 
			
		||||
@@ -133,8 +133,8 @@ def _tishri_molad(input_day):
 | 
			
		||||
            break
 | 
			
		||||
 | 
			
		||||
        molad_halakim += (_HBR_HALAKIM_PER_LUNAR_CYCLE
 | 
			
		||||
                * _HBR_MONTHS_PER_YEAR[metonic_year])
 | 
			
		||||
        molad_day +=  molad_halakim // _HBR_HALAKIM_PER_DAY
 | 
			
		||||
                          * _HBR_MONTHS_PER_YEAR[metonic_year])
 | 
			
		||||
        molad_day += molad_halakim // _HBR_HALAKIM_PER_DAY
 | 
			
		||||
        molad_halakim = molad_halakim % _HBR_HALAKIM_PER_DAY
 | 
			
		||||
 | 
			
		||||
    return (metonic_cycle, metonic_year, molad_day, molad_halakim)
 | 
			
		||||
@@ -182,9 +182,9 @@ def _start_of_year(year):
 | 
			
		||||
    molad_day = molad_day + (molad_halakim // _HBR_HALAKIM_PER_DAY)
 | 
			
		||||
    molad_halakim = molad_halakim % _HBR_HALAKIM_PER_DAY
 | 
			
		||||
 | 
			
		||||
    pTishri1 = _tishri1(metonic_year, molad_day, molad_halakim)
 | 
			
		||||
    ptishri1 = _tishri1(metonic_year, molad_day, molad_halakim)
 | 
			
		||||
 | 
			
		||||
    return (metonic_cycle, metonic_year, molad_day, molad_halakim, pTishri1)
 | 
			
		||||
    return (metonic_cycle, metonic_year, molad_day, molad_halakim, ptishri1)
 | 
			
		||||
 | 
			
		||||
def hebrew_sdn(year, month, day):
 | 
			
		||||
    """Convert a Jewish calendar date to an SDN number."""
 | 
			
		||||
@@ -225,16 +225,16 @@ def hebrew_sdn(year, month, day):
 | 
			
		||||
         molad_day, molad_halakim, tishri1_after) = _start_of_year(year+1)
 | 
			
		||||
 | 
			
		||||
        if _HBR_MONTHS_PER_YEAR[(year - 1) % 19] == 12:
 | 
			
		||||
            length_of_adarI_andII = 29
 | 
			
		||||
            length_of_adar_1and2 = 29
 | 
			
		||||
        else:
 | 
			
		||||
            length_of_adarI_andII = 59
 | 
			
		||||
            length_of_adar_1and2 = 59
 | 
			
		||||
 | 
			
		||||
        if month == 4:
 | 
			
		||||
            sdn = tishri1_after + day - length_of_adarI_andII - 237
 | 
			
		||||
            sdn = tishri1_after + day - length_of_adar_1and2 - 237
 | 
			
		||||
        elif month == 5:
 | 
			
		||||
            sdn = tishri1_after + day - length_of_adarI_andII - 208
 | 
			
		||||
            sdn = tishri1_after + day - length_of_adar_1and2 - 208
 | 
			
		||||
        else:
 | 
			
		||||
            sdn = tishri1_after + day - length_of_adarI_andII - 178
 | 
			
		||||
            sdn = tishri1_after + day - length_of_adar_1and2 - 178
 | 
			
		||||
    else:
 | 
			
		||||
        # It is Adar II or later - don't need the year length.
 | 
			
		||||
        (metonic_cycle, metonic_year,
 | 
			
		||||
@@ -284,7 +284,7 @@ def hebrew_ymd(sdn):
 | 
			
		||||
        # Tishri 1 of the next year.
 | 
			
		||||
 | 
			
		||||
        halakim += (_HBR_HALAKIM_PER_LUNAR_CYCLE
 | 
			
		||||
                * _HBR_MONTHS_PER_YEAR[metonic_year])
 | 
			
		||||
                    * _HBR_MONTHS_PER_YEAR[metonic_year])
 | 
			
		||||
        day1 += halakim // _HBR_HALAKIM_PER_DAY
 | 
			
		||||
        halakim = halakim % _HBR_HALAKIM_PER_DAY
 | 
			
		||||
        tishri1_after = _tishri1((metonic_year + 1) % 19, day1, halakim)
 | 
			
		||||
@@ -348,7 +348,7 @@ def hebrew_ymd(sdn):
 | 
			
		||||
 | 
			
		||||
    year_length = tishri1_after - tishri1
 | 
			
		||||
    day = input_day - tishri1 - 29
 | 
			
		||||
    if year_length == 355 or year_length == 385 :
 | 
			
		||||
    if year_length == 355 or year_length == 385:
 | 
			
		||||
        # Heshvan has 30 days
 | 
			
		||||
        if day <= 30:
 | 
			
		||||
            month = 2
 | 
			
		||||
@@ -378,7 +378,7 @@ def julian_sdn(year, month, day):
 | 
			
		||||
        month -= 3
 | 
			
		||||
    else:
 | 
			
		||||
        month += 9
 | 
			
		||||
        year  -= 1
 | 
			
		||||
        year -= 1
 | 
			
		||||
 | 
			
		||||
    return (year * _JLN_DAYS_PER_4_YEARS) // 4 \
 | 
			
		||||
           + (month * _JLN_DAYS_PER_5_MONTHS + 2) // 5 \
 | 
			
		||||
@@ -423,13 +423,13 @@ def gregorian_sdn(year, month, day):
 | 
			
		||||
        month -= 3
 | 
			
		||||
    else:
 | 
			
		||||
        month += 9
 | 
			
		||||
        year  -= 1
 | 
			
		||||
        year -= 1
 | 
			
		||||
 | 
			
		||||
    return(((year // 100) * _GRG_DAYS_PER_400_YEARS) // 4
 | 
			
		||||
           + ((year % 100) * _GRG_DAYS_PER_4_YEARS) // 4
 | 
			
		||||
           + (month * _GRG_DAYS_PER_5_MONTHS + 2) // 5
 | 
			
		||||
           + day
 | 
			
		||||
           - _GRG_SDN_OFFSET )
 | 
			
		||||
           - _GRG_SDN_OFFSET)
 | 
			
		||||
 | 
			
		||||
def gregorian_ymd(sdn):
 | 
			
		||||
    """Convert an SDN number to a gregorian date."""
 | 
			
		||||
@@ -449,7 +449,7 @@ def gregorian_ymd(sdn):
 | 
			
		||||
    day = (temp % _GRG_DAYS_PER_5_MONTHS) // 5 + 1
 | 
			
		||||
 | 
			
		||||
    # Convert to the normal beginning of the year
 | 
			
		||||
    if month < 10 :
 | 
			
		||||
    if month < 10:
 | 
			
		||||
        month = month + 3
 | 
			
		||||
    else:
 | 
			
		||||
        year = year + 1
 | 
			
		||||
@@ -560,12 +560,12 @@ def swedish_sdn(year, month, day):
 | 
			
		||||
def swedish_ymd(sdn):
 | 
			
		||||
    """Convert an SDN number to a Swedish calendar date."""
 | 
			
		||||
    if sdn == 2346425:
 | 
			
		||||
         return (1712, 2, 30)
 | 
			
		||||
        return (1712, 2, 30)
 | 
			
		||||
    # Swedish Calendar
 | 
			
		||||
    elif 2342042 <= sdn < 2346425:
 | 
			
		||||
        return julian_ymd(sdn+1)
 | 
			
		||||
    # Gregorian Calendar (1753-03-01)
 | 
			
		||||
    elif 2361390 <= sdn:
 | 
			
		||||
    elif sdn >= 2361390:
 | 
			
		||||
        return gregorian_ymd(sdn)
 | 
			
		||||
    else:
 | 
			
		||||
        return julian_ymd(sdn)
 | 
			
		||||
 
 | 
			
		||||
@@ -125,14 +125,14 @@ class BasicPrimaryObject(TableObject, PrivacyBase, TagBase):
 | 
			
		||||
        """
 | 
			
		||||
        Return labels.
 | 
			
		||||
        """
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
        return {}
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_schema(cls):
 | 
			
		||||
        """
 | 
			
		||||
        Return schema.
 | 
			
		||||
        """
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
        return {}
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_label(cls, field, _):
 | 
			
		||||
 
 | 
			
		||||
@@ -105,7 +105,7 @@ class SecondaryObject(BaseObject):
 | 
			
		||||
        """
 | 
			
		||||
        Return labels.
 | 
			
		||||
        """
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
        return {}
 | 
			
		||||
 | 
			
		||||
    def get_label(self, field, _):
 | 
			
		||||
        """
 | 
			
		||||
 
 | 
			
		||||
@@ -53,19 +53,3 @@ class SrcAttribute(AttributeRoot):
 | 
			
		||||
        else:
 | 
			
		||||
            self.type = SrcAttributeType()
 | 
			
		||||
            self.value = ""
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    def get_text_data_list(self):
 | 
			
		||||
        """
 | 
			
		||||
        Return the list of all textual attributes of the object.
 | 
			
		||||
 | 
			
		||||
        :returns: Returns the list of all textual attributes of the object.
 | 
			
		||||
        :rtype: list
 | 
			
		||||
        """
 | 
			
		||||
        sat = SrcAttributeType()
 | 
			
		||||
        if self.type == sat.SRCTYPE:
 | 
			
		||||
            #we convert to the native language if possible
 | 
			
		||||
            if self.value and self.value in sat.E2I_SRCTYPEMAP:
 | 
			
		||||
                return [sat.I2S_SRCTYPEMAP[sat.E2I_SRCTYPEMAP[self.value]]]
 | 
			
		||||
        return [self.value]
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -88,8 +88,11 @@ class StyledText(object):
 | 
			
		||||
 | 
			
		||||
    # special methods
 | 
			
		||||
 | 
			
		||||
    def __str__(self): return self._string.__str__()
 | 
			
		||||
    def __repr__(self): return self._string.__repr__()
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        return self._string.__str__()
 | 
			
		||||
 | 
			
		||||
    def __repr__(self):
 | 
			
		||||
        return self._string.__repr__()
 | 
			
		||||
 | 
			
		||||
    def __add__(self, other):
 | 
			
		||||
        """Implement '+' operation on the class.
 | 
			
		||||
@@ -104,12 +107,12 @@ class StyledText(object):
 | 
			
		||||
 | 
			
		||||
        if isinstance(other, StyledText):
 | 
			
		||||
            # need to join strings and merge tags
 | 
			
		||||
            for tag in other._tags:
 | 
			
		||||
            for tag in other.tags:
 | 
			
		||||
                tag.ranges = [(start + offset, end + offset)
 | 
			
		||||
                              for (start, end) in tag.ranges]
 | 
			
		||||
 | 
			
		||||
            return self.__class__("".join([self._string, other._string]),
 | 
			
		||||
                                  self._tags + other._tags)
 | 
			
		||||
            return self.__class__("".join([self._string, other.string]),
 | 
			
		||||
                                  self._tags + other.tags)
 | 
			
		||||
        elif isinstance(other, str):
 | 
			
		||||
            # tags remain the same, only text becomes longer
 | 
			
		||||
            return self.__class__("".join([self._string, other]), self._tags)
 | 
			
		||||
@@ -118,13 +121,13 @@ class StyledText(object):
 | 
			
		||||
                                  self._tags)
 | 
			
		||||
 | 
			
		||||
    def __eq__(self, other):
 | 
			
		||||
        return self._string == other._string and self._tags == other._tags
 | 
			
		||||
        return self._string == other.string and self._tags == other.tags
 | 
			
		||||
 | 
			
		||||
    def __ne__(self, other):
 | 
			
		||||
        return self._string != other._string or self._tags != other._tags
 | 
			
		||||
        return self._string != other.string or self._tags != other.tags
 | 
			
		||||
 | 
			
		||||
    def __lt__(self, other):
 | 
			
		||||
        return self._string < other._string
 | 
			
		||||
        return self._string < other.string
 | 
			
		||||
 | 
			
		||||
    def __le__(self, other):
 | 
			
		||||
        return self.__lt__(other) or self.__eq__(other)
 | 
			
		||||
@@ -138,24 +141,25 @@ class StyledText(object):
 | 
			
		||||
    def __mod__(self, other):
 | 
			
		||||
        """Implement '%' operation on the class."""
 | 
			
		||||
 | 
			
		||||
        # test whether the formatting operation is valid at all
 | 
			
		||||
        # This will raise an exception if the formatting operation is invalid
 | 
			
		||||
        self._string % other
 | 
			
		||||
 | 
			
		||||
        result = self.__class__(self._string, self._tags)
 | 
			
		||||
 | 
			
		||||
        i0 = 0
 | 
			
		||||
        start = 0
 | 
			
		||||
        while True:
 | 
			
		||||
            i1 = result._string.find('%', i0)
 | 
			
		||||
            if i1 < 0:
 | 
			
		||||
            idx1 = result.string.find('%', start)
 | 
			
		||||
            if idx1 < 0:
 | 
			
		||||
                break
 | 
			
		||||
            if result._string[i1+1] == '(':
 | 
			
		||||
                i2 = result._string.find(')', i1+3)
 | 
			
		||||
                param_name = result._string[i1+2:i2]
 | 
			
		||||
            if result.string[idx1+1] == '(':
 | 
			
		||||
                idx2 = result.string.find(')', idx1+3)
 | 
			
		||||
                param_name = result.string[idx1+2:idx2]
 | 
			
		||||
            else:
 | 
			
		||||
                i2 = i1
 | 
			
		||||
                idx2 = idx1
 | 
			
		||||
                param_name = None
 | 
			
		||||
            for i3 in range(i2+1, len(result._string)):
 | 
			
		||||
                if result._string[i3] in 'diouxXeEfFgGcrs%':
 | 
			
		||||
            end = idx2 + 1
 | 
			
		||||
            for end in range(idx2+1, len(result.string)):
 | 
			
		||||
                if result.string[end] in 'diouxXeEfFgGcrs%':
 | 
			
		||||
                    break
 | 
			
		||||
            if param_name is not None:
 | 
			
		||||
                param = other[param_name]
 | 
			
		||||
@@ -165,10 +169,12 @@ class StyledText(object):
 | 
			
		||||
            else:
 | 
			
		||||
                param = other
 | 
			
		||||
            if not isinstance(param, StyledText):
 | 
			
		||||
                param = StyledText('%' + result._string[i2+1:i3+1] % param)
 | 
			
		||||
            (before, after) = result.split(result._string[i1:i3+1], 1)
 | 
			
		||||
            result = before + param + after
 | 
			
		||||
            i0 = i3 + 1
 | 
			
		||||
                param_type = '%' + result.string[idx2+1:end+1]
 | 
			
		||||
                param = StyledText(param_type % param)
 | 
			
		||||
            parts = result.split(result.string[idx1:end+1], 1)
 | 
			
		||||
            if len(parts) == 2:
 | 
			
		||||
                result = parts[0] + param + parts[1]
 | 
			
		||||
            start = end + 1
 | 
			
		||||
 | 
			
		||||
        return result
 | 
			
		||||
 | 
			
		||||
@@ -194,7 +200,7 @@ class StyledText(object):
 | 
			
		||||
 | 
			
		||||
        for text in seq:
 | 
			
		||||
            if isinstance(text, StyledText):
 | 
			
		||||
                for tag in text._tags:
 | 
			
		||||
                for tag in text.tags:
 | 
			
		||||
                    tag.ranges = [(start + offset, end + offset)
 | 
			
		||||
                                  for (start, end) in tag.ranges]
 | 
			
		||||
                    new_tags += [tag]
 | 
			
		||||
@@ -320,8 +326,8 @@ class StyledText(object):
 | 
			
		||||
        """
 | 
			
		||||
        default = StyledText()
 | 
			
		||||
        return (struct.get("string", default.string),
 | 
			
		||||
                    [StyledTextTag.from_struct(t)
 | 
			
		||||
                    for t in struct.get("tags", default.tags)])
 | 
			
		||||
                [StyledTextTag.from_struct(t)
 | 
			
		||||
                 for t in struct.get("tags", default.tags)])
 | 
			
		||||
 | 
			
		||||
    def unserialize(self, data):
 | 
			
		||||
        """
 | 
			
		||||
 
 | 
			
		||||
@@ -78,6 +78,55 @@ class TableObject(BaseObject):
 | 
			
		||||
            self.handle = None
 | 
			
		||||
            self.change = 0
 | 
			
		||||
 | 
			
		||||
    def serialize(self):
 | 
			
		||||
        """
 | 
			
		||||
        Convert the object to a serialized tuple of data.
 | 
			
		||||
        """
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
 | 
			
		||||
    def unserialize(self, data):
 | 
			
		||||
        """
 | 
			
		||||
        Convert a serialized tuple of data to an object.
 | 
			
		||||
        """
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
 | 
			
		||||
    def to_struct(self):
 | 
			
		||||
        """
 | 
			
		||||
        Convert the data held in this object to a structure (eg,
 | 
			
		||||
        struct) that represents all the data elements.
 | 
			
		||||
 | 
			
		||||
        This method is used to recursively convert the object into a
 | 
			
		||||
        self-documenting form that can easily be used for various
 | 
			
		||||
        purposes, including diffs and queries.
 | 
			
		||||
 | 
			
		||||
        These structures may be primitive Python types (string,
 | 
			
		||||
        integer, boolean, etc.) or complex Python types (lists,
 | 
			
		||||
        tuples, or dicts). If the return type is a dict, then the keys
 | 
			
		||||
        of the dict match the fieldname of the object. If the return
 | 
			
		||||
        struct (or value of a dict key) is a list, then it is a list
 | 
			
		||||
        of structs. Otherwise, the struct is just the value of the
 | 
			
		||||
        attribute.
 | 
			
		||||
 | 
			
		||||
        :returns: Returns a struct containing the data of the object.
 | 
			
		||||
        """
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
 | 
			
		||||
    def from_struct(self, struct):
 | 
			
		||||
        """
 | 
			
		||||
        Given a struct data representation, return an object of this type.
 | 
			
		||||
 | 
			
		||||
        These structures may be primitive Python types (string,
 | 
			
		||||
        integer, boolean, etc.) or complex Python types (lists,
 | 
			
		||||
        tuples, or dicts). If the return type is a dict, then the keys
 | 
			
		||||
        of the dict match the fieldname of the object. If the return
 | 
			
		||||
        struct (or value of a dict key) is a list, then it is a list
 | 
			
		||||
        of structs. Otherwise, the struct is just the value of the
 | 
			
		||||
        attribute.
 | 
			
		||||
 | 
			
		||||
        :returns: Returns an object of this type.
 | 
			
		||||
        """
 | 
			
		||||
        raise NotImplementedError
 | 
			
		||||
 | 
			
		||||
    def get_change_time(self):
 | 
			
		||||
        """
 | 
			
		||||
        Return the time that the data was last changed.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user