| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- import logging
- import pymongo
- from . import api
- from ._plugin import Plugin
- from .utils.db import Mongo
- from .utils import reformat
- gamedata = api.get_gamedata()
- logger = logging.getLogger(__name__)
- class Profile(Plugin):
- def __init__(self, runner, func):
- super(Profile, self).__init__(runner)
- self._func = func
- # Lazy
- self._raw = None
- self._formatted = None
- @property
- def raw(self):
- if self._raw is None:
- self._raw = self._func(self)
- return self._raw
- @property
- def formatted(self):
- if self._formatted is None:
- self._formatted = {
- 'career': reformat.detailed_mapping(gamedata, self.raw),
- 'heroComparison': reformat.hero_comparison_mapping(gamedata, self.raw),
- 'player': self.raw['player'],
- }
- return self._formatted
- def refresh(self):
- self._raw = None
- self._formatted = None
- def to_db_record(self):
- return {
- 'user': self._id,
- **self.raw
- }
- def __gt__(self, other):
- # since it is gt, other will always be latest_profile,
- # if it is None, there's no record in db,
- # Init it
- if other.raw is None:
- return True
- return self.raw['lastUpdate'].__gt__(other.raw['lastUpdate'])
- @property
- def basic(self):
- data = self.raw['player']
- return {
- 'battleTag': data['displayName'],
- 'level': data['level'],
- 'gamewon': data['gameWon'],
- 'endorsement': data['endorsement'],
- 'currentSR': data['ranked']['level'],
- 'highestSR': data['ranked']['highestLevel']
- }
- class DBProfile(Profile):
- def __init__(self, runner):
- def _retriever(self):
- return Mongo.db.profile.find_one({
- 'user': self._id
- }, sort=[
- ('_id', pymongo.DESCENDING)
- ])
- super(DBProfile, self).__init__(runner, _retriever)
- class RemoteProfile(Profile):
- def __init__(self, runner):
- def _retriever(self):
- return api.get_profile(self.root.credential.bnet_user_cred)
- super(RemoteProfile, self).__init__(runner, _retriever)
|