Esempio n. 1
0
def listing_loader(refs: list):  # refs are expected to be station ids (!)
    eddb_prime.recache(this_api)
    gen = eddb_prime.read_iter(this_api)
    header = gen.__next__().split(',')
    header = [q.strip() for q in header]
    # recreate list into a weird dict
    listing_dict = dict()
    for ref_dict in refs:
        listing_dict[ref_dict] = list()

    bar = generate_bar(gen.size, 'Parsing listings')
    bar.start()
    for line in gen:
        bar.update(bar.value + line.encode('utf-8').__len__())
        sp = line.split(',')
        sp = [q.strip() for q in sp]
        if int(sp[header.index('station_id')]) in listing_dict.keys():
            ref_dict = dict()

            for h in header:
                ref_dict[h] = sp[header.index(h)]
            listing_dict[int(sp[header.index('station_id')])].append(ref_dict)

    bar.finish()

    bar = generate_bar(listing_dict.keys().__len__(), 'Creating stations')
    bar.start()
    ret_list = list()
    for k in listing_dict:
        bar.update(bar.value + 1)
        listing = StationPriceList(k)
        listing._populate(listing_dict[k])
        ret_list.append(listing)
    bar.finish()
    return ret_list
Esempio n. 2
0
    def populate(self):
        ix1 = self.name[0] if self.name[0] != '*' else 'ast'
        if self.name.__len__() > 1:
            ix2 = self.name[1] if self.name[1] != '*' else 'ast'
        else:
            ix2 = ''
        gen_ob = eddb_prime.read_object(this_api, index=f'{ix1}{ix2}')
        gen = gen_ob.readlines()
        gen_ob.close()
        bar = generate_bar(gen.__len__(), 'Filtering systems')
        bar.value = 0
        bar.start()

        for system in gen:
            bar.update(bar.value + 1)
            system = json.loads(system)

            if self.name is not None and system.get('name') != self.name:
                continue
            if self.id is not None and system.get('id') != self.id:
                continue

            self._populate(system.get('id'), system.get('name'),
                           float(system.get('x')), float(system.get('y')),
                           float(system.get('z')), system.get('allegiance'),
                           int(system.get('needs_permit')),
                           int(system.get('updated_at')))
            bar.finish()
            return True
        bar.finish()
        return False
Esempio n. 3
0
def station_loader(refs: list = [],
                   landing_pad: str = 'None',
                   distance_to_star: int = -1):
    # TODO: parallelize file usage with OFFSET and multiproc reading.
    l.info(f'Loding stations')
    eddb_prime.recache(this_api)
    pad_filter = LandingPad(landing_pad)
    ret_list = []
    reader = eddb_prime.read_iter(this_api)
    bar = generate_bar(reader.size, 'Filtering stations')
    bar.value = 0
    bar.start()
    for station in reader:
        bar.update(bar.value + station.encode('utf-8').__len__())
        station = json.loads(station)

        if refs.__len__() > 0:
            filtered = True
            for st, sy in refs:
                if st == station.get("name", "") and (sy == station.get(
                        "system_id", 0) or sy is None):
                    filtered = False

            if filtered:
                continue

        if pad_filter > LandingPad(station.get('max_landing_pad_size',
                                               'None')):
            continue

        if station.get('distance_to_star',
                       0) is not None and 0 < distance_to_star < station.get(
                           'distance_to_star', 0):
            continue

        # all filters passed, appending station

        ap_station = Station(sid=station.get("id"), name=station.get("name"))
        ap_station._populate(station.get("id"), station.get("name"),
                             station.get('system_id', 0),
                             station.get('updated_at', 0),
                             station.get('max_landing_pad_size', 'None'),
                             station.get('distance_to_star', -1),
                             station.get('allegiance', 'Penis'),
                             station.get('type', 'Shnitzel'))

        ret_list.append(ap_station)

    bar.finish()

    return ret_list
Esempio n. 4
0
 def populate(self):
     gen = eddb_prime.read_iter(this_api)
     header = gen.__next__().split(',')
     header = [q.strip() for q in header]
     # recreate list into a weird dict
     listings = []
     bar = generate_bar(gen.size, 'Parsing listings')
     bar.start()
     for line in gen:
         bar.update(bar.value + line.encode('utf-8').__len__())
         sp = line.split(',')
         sp = [q.strip() for q in sp]
         if int(sp[header.index('station_id')]) == self.station:
             ref_dict = dict()
             for h in header:
                 ref_dict[h] = sp[header.index(h)]
             listings.append(ref_dict)
     bar.finish()
     self._populate(listings)  # just one station
Esempio n. 5
0
def system_loader(ids: list = [], names: list = [], filter_needs_permit=False):

    eddb_prime.recache(this_api)
    gen = eddb_prime.read_iter(this_api)
    header = gen.__next__()
    header = header.split(',')

    ret = list()

    bar = generate_bar(gen.size, 'Filtering systems')
    bar.value = 0
    bar.start()

    for system in gen:
        bar.update(bar.value + system.encode('utf-8').__len__())
        # todo: think about switching this to rares implementation, with zipped(header, line) cycle, creating dict instead of .index() call
        system = system.split(',')
        name = system[header.index('name')].replace('"', '')
        sid = system[header.index('id')]

        if ids.__len__() > 0 and sid not in ids:
            continue

        if names.__len__() > 0 and name not in names:
            continue

        if filter_needs_permit and int(
                system[header.index('needs_permit')]) > 0:
            continue

        sys = System(sid, name)
        sys._populate(system[header.index('id')], system[header.index('name')],
                      float(system[header.index('x')]),
                      float(system[header.index('y')]),
                      float(system[header.index('z')]),
                      system[header.index('allegiance')],
                      int(system[header.index('needs_permit')]),
                      int(system[header.index('updated_at')]))
        ret.append(sys)
    bar.finish()
    return ret
Esempio n. 6
0
    def populate(self, system_id=None):
        reader_ob = eddb_prime.read_object(
            this_api, index=self.name[0] if self.name[0] != '?' else '__q')
        reader = reader_ob.readlines()
        reader_ob.close()
        bar = generate_bar(reader.__len__(), 'Filtering stations')
        bar.value = 0
        bar.start()
        for station in reader:
            bar.update(bar.value + 1)
            try:
                station = json.loads(station)
            except json.JSONDecodeError:
                print(station)

            if self.name is not None and self.name != station.get('name'):
                continue
            if self.sid is not None and self.sid != station.get('id'):
                continue
            if system_id is not None and system_id != station.get('system_id'):
                continue

            # all filters passed, appending station

            self._populate(station.get('id'), station.get('name'),
                           station.get('system_id', 0),
                           station.get('updated_at', 0),
                           station.get('max_landing_pad_size', 'None'),
                           station.get('distance_to_star', -1),
                           station.get('allegiance', 'Penis'),
                           station.get('type', 'Shnitzel'))
            bar.finish()
            return True

        bar.finish()
        return False