mirror of
https://github.com/moparisthebest/SickRage
synced 2024-12-12 11:02:21 -05:00
69 lines
1.6 KiB
Python
69 lines
1.6 KiB
Python
import json
|
|
import os
|
|
import requests
|
|
from fanart.core import Request
|
|
from fanart.immutable import Immutable
|
|
|
|
|
|
class LeafItem(Immutable):
|
|
KEY = NotImplemented
|
|
|
|
@Immutable.mutablemethod
|
|
def __init__(self, id, url, likes):
|
|
self.id = int(id)
|
|
self.url = url
|
|
self.likes = int(likes)
|
|
self._content = None
|
|
|
|
@classmethod
|
|
def from_dict(cls, resource):
|
|
return cls(**dict([(str(k), v) for k, v in resource.iteritems()]))
|
|
|
|
@classmethod
|
|
def extract(cls, resource):
|
|
return [cls.from_dict(i) for i in resource.get(cls.KEY, {})]
|
|
|
|
@Immutable.mutablemethod
|
|
def content(self):
|
|
if not self._content:
|
|
self._content = requests.get(self.url).content
|
|
return self._content
|
|
|
|
def __str__(self):
|
|
return self.url
|
|
|
|
|
|
class ResourceItem(Immutable):
|
|
WS = NotImplemented
|
|
request_cls = Request
|
|
|
|
@classmethod
|
|
def from_dict(cls, map):
|
|
raise NotImplementedError
|
|
|
|
@classmethod
|
|
def get(cls, id):
|
|
map = cls.request_cls(
|
|
apikey=os.environ.get('FANART_APIKEY'),
|
|
id=id,
|
|
ws=cls.WS
|
|
).response()
|
|
return cls.from_dict(map)
|
|
|
|
def json(self, **kw):
|
|
return json.dumps(
|
|
self,
|
|
default=lambda o: dict([(k, v) for k, v in o.__dict__.items() if not k.startswith('_')]),
|
|
**kw
|
|
)
|
|
|
|
|
|
class CollectableItem(Immutable):
|
|
@classmethod
|
|
def from_dict(cls, key, map):
|
|
raise NotImplementedError
|
|
|
|
@classmethod
|
|
def collection_from_dict(cls, map):
|
|
return [cls.from_dict(k, v) for k, v in map.iteritems()]
|