Skip to main content

A python wrapper for the OpenCellID DB

Project description

----------------
OpenCellID Utils
----------------

.. image:: https://travis-ci.org/ashmastaflash/opencellid-wrapper.svg?branch=master
:target: https://travis-ci.org/ashmastaflash/opencellid-wrapper

.. image:: https://codeclimate.com/github/ashmastaflash/opencellid-wrapper/badges/gpa.svg
:target: https://codeclimate.com/github/ashmastaflash/opencellid-wrapper
:alt: Code Climate

.. image:: https://codeclimate.com/github/ashmastaflash/opencellid-wrapper/badges/coverage.svg
:target: https://codeclimate.com/github/ashmastaflash/opencellid-wrapper/coverage
:alt: Test Coverage

.. image:: https://codeclimate.com/github/ashmastaflash/opencellid-wrapper/badges/issue_count.svg
:target: https://codeclimate.com/github/ashmastaflash/opencellid-wrapper
:alt: Issue Count


This project is not associated with the OpenCellID project. This is a utility
package for downloading and parsing the OpenCellID database.

OpenCelliD Project is licensed under a Creative Commons Attribution-ShareAlike
4.0 International License.


Usage (with API key from Unwired Labs)
--------------------------------------

::

import opencellid
ocid_obj = opencellid.OpenCellIdFeed("/dir/for/feed/file/", "api_key")
# Update OpenCellID feed from web:
ocid_obj.update_feed()
# Print all rows in OpenCellID feed:
for row in ocid_obj:
print row


Usage (no API key, update from Mozilla Location Services)
---------------------------------------------------------

::

import opencellid
ocid_obj = opencellid.OpenCellIdFeed("/dir/for/feed/file/")
# Update OpenCellID feed from web:
ocid_obj.update_feed()
# Print all rows in OpenCellID feed:
for row in ocid_obj:
print row


Error Handling
--------------

The tool will attempt to detect if the download is a gzipped CSV file before
boving the download to replace the original gzipped CSV. If an IOError is
encountered, a meaningful message will be displayed, and the exception will
be re-raised. For example, if you're being rate-limited, you'll see...

::

>>> ocid_obj.update_feed()
Updating OpenCellID feed from Unwired Labs.
Feed did not update... you're being rate-limited!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "opencellid/opencellid_feed.py", line 60, in update_feed
consumer.next()
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 107, in next
self.fieldnames
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 90, in fieldnames
self._fieldnames = self.reader.next()
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gzip.py", line 464, in readline
c = self.read(readsize)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gzip.py", line 268, in read
self._read(readsize)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gzip.py", line 303, in _read
self._read_gzip_header()
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gzip.py", line 197, in _read_gzip_header
raise IOError, 'Not a gzipped file'
IOError: Not a gzipped file


And if your API key is not accepted, you'll see...

::

>>> ocid_obj.update_feed()
Updating OpenCellID feed from Unwired Labs.
API token rejected by Unwired Labs!!
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "opencellid/opencellid_feed.py", line 60, in update_feed
consumer.next()
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 107, in next
self.fieldnames
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 90, in fieldnames
self._fieldnames = self.reader.next()
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gzip.py", line 464, in readline
c = self.read(readsize)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gzip.py", line 268, in read
self._read(readsize)
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gzip.py", line 303, in _read
self._read_gzip_header()
File "/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/lib/python2.7/gzip.py", line 197, in _read_gzip_header
raise IOError, 'Not a gzipped file'
IOError: Not a gzipped file


When this happens, the original feed is not updated, so you can catch and
re-initialize the ``ocid_obj`` to pull from MLS until you can sort out the
rate limiting or API key issue.


Installation
------------

pip install opencellid

Testing
-------

py.test

The test fixture file cell_towers.csv.gz contains information from the
OpenCellID database, which is licensed CC-BY-SA 4.0

Changelog
=========


v1.3.3
------

New
~~~
- Add support for Python 3.6, 3.7. [Ash]

Closes #11


v1.3 (2018-10-16)
-----------------

Changes
~~~~~~~
- Updated CodeClimate settings. [Ash Wilson]

Closes #3
- Updated download URL for OpenCellID feed. [Ash Wilson]

Updated tests to avoid Travis-CI silence timeout.

Closes #2


v1.2 (2017-06-13)
-----------------

Changes
~~~~~~~
- Improved error handling for bad API token and rate limiting
situations. [Ash Wilson]


v1.0 (2017-06-13)
-----------------

Changes
~~~~~~~
- Support update from UnwiredLabs or Mozilla Location Services. API
changed, now use update_feed() method and source will be chosen
depending on the presence of an API key. [Ash Wilson]


v0.1.1 (2017-01-23)
-------------------

New
~~~
- Unit and integration tests. [Ash Wilson]
- Creates an OpenCellIdFeed object which can be updated from web and
iterated over. [Ash Wilson]

Project details


Download files

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

Source Distribution

opencellid-1.3.4.tar.gz (8.7 kB view hashes)

Uploaded Source

Supported by

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