generated from mwc/lab_weather
I was just checking that everything was submitted but I guess this wasn't.
This commit is contained in:
75
geocoder/cli.py
Normal file
75
geocoder/cli.py
Normal file
@@ -0,0 +1,75 @@
|
||||
#!/usr/bin/python
|
||||
# coding: utf8
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
import click
|
||||
import json
|
||||
import geocoder
|
||||
import os
|
||||
import fileinput
|
||||
|
||||
from geocoder.api import options
|
||||
|
||||
|
||||
providers = sorted(options.keys())
|
||||
methods = ['geocode', 'reverse', 'elevation', 'timezone', 'places']
|
||||
outputs = ['json', 'osm', 'geojson', 'wkt']
|
||||
units = ['kilometers', 'miles', 'feet', 'meters']
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument('location', nargs=-1)
|
||||
@click.option('--provider', '-p', default='osm', type=click.Choice(providers))
|
||||
@click.option('--method', '-m', default='geocode', type=click.Choice(methods))
|
||||
@click.option('--output', '-o', default='json', type=click.Choice(outputs))
|
||||
@click.option('--units', '-u', default='kilometers', type=click.Choice(units))
|
||||
@click.option('--timeout', '-t', default=5.0)
|
||||
@click.option('--distance', is_flag=True)
|
||||
@click.option('--language', default='')
|
||||
@click.option('--url', default='')
|
||||
@click.option('--proxies')
|
||||
@click.option('--key')
|
||||
# following are for Tamu provider
|
||||
@click.option('--city', '-c', default='')
|
||||
@click.option('--state', '-s', default='')
|
||||
@click.option('--zipcode', '-z', default='')
|
||||
def cli(location, **kwargs):
|
||||
"""Geocode an arbitrary number of strings from Command Line."""
|
||||
|
||||
locations = []
|
||||
|
||||
# Read Standard Input
|
||||
# $ cat foo.txt | geocode
|
||||
try:
|
||||
for line in fileinput.input():
|
||||
locations.append(line.strip())
|
||||
except:
|
||||
pass
|
||||
|
||||
# Read multiple files & user input location
|
||||
for item in location:
|
||||
if os.path.exists(item):
|
||||
with open(item, 'rb') as f:
|
||||
locations += f.read().splitlines()
|
||||
else:
|
||||
locations.append(item)
|
||||
|
||||
# Distance calculation
|
||||
if kwargs['distance']:
|
||||
d = geocoder.distance(locations, **kwargs)
|
||||
click.echo(d)
|
||||
return
|
||||
|
||||
# Geocode results from user input
|
||||
for location in locations:
|
||||
g = geocoder.get(location.strip(), **kwargs)
|
||||
try:
|
||||
click.echo(json.dumps(getattr(g, kwargs['output'])))
|
||||
except IOError:
|
||||
# When invalid command is entered a broken pipe error occurs
|
||||
return
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
cli()
|
||||
Reference in New Issue
Block a user