コード例 #1
0
ファイル: eddn.py プロジェクト: AnthorNet/EDMarketConnector
    def export_commodities(self, data):
        commodities = []
        for commodity in data['lastStarport'].get('commodities') or []:
            if category_map.get(commodity['categoryname'], True):	# Check marketable
                commodities.append(OrderedDict([
                    ('name',          commodity['name']),
                    ('meanPrice',     int(commodity['meanPrice'])),
                    ('buyPrice',      int(commodity['buyPrice'])),
                    ('stock',         int(commodity['stock'])),
                    ('stockBracket',  commodity['stockBracket']),
                    ('sellPrice',     int(commodity['sellPrice'])),
                    ('demand',        int(commodity['demand'])),
                    ('demandBracket', commodity['demandBracket']),
                ]))
                if commodity['statusFlags']:
                    commodities[-1]['statusFlags'] = commodity['statusFlags']

        # Don't send empty commodities list - schema won't allow it
        if commodities:
            self.send(data['commander']['name'], {
                '$schemaRef' : 'http://schemas.elite-markets.net/eddn/commodity/3',
                'message'    : {
                    'systemName'  : data['lastSystem']['name'],
                    'stationName' : data['lastStarport']['name'],
                    'commodities' : commodities,
                }
            })
コード例 #2
0
ファイル: eddn.py プロジェクト: heavykick/EDMarketConnector
    def export_commodities(self, data, is_beta):
        commodities = []
        for commodity in data['lastStarport'].get('commodities') or []:
            if (category_map.get(commodity['categoryname'], True) and	# Check marketable
                not commodity.get('legality')):	# check not prohibited
                commodities.append(OrderedDict([
                    ('name',          commodity['name']),
                    ('meanPrice',     int(commodity['meanPrice'])),
                    ('buyPrice',      int(commodity['buyPrice'])),
                    ('stock',         int(commodity['stock'])),
                    ('stockBracket',  commodity['stockBracket']),
                    ('sellPrice',     int(commodity['sellPrice'])),
                    ('demand',        int(commodity['demand'])),
                    ('demandBracket', commodity['demandBracket']),
                ]))
                if commodity['statusFlags']:
                    commodities[-1]['statusFlags'] = commodity['statusFlags']

        # Don't send empty commodities list - schema won't allow it
        if commodities:
            message = OrderedDict([
                ('timestamp',   time.strftime('%Y-%m-%dT%H:%M:%SZ',
                                              time.gmtime(config.getint('querytime') or int(time.time())))),
                ('systemName',  data['lastSystem']['name']),
                ('stationName', data['lastStarport']['name']),
                ('commodities', commodities),
            ])
            if 'economies' in data['lastStarport']:
                message['economies']  = sorted([x for x in data['lastStarport'].get('economies',  {}).itervalues()])
            if 'prohibited' in data['lastStarport']:
                message['prohibited'] = sorted([x for x in data['lastStarport'].get('prohibited', {}).itervalues()])
            self.send(data['commander']['name'], {
                '$schemaRef' : 'https://eddn.edcd.io/schemas/commodity/3' + (is_beta and '/test' or ''),
                'message'    : message,
            })
コード例 #3
0
    def export_commodities(self, data, is_beta):
        commodities = []
        for commodity in data['lastStarport'].get('commodities') or []:
            if category_map.get(commodity['categoryname'], True):	# Check marketable
                commodities.append(OrderedDict([
                    ('name',          commodity['name']),
                    ('meanPrice',     int(commodity['meanPrice'])),
                    ('buyPrice',      int(commodity['buyPrice'])),
                    ('stock',         int(commodity['stock'])),
                    ('stockBracket',  commodity['stockBracket']),
                    ('sellPrice',     int(commodity['sellPrice'])),
                    ('demand',        int(commodity['demand'])),
                    ('demandBracket', commodity['demandBracket']),
                ]))
                if commodity['statusFlags']:
                    commodities[-1]['statusFlags'] = commodity['statusFlags']

        # Don't send empty commodities list - schema won't allow it
        if commodities:
            self.send(data['commander']['name'], {
                '$schemaRef' : 'https://eddn.edcd.io/schemas/commodity/3' + (is_beta and '/test' or ''),
                'message'    : {
                    'systemName'  : data['lastSystem']['name'],
                    'stationName' : data['lastStarport']['name'],
                    'commodities' : commodities,
                }
            })
