def postTypeInit(self): self.size = self.opts.get('size') self.signed = self.opts.get('signed') self.stortype = intstors.get((self.size, self.signed)) if self.stortype is None: mesg = f'Invalid integer size ({self.size})' raise s_exc.BadTypeDef(mesg=mesg) self.enumnorm = {} self.enumrepr = {} enums = self.opts.get('enums') if enums is not None: self.enumrepr.update(dict(enums)) self.enumnorm.update({(n.lower(), v) for (v, n) in enums}) if len(enums) != len(self.enumrepr): mesg = 'Number of enums does not match the number of string reprs.' raise s_exc.BadTypeDef(mesg=mesg, name=self.name) if len(enums) != len(self.enumnorm): mesg = 'Number of enums does not match the number of string norms.' raise s_exc.BadTypeDef(mesg=mesg, name=self.name) minval = self.opts.get('min') maxval = self.opts.get('max') minmin = -2 ** ((self.size * 8) - 1) if minval is None: minval = minmin maxmax = 2 ** ((self.size * 8) - 1) - 1 if maxval is None: maxval = maxmax if minval < minmin or maxval > maxmax or maxval < minval: raise s_exc.BadTypeDef(self.opts, name=self.name) if not self.signed: self._indx_offset = 0 self.minval = 0 self.maxval = min(2 * maxval, maxval) else: self._indx_offset = maxmax + 1 self.minval = max(minmin, minval) self.maxval = min(maxmax, maxval) self.setNormFunc(str, self._normPyStr) self.setNormFunc(int, self._normPyInt) self.setNormFunc(bool, self._normPyBool)
def postTypeInit(self): subtype = self.opts.get('type') if not(type(subtype) is tuple and len(subtype) == 2): raise s_exc.BadTypeDef(self.opts, name=self.name) try: self.subtype = self.modl.type(subtype[0]).clone(subtype[1]) except Exception: logger.exception('subtype invalid or unavailable') raise s_exc.BadTypeDef(self.opts, name=self.name, mesg='subtype invalid or unavailable') self.setNormFunc(str, self._normPyStr) self.setNormFunc(tuple, self._normPyTuple) self.setNormFunc(list, self._normPyTuple)
def __missing__(self, key): val = self.fields.get(key) if not val: raise s_exc.BadTypeDef(valu=key, mesg='unconfigured field requested') if isinstance(val, str): _type = self.modl.type(val) if not _type: raise s_exc.BadTypeDef(valu=val, mesg='type is not present in datamodel') else: # val is a type, opts pair tname, opts = val basetype = self.modl.type(tname) if not basetype: raise s_exc.BadTypeDef(valu=val, mesg='type is not present in datamodel') _type = basetype.clone(opts) self.setdefault(key, _type) return _type
def postTypeInit(self): self.isuniq = self.opts.get('uniq', False) self.issorted = self.opts.get('sorted', False) typename = self.opts.get('type') if typename is None: mesg = 'Array type requires type= option.' raise s_exc.BadTypeDef(mesg=mesg) typeopts = self.opts.get('typeopts', {}) self.arraytype = self.modl.type(typename).clone(typeopts) if isinstance(self.arraytype, Array): mesg = 'Array type of array values is not (yet) supported.' raise s_exc.BadTypeDef(mesg) self.setNormFunc(list, self._normPyTuple) self.setNormFunc(tuple, self._normPyTuple)
def postTypeInit(self): self.size = self.opts.get('size') self.signed = self.opts.get('signed') self.enumnorm = {} self.enumrepr = {} enums = self.opts.get('enums') if enums is not None: self.enumrepr.update(dict(enums)) self.enumnorm.update({(n, v) for (v, n) in enums}) minval = self.opts.get('min') maxval = self.opts.get('max') minmin = -2**((self.size * 8) - 1) if minval is None: minval = minmin maxmax = 2**((self.size * 8) - 1) - 1 if maxval is None: maxval = maxmax if minval < minmin or maxval > maxmax or maxval < minval: raise s_exc.BadTypeDef(self.opts, name=self.name) if not self.signed: self._indx_offset = 0 self.minval = 0 self.maxval = min(2 * maxval, maxval) else: self._indx_offset = maxmax + 1 self.minval = max(minmin, minval) self.maxval = min(maxmax, maxval) self.setNormFunc(str, self._normPyStr) self.setNormFunc(int, self._normPyInt)