fix tmdbapis
This commit is contained in:
102
app/modules/themoviedb/tmdbv3api/as_obj.py
Normal file
102
app/modules/themoviedb/tmdbv3api/as_obj.py
Normal file
@ -0,0 +1,102 @@
|
||||
# encoding: utf-8
|
||||
import sys
|
||||
|
||||
|
||||
class AsObj:
|
||||
def __init__(self, json=None, key=None, dict_key=False, dict_key_name=None):
|
||||
self._json = json if json else {}
|
||||
self._key = key
|
||||
self._dict_key = dict_key
|
||||
self._dict_key_name = dict_key_name
|
||||
self._obj_list = []
|
||||
self._list_only = False
|
||||
if isinstance(self._json, list):
|
||||
self._obj_list = [AsObj(o) if isinstance(o, (dict, list)) else o for o in self._json]
|
||||
self._list_only = True
|
||||
elif dict_key:
|
||||
self._obj_list = [
|
||||
AsObj({k: v}, key=k, dict_key_name=dict_key_name) if isinstance(v, (dict, list)) else v
|
||||
for k, v in self._json.items()
|
||||
]
|
||||
self._list_only = True
|
||||
else:
|
||||
for key, value in self._json.items():
|
||||
if isinstance(value, (dict, list)):
|
||||
if self._key and key == self._key:
|
||||
final = AsObj(value, dict_key=isinstance(value, dict), dict_key_name=key)
|
||||
self._obj_list = final
|
||||
else:
|
||||
final = AsObj(value)
|
||||
else:
|
||||
final = value
|
||||
if dict_key_name:
|
||||
setattr(self, dict_key_name, key)
|
||||
setattr(self, key, final)
|
||||
|
||||
def _dict(self):
|
||||
return {k: v for k, v in self.__dict__.items() if not k.startswith("_")}
|
||||
|
||||
def __delitem__(self, key):
|
||||
return delattr(self, key)
|
||||
|
||||
def __getitem__(self, key):
|
||||
if isinstance(key, int) and self._obj_list:
|
||||
return self._obj_list[key]
|
||||
else:
|
||||
return getattr(self, key)
|
||||
|
||||
def __iter__(self):
|
||||
return (o for o in self._obj_list) if self._obj_list else iter(self._dict())
|
||||
|
||||
def __len__(self):
|
||||
return len(self._obj_list) if self._obj_list else len(self._dict())
|
||||
|
||||
def __repr__(self):
|
||||
return str(self._obj_list) if self._list_only else str(self._dict())
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
return setattr(self, key, value)
|
||||
|
||||
def __str__(self):
|
||||
return str(self._obj_list) if self._list_only else str(self._dict())
|
||||
|
||||
if sys.version_info >= (3, 8):
|
||||
def __reversed__(self):
|
||||
return reversed(self._dict())
|
||||
|
||||
if sys.version_info >= (3, 9):
|
||||
def __class_getitem__(self, key):
|
||||
return self.__dict__.__class_getitem__(key)
|
||||
|
||||
def __ior__(self, value):
|
||||
return self._dict().__ior__(value)
|
||||
|
||||
def __or__(self, value):
|
||||
return self._dict().__or__(value)
|
||||
|
||||
def copy(self):
|
||||
return AsObj(self._json.copy(), key=self._key, dict_key=self._dict_key, dict_key_name=self._dict_key_name)
|
||||
|
||||
def get(self, key, value=None):
|
||||
return self._dict().get(key, value)
|
||||
|
||||
def items(self):
|
||||
return self._dict().items()
|
||||
|
||||
def keys(self):
|
||||
return self._dict().keys()
|
||||
|
||||
def pop(self, key, value=None):
|
||||
return self.__dict__.pop(key, value)
|
||||
|
||||
def popitem(self):
|
||||
return self.__dict__.popitem()
|
||||
|
||||
def setdefault(self, key, value=None):
|
||||
return self.__dict__.setdefault(key, value)
|
||||
|
||||
def update(self, entries):
|
||||
return self.__dict__.update(entries)
|
||||
|
||||
def values(self):
|
||||
return self._dict().values()
|
Reference in New Issue
Block a user