[text] 19

Viewer

  1. class Field(dict):
  2.     @classmethod
  3.     def __check_string(cls, s):
  4.         if s.isalnum():
  5.             k = 0
  6.             for i in s:
  7.                 if i.isalpha():
  8.                     k += 1
  9.                 elif i.isdigit():
  10.                     continue
  11.                 if k > 1:
  12.                     raise ValueError
  13.         else:
  14.             raise ValueError
  15.     @classmethod
  16.     def __check_key(cls, key):
  17.         if isinstance(key, (tuple, str)):
  18.             l = 0
  19.             if isinstance(key, tuple):
  20.                 for i in key:
  21.                     if not isinstance(i, (str, int)):
  22.                         raise ValueError
  23.                     else:
  24.                         if isinstance(i, int):
  25.                             if not i >= 0:
  26.                                 raise ValueError
  27.                         elif isinstance(i, str):
  28.                             if i.isalpha():
  29.                                 l += 1
  30.                             if l > 1:
  31.                                 raise ValueError
  32.                             cls.__check_string(i)
  33.             elif isinstance(key, str):
  34.                 cls.__check_string(key)
  35.         else:
  36.             raise TypeError
  37.  
  38.     def __setitem__(self, key, value):
  39.         self.__check_key(key)
  40.         key = ''.join(str(x) for x in key)
  41.         if key.lower() not in self.__dict__.keys():
  42.             return self.__dict__.setdefault(key.lower(), value)
  43.         else:
  44.             self.__dict__[key.lower()] = value
  45.  
  46.     def __getitem__(self, item):
  47.         self.__check_key(item)
  48.         item = ''.join(str(x) for x in item)
  49.         if item.lower() in self.__dict__.keys():
  50.             return self.__dict__.get(item.lower())
  51.         elif item[::-1].lower() in self.__dict__.keys():
  52.             return self.__dict__.get(item[::-1].lower())
  53.         else:
  54.             return None
  55.  
  56.     def __delitem__(self, key):
  57.         self.__check_key(key)
  58.         key = ''.join(str(x) for x in key)
  59.         if key.lower() in self.__dict__.keys():
  60.             del self.__dict__[key.lower()]
  61.         elif key.lower()[::-1] in self.__dict__.keys():
  62.             del self.__dict__[key.lower()[::-1]]
  63.  
  64.     def __iter__(self):
  65.         self.fiksator = -1
  66.         return self
  67.  
  68.     def __contains__(self, item):
  69.         item = ''.join(str(x) for x in item)
  70.         return item.lower() in self.__dict__.keys() or item[::-1].lower() in self.__dict__.keys()
  71.  
  72.     def __next__(self):
  73.         self.fiksator += 1
  74.         if self.fiksator < len(self.__dict__) - 1:
  75.             a = list(self.__dict__.keys())[:list(self.__dict__.keys()).index('fiksator')]
  76.             return self.__dict__[a[self.fiksator]]
  77.         else:
  78.             raise StopIteration
  79.  
  80.     def __setattr__(self, key, value):
  81.         self.__dict__[key.lower()] = value
  82.  
  83.     #def __getattribute__(self, item):
  84.         #return super(Field, self).__getitem__(item.lower())
  85.  
  86.     def __getattr__(self, item):
  87.         if item.lower() in self.__dict__.keys():
  88.             return self.__dict__.get(item.lower())
  89.         elif item.lower()[::-1] in self.__dict__.keys():
  90.             return self.__dict__.get(item.lower()[::-1])
  91.  
  92.     def __delattr__(self, item):
  93.         del self.__dict__[item.lower()]
  94.  

Editor

You can edit this paste and save as new:


File Description
  • 19
  • Paste Code
  • 26 Nov-2022
  • 3.21 Kb
You can Share it: