Add ability to import modules from ESI directly into pyfa

This commit is contained in:
DarkPhoenix
2020-09-23 17:24:40 +03:00
parent 0a7f5b6092
commit 9601887855
4 changed files with 48 additions and 6 deletions

View File

@@ -46,6 +46,7 @@ class EsiEndpoints(Enum):
CHAR_SKILLS = "/v4/characters/{character_id}/skills/" CHAR_SKILLS = "/v4/characters/{character_id}/skills/"
CHAR_FITTINGS = "/v1/characters/{character_id}/fittings/" CHAR_FITTINGS = "/v1/characters/{character_id}/fittings/"
CHAR_DEL_FIT = "/v1/characters/{character_id}/fittings/{fitting_id}/" CHAR_DEL_FIT = "/v1/characters/{character_id}/fittings/{fitting_id}/"
DYNAMIC_ITEM = "/v1/dogma/dynamic/items/{type_id}/{item_id}/"
@unique @unique

View File

@@ -67,12 +67,13 @@ class EsiAccess:
# session request stuff # session request stuff
self._session = Session() self._session = Session()
self._session.headers.update({ self._basicHeaders = {
'Accept': 'application/json', 'Accept': 'application/json',
'User-Agent': ( 'User-Agent': (
'pyfa v{}'.format(config.version) 'pyfa v{}'.format(config.version)
) )
}) }
self._session.headers.update(self._basicHeaders)
self._session.proxies = NetworkSettings.getInstance().getProxySettingsInRequestsFormat() self._session.proxies = NetworkSettings.getInstance().getProxySettingsInRequestsFormat()
@property @property
@@ -97,6 +98,9 @@ class EsiAccess:
def oauth_token(self): def oauth_token(self):
return '%s/oauth/token' % self.sso_url return '%s/oauth/token' % self.sso_url
def getDynamicItem(self, typeID, itemID):
return self.get(None, EsiEndpoints.DYNAMIC_ITEM.value, type_id=typeID, item_id=itemID)
def getSkills(self, char): def getSkills(self, char):
return self.get(char, EsiEndpoints.CHAR_SKILLS.value, character_id=char.characterID) return self.get(char, EsiEndpoints.CHAR_SKILLS.value, character_id=char.characterID)
@@ -236,6 +240,11 @@ class EsiAccess:
return json_res return json_res
def _before_request(self, ssoChar): def _before_request(self, ssoChar):
self._session.headers.clear()
self._session.headers.update(self._basicHeaders)
if ssoChar is None:
return
if ssoChar.is_token_expired(): if ssoChar.is_token_expired():
pyfalog.info("Refreshing token for {}".format(ssoChar.characterName)) pyfalog.info("Refreshing token for {}".format(ssoChar.characterName))
self.refresh(ssoChar) self.refresh(ssoChar)
@@ -256,17 +265,17 @@ class EsiAccess:
return resp return resp
def get(self, ssoChar, endpoint, *args, **kwargs): def get(self, ssoChar, endpoint, **kwargs):
self._before_request(ssoChar) self._before_request(ssoChar)
endpoint = endpoint.format(**kwargs) endpoint = endpoint.format(**kwargs)
return self._after_request(self._session.get("{}{}".format(self.esi_url, endpoint))) return self._after_request(self._session.get("{}{}".format(self.esi_url, endpoint)))
def post(self, ssoChar, endpoint, json, *args, **kwargs): def post(self, ssoChar, endpoint, json, **kwargs):
self._before_request(ssoChar) self._before_request(ssoChar)
endpoint = endpoint.format(**kwargs) endpoint = endpoint.format(**kwargs)
return self._after_request(self._session.post("{}{}".format(self.esi_url, endpoint), data=json)) return self._after_request(self._session.post("{}{}".format(self.esi_url, endpoint), data=json))
def delete(self, ssoChar, endpoint, *args, **kwargs): def delete(self, ssoChar, endpoint, **kwargs):
self._before_request(ssoChar) self._before_request(ssoChar)
endpoint = endpoint.format(**kwargs) endpoint = endpoint.format(**kwargs)
return self._after_request(self._session.delete("{}{}".format(self.esi_url, endpoint))) return self._after_request(self._session.delete("{}{}".format(self.esi_url, endpoint)))

View File

@@ -18,9 +18,12 @@
# ============================================================================= # =============================================================================
import re
from eos.db.gamedata.queries import getAttributeInfo, getDynamicItem from eos.db.gamedata.queries import getAttributeInfo, getDynamicItem
from eos.utils.float import floatUnerr from eos.utils.float import floatUnerr
from service.port.shared import fetchItem from service.port.shared import fetchItem
from service.esiAccess import EsiAccess
def renderMutant(mutant, firstPrefix='', prefix=''): def renderMutant(mutant, firstPrefix='', prefix=''):
@@ -77,3 +80,23 @@ def parseMutant(lines):
continue continue
mutations[attrInfo.ID] = value mutations[attrInfo.ID] = value
return baseItem, mutaplasmidItem, mutations return baseItem, mutaplasmidItem, mutations
def parseDynamicItemString(text):
m = re.search(r'<url=showinfo:(?P<typeid>\d+)//(?P<itemid>\d+)>.+</url>', text)
if m:
typeID = int(m.group('typeid'))
itemID = int(m.group('itemid'))
return typeID, itemID
return None
def fetchDynamicItem(dynamicItemData):
typeID, itemID = dynamicItemData
esiData = EsiAccess().getDynamicItem(typeID, itemID).json()
baseItemID = esiData['source_type_id']
mutaplasmidID = esiData['mutator_type_id']
attrs = {i['attribute_id']: i['value'] for i in esiData['dogma_attributes']}
baseItem = fetchItem(baseItemID)
mutaplasmid = getDynamicItem(mutaplasmidID)
return baseItem, mutaplasmid, attrs

View File

@@ -41,7 +41,7 @@ from service.port.multibuy import exportMultiBuy
from service.port.shared import IPortUser, UserCancelException, processing_notify from service.port.shared import IPortUser, UserCancelException, processing_notify
from service.port.shipstats import exportFitStats from service.port.shipstats import exportFitStats
from service.port.xml import importXml, exportXml from service.port.xml import importXml, exportXml
from service.port.muta import parseMutant from service.port.muta import parseMutant, parseDynamicItemString, fetchDynamicItem
pyfalog = Logger(__name__) pyfalog = Logger(__name__)
@@ -255,6 +255,15 @@ class Port:
return "DNA", True, (cls.importDnaAlt(m.group("dna")),) return "DNA", True, (cls.importDnaAlt(m.group("dna")),)
if activeFit is not None: if activeFit is not None:
# Try to import mutated item from network
dynData = parseDynamicItemString(string)
if dynData is not None:
itemData = fetchDynamicItem(dynData)
if itemData is not None:
baseItem, mutaplasmidItem, mutations = itemData
return "FittingItem", False, ((baseItem, mutaplasmidItem, mutations),)
# Try to import mutated module # Try to import mutated module
try: try:
baseItem, mutaplasmidItem, mutations = parseMutant(lines) baseItem, mutaplasmidItem, mutations = parseMutant(lines)