Skip to main content

Lightweight GeoBases implementation: no dependency, single, Py3 compatible

Project description

Minimalist GeoBases implementation:

  • no dependencies

  • compatible with Python 2.6+, Python 3.x, Pypy

  • one data source: opentraveldata

  • one Python module for easier distribution on clusters (like Hadoop)

  • faster load time (5x)

  • tested with pytest and tox

>>> from neobase import NeoBase
>>> b = NeoBase()
>>> b.get('ORY', 'city_code_list')
['PAR']
>>> b.get('ORY', 'city_name_list')
['Paris']
>>> b.get('ORY', 'country_code')
'FR'
>>> b.distance('ORY', 'CDG')
34.87...
>>> b.get_location('ORY')
LatLng(lat=48.72..., lng=2.35...)

Installation

You can install directly after cloning:

pip install --user .

Or use the Python package:

pip install --user neobase

Doc

Check out readthedocs for the API.

You can customize fields loaded by subclassing.

class SubNeoBase(NeoBase):
    KEY = 0  # iata_code

    # Those loaded fields are the default ones
    FIELDS = (
        ("name", 6, None),
        ("lat", 8, None),
        ("lng", 9, None),
        ("page_rank", 12, lambda s: float(s) if s else None),
        ("country_code", 16, None),
        ("country_name", 18, None),
        ('continent_name', 19, None),
        ("timezone", 31, None),
        ("city_code_list", 36, lambda s: s.split(",")),
        ('city_name_list', 37, lambda s: s.split('=')),
        ('location_type', 41, None),
        ("currency", 46, None),
    )

    # Drop duplicates, keep only the first POR with a specific key
    # Default value is True
    DUPLICATES = False

N = SubNeoBase()

You can also customize the source data when initializing:

with open("file.csv") as f:
    N = NeoBase(f)

Otherwise the loaded file will be the embedded one, unless the OPTD_POR_FILE environment variable is set. In that case, it will load from the path defined in that variable.

You can manually retrieve the latest data source yourself too, but you expose yourself to some breaking changes if they occur in the data.

URL = ('https://raw.githubusercontent.com/opentraveldata/opentraveldata/'
       'master/opentraveldata/optd_por_public.csv')

import urllib3
http = urllib3.PoolManager()
from io import StringIO
from neobase import NeoBase

text = http.request("GET", URL).data.decode("utf8")
N = NeoBase(StringIO(text))
N.get("PAR")

Command-line interface

You can query the data using:

python -m neobase PAR NCE

Tests

tox

Project details


Release history Release notifications | RSS feed

This version

0.21

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

NeoBase-0.21.tar.gz (3.3 MB view details)

Uploaded Source

File details

Details for the file NeoBase-0.21.tar.gz.

File metadata

  • Download URL: NeoBase-0.21.tar.gz
  • Upload date:
  • Size: 3.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: Python-urllib/3.8

File hashes

Hashes for NeoBase-0.21.tar.gz
Algorithm Hash digest
SHA256 9acef34329812cdb0600fd6884cf1cc19f400be9271d10f977b01bb3d20a7a26
MD5 461e10ded698b52ea67bf69881c3ead5
BLAKE2b-256 9fde816c0fe466cdf79537bb621869061ca31609d972e741cc5d3f0f0f1d6087

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page