コード例 #4
0
    def export_commodities(self, data, is_beta):
        commodities = []
        for commodity in data['lastStarport'].get('commodities') or []:
            if (category_map.get(commodity['categoryname'], True)
                    and  # Check marketable
                    not commodity.get('legality')):  # check not prohibited
                commodities.append(
                    OrderedDict([
                        ('name', commodity['name'].lower()),
                        ('meanPrice', int(commodity['meanPrice'])),
                        ('buyPrice', int(commodity['buyPrice'])),
                        ('stock', int(commodity['stock'])),
                        ('stockBracket', commodity['stockBracket']),
                        ('sellPrice', int(commodity['sellPrice'])),
                        ('demand', int(commodity['demand'])),
                        ('demandBracket', commodity['demandBracket']),
                    ]))
                if commodity['statusFlags']:
                    commodities[-1]['statusFlags'] = commodity['statusFlags']
        commodities.sort(key=lambda c: c['name'])

        if commodities and this.commodities != commodities:  # Don't send empty commodities list - schema won't allow it
            message = OrderedDict([
                ('timestamp', data['timestamp']),
                ('systemName', data['lastSystem']['name']),
                ('stationName', data['lastStarport']['name']),
                ('marketId', data['lastStarport']['id']),
                ('commodities', commodities),
            ])
            if 'economies' in data['lastStarport']:
                message['economies'] = sorted([
                    x for x in (
                        data['lastStarport']['economies'] or {}).itervalues()
                ])
            if 'prohibited' in data['lastStarport']:
                message['prohibited'] = sorted([
                    x for x in (
                        data['lastStarport']['prohibited'] or {}).itervalues()
                ])
            self.send(
                data['commander']['name'], {
                    '$schemaRef':
                    'https://eddn.edcd.io/schemas/commodity/3' +
                    (is_beta and '/test' or ''),
                    'message':
                    message,
                })
        this.commodities = commodities
コード例 #5
0
def addcommodities(data):

    if not data['lastStarport'].get('commodities'): return

    commodityfile = 'commodity.csv'
    commodities = {}

    # slurp existing
    if isfile(commodityfile):
        with open(commodityfile) as csvfile:
            reader = csv.DictReader(csvfile)
            for row in reader:
                key = row.pop('name')
                commodities[key] = row
    size_pre = len(commodities)

    for commodity in data['lastStarport'].get('commodities'):
        key = commodity_map.get(commodity['name']) or commodity['name']
        new = {
            'id'       : commodity['id'],
            'category' : category_map.get(commodity['categoryname']) or commodity['categoryname'],
            'average'  : commodity['cost_mean'].split('.')[0]
        }
        old = commodities.get(key)
        if old:
            if new['id'] != old['id'] or new['category'] != old['category']:
                raise AssertionError('%s: "%s"!="%s"' % (key, new, old))
            elif new['average'] != old['average']:
                commodities[key] = new
        else:
            commodities[key] = new

    if len(commodities) > size_pre:

        if isfile(commodityfile):
            if isfile(commodityfile+'.bak'):
                os.unlink(commodityfile+'.bak')
            os.rename(commodityfile, commodityfile+'.bak')

        with open(commodityfile, 'wb') as csvfile:
            writer = csv.DictWriter(csvfile, ['id','category', 'name', 'average'])
            writer.writeheader()
            for key in commodities:
                commodities[key]['name'] = key
            for row in sorted(commodities.values(), key = lambda x: (x['category'], x['name'])):
                writer.writerow(row)

        print 'Added %d new commodities' % (len(commodities) - size_pre)
コード例 #6
0
ファイル: collate.py プロジェクト: orac/EDMarketConnector
def addcommodities(data):

    if not data['lastStarport'].get('commodities'): return

    commodityfile = 'commodity.csv'
    commodities = {}

    # slurp existing
    if isfile(commodityfile):
        with open(commodityfile) as csvfile:
            reader = csv.DictReader(csvfile)
            for row in reader:
                key = row.pop('name')
                commodities[key] = row
    size_pre = len(commodities)

    for commodity in data['lastStarport'].get('commodities'):
        key = commodity_map.get(commodity['name']) or commodity['name']
        new = {
            'id'       : commodity['id'],
            'category' : category_map.get(commodity['categoryname']) or commodity['categoryname'],
            'average'  : commodity['cost_mean'].split('.')[0]
        }
        old = commodities.get(key)
        if old:
            if new != old:
                raise AssertionError('%s: "%s"!="%s"' % (key, new, old))
        else:
            commodities[key] = new

    if len(commodities) > size_pre:

        if isfile(commodityfile):
            if isfile(commodityfile+'.bak'):
                os.unlink(commodityfile+'.bak')
            os.rename(commodityfile, commodityfile+'.bak')

        with open(commodityfile, 'wb') as csvfile:
            writer = csv.DictWriter(csvfile, ['id','category', 'name', 'average'])
            writer.writeheader()
            for key in commodities:
                commodities[key]['name'] = key
            for row in sorted(commodities.values(), key = lambda x: (x['category'], x['name'])):
                writer.writerow(row)

        print 'Added %d new commodities' % (len(commodities) - size_pre)
コード例 #7
0
ファイル: eddn.py プロジェクト: Marginal/EDMarketConnector
    def export_commodities(self, data, is_beta):
        commodities = []
        for commodity in data['lastStarport'].get('commodities') or []:
            if (category_map.get(commodity['categoryname'], True) and	# Check marketable
                not commodity.get('legality')):	# check not prohibited
                commodities.append(OrderedDict([
                    ('name',          commodity['name'].lower()),
                    ('meanPrice',     int(commodity['meanPrice'])),
                    ('buyPrice',      int(commodity['buyPrice'])),
                    ('stock',         int(commodity['stock'])),
                    ('stockBracket',  commodity['stockBracket']),
                    ('sellPrice',     int(commodity['sellPrice'])),
                    ('demand',        int(commodity['demand'])),
                    ('demandBracket', commodity['demandBracket']),
                ]))
                if commodity['statusFlags']:
                    commodities[-1]['statusFlags'] = commodity['statusFlags']
        commodities.sort(key = lambda c: c['name'])

        if commodities and this.commodities != commodities:	# Don't send empty commodities list - schema won't allow it
            message = OrderedDict([
                ('timestamp',   data['timestamp']),
                ('systemName',  data['lastSystem']['name']),
                ('stationName', data['lastStarport']['name']),
                ('marketId',    data['lastStarport']['id']),
                ('commodities', commodities),
            ])
            if 'economies' in data['lastStarport']:
                message['economies']  = sorted([x for x in (data['lastStarport']['economies']  or {}).itervalues()])
            if 'prohibited' in data['lastStarport']:
                message['prohibited'] = sorted([x for x in (data['lastStarport']['prohibited'] or {}).itervalues()])
            self.send(data['commander']['name'], {
                '$schemaRef' : 'https://eddn.edcd.io/schemas/commodity/3' + (is_beta and '/test' or ''),
                'message'    : message,
            })
        this.commodities = commodities
コード例 #8
0
ファイル: eddn.py プロジェクト: bgol/EDMarketConnector
    def export_commodities(self, data: Mapping[str, Any],
                           is_beta: bool) -> None:
        """
        export_commodities updates EDDN with the commodities on the current (lastStarport) station.
        Once the send is complete, this.commodities is updated with the new data.

        :param data: a dict containing the starport data
        :param is_beta: whether or not we're currently in beta mode
        """
        commodities: List[OrderedDictT[str, Any]] = []
        for commodity in data['lastStarport'].get('commodities') or []:
            # Check 'marketable' and 'not prohibited'
            if (category_map.get(commodity['categoryname'], True)
                    and not commodity.get('legality')):
                commodities.append(
                    OrderedDict([
                        ('name', commodity['name'].lower()),
                        ('meanPrice', int(commodity['meanPrice'])),
                        ('buyPrice', int(commodity['buyPrice'])),
                        ('stock', int(commodity['stock'])),
                        ('stockBracket', commodity['stockBracket']),
                        ('sellPrice', int(commodity['sellPrice'])),
                        ('demand', int(commodity['demand'])),
                        ('demandBracket', commodity['demandBracket']),
                    ]))

                if commodity['statusFlags']:
                    commodities[-1]['statusFlags'] = commodity['statusFlags']

        commodities.sort(key=lambda c: c['name'])

        # This used to have a check `commodities and ` at the start so as to
        # not send an empty commodities list, as the EDDN Schema doesn't allow
        # it (as of 2020-09-28).
        # BUT, Fleet Carriers can go from having buy/sell orders to having
        # none and that really does need to be recorded over EDDN so that, e.g.
        # EDDB can update in a timely manner.
        if this.commodities != commodities:
            message: OrderedDictT[str, Any] = OrderedDict([
                ('timestamp', data['timestamp']),
                ('systemName', data['lastSystem']['name']),
                ('stationName', data['lastStarport']['name']),
                ('marketId', data['lastStarport']['id']),
                ('commodities', commodities),
            ])

            if 'economies' in data['lastStarport']:
                message['economies'] = sorted((x for x in (
                    data['lastStarport']['economies'] or {}).values()),
                                              key=lambda x: x['name'])

            if 'prohibited' in data['lastStarport']:
                message['prohibited'] = sorted(x for x in (
                    data['lastStarport']['prohibited'] or {}).values())

            self.send(
                data['commander']['name'], {
                    '$schemaRef':
                    f'https://eddn.edcd.io/schemas/commodity/3{"/test" if is_beta else ""}',
                    'message': message,
                })

        this.commodities = commodities