Add ability to import modules from ESI directly into pyfa
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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)))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user