mirror of
https://github.com/EDCD/EDMarketConnector.git
synced 2025-04-13 07:47:14 +03:00
103 lines
4.1 KiB
Python
103 lines
4.1 KiB
Python
# Export to EDDN
|
|
|
|
import hashlib
|
|
import json
|
|
import numbers
|
|
import requests
|
|
from platform import system
|
|
from sys import platform
|
|
import time
|
|
|
|
from config import applongname, appversion, config
|
|
from companion import ship_map
|
|
import outfitting
|
|
|
|
upload = 'http://eddn-gateway.elite-markets.net:8080/upload/'
|
|
|
|
timeout= 10 # requests timeout
|
|
|
|
bracketmap = { 1: 'Low',
|
|
2: 'Med',
|
|
3: 'High', }
|
|
|
|
def export(data):
|
|
|
|
def send(msg):
|
|
r = requests.post(upload, data=json.dumps(msg), timeout=timeout)
|
|
if __debug__ and r.status_code != requests.codes.ok:
|
|
print 'Status\t%s' % r.status_code
|
|
print 'URL\t%s' % r.url
|
|
print 'Headers\t%s' % r.headers
|
|
print ('Content:\n%s' % r.text).encode('utf-8')
|
|
r.raise_for_status()
|
|
|
|
querytime = config.getint('querytime') or int(time.time())
|
|
|
|
header = {
|
|
'softwareName' : '%s [%s]' % (applongname, platform=='darwin' and "Mac OS" or system()),
|
|
'softwareVersion' : appversion,
|
|
'uploaderID' : config.getint('anonymous') and hashlib.md5(data['commander']['name'].strip().encode('utf-8')).hexdigest() or data['commander']['name'].strip(),
|
|
}
|
|
|
|
# Don't send empty commodities list - schema won't allow it
|
|
if data['lastStarport'].get('commodities'):
|
|
commodities = []
|
|
for commodity in data['lastStarport'].get('commodities', []):
|
|
commodities.append({
|
|
'name' : commodity['name'],
|
|
'buyPrice' : commodity['buyPrice'],
|
|
'supply' : int(commodity['stock']),
|
|
'sellPrice' : commodity['sellPrice'],
|
|
'demand' : int(commodity['demand']),
|
|
})
|
|
if commodity['stockBracket']:
|
|
commodities[-1]['supplyLevel'] = bracketmap[commodity['stockBracket']]
|
|
if commodity['demandBracket']:
|
|
commodities[-1]['demandLevel'] = bracketmap[commodity['demandBracket']]
|
|
send({
|
|
'$schemaRef' : 'http://schemas.elite-markets.net/eddn/commodity/2',
|
|
'header' : header,
|
|
'message' : {
|
|
'systemName' : data['lastSystem']['name'].strip(),
|
|
'stationName' : data['lastStarport']['name'].strip(),
|
|
'timestamp' : time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(querytime)),
|
|
'commodities' : commodities,
|
|
}
|
|
})
|
|
|
|
# EDDN doesn't yet accept an outfitting schema
|
|
# # *Do* send empty modules list - implies station has no outfitting
|
|
# modules = []
|
|
# for v in data['lastStarport'].get('modules', {}).itervalues():
|
|
# try:
|
|
# module = outfitting.lookup(v)
|
|
# if module:
|
|
# modules.append(module)
|
|
# except AssertionError as e:
|
|
# if __debug__: print 'Outfitting: %s' % e # Silently skip unrecognized modules
|
|
# except:
|
|
# if __debug__: raise
|
|
# send({
|
|
# '$schemaRef' : 'http://schemas.elite-markets.net/eddn/outfitting/1',
|
|
# 'header' : header,
|
|
# 'message' : {
|
|
# 'systemName' : data['lastSystem']['name'].strip(),
|
|
# 'stationName' : data['lastStarport']['name'].strip(),
|
|
# 'timestamp' : time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(querytime)),
|
|
# 'modules' : modules,
|
|
# }
|
|
# })
|
|
|
|
# Don't send empty ships list - shipyard data is only guaranteed present if user has visited the shipyard.
|
|
if data['lastStarport'].get('ships'):
|
|
send({
|
|
'$schemaRef' : 'http://schemas.elite-markets.net/eddn/shipyard/1',
|
|
'header' : header,
|
|
'message' : {
|
|
'systemName' : data['lastSystem']['name'].strip(),
|
|
'stationName' : data['lastStarport']['name'].strip(),
|
|
'timestamp' : time.strftime('%Y-%m-%dT%H:%M:%SZ', time.gmtime(querytime)),
|
|
'ships' : [ship_map.get(ship['name'],ship['name']) for ship in (data['lastStarport']['ships'].get('shipyard_list') or {}).values() + data['lastStarport']['ships'].get('unavailable_list')],
|
|
}
|
|
})
|