Skip to content

Commit 2860ba2

Browse files
committed
Create module georequest
1 parent c44e668 commit 2860ba2

File tree

5 files changed

+113
-0
lines changed

5 files changed

+113
-0
lines changed

pyproject.toml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
[build-system]
2+
requires = ["setuptools>=61.0"]
3+
build-backend = "setuptools.build_meta"
4+
5+
[project]
6+
name = "georef-ar-py"
7+
version = "0.0.1"
8+
authors = [
9+
{ name="Pablo E. Andino", email="[email protected]" },
10+
]
11+
description = "Paquete para consultas y procesamiento de respuestas sobre la API de georef-ar"
12+
readme = "README.md"
13+
requires-python = ">=3.7"
14+
classifiers = [
15+
"Programming Language :: Python :: 3",
16+
"License :: OSI Approved :: MIT License",
17+
"Operating System :: OS Independent",
18+
]
19+
20+
[project.urls]
21+
"Homepage" = "https://github.com/pavloae/georef-ar-py"
22+
"Bug Tracker" = "https://github.com/pavloae/georef-ar-py/issues"

src/georef_ar_py/__init__.py

Whitespace-only changes.

src/georef_ar_py/georequests.py

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import urllib
2+
3+
import requests as requests
4+
5+
API_BASE_URL = "https://apis.datos.gob.ar/georef/api/"
6+
7+
8+
def get_similar(endpoint, nombre, **kwargs):
9+
kwargs["nombre"] = nombre
10+
url = "{}{}?{}".format(API_BASE_URL, endpoint, urllib.parse.urlencode(kwargs))
11+
return requests.get(url).json()[endpoint]
12+
13+
14+
def get_similar_bulk(endpoint, nombres):
15+
"""Normaliza una lista de nombres de alguna de las entidades geográficas."""
16+
17+
# realiza consulta a la API
18+
data = {
19+
endpoint: [
20+
{"nombre": nombre, "max": 1} for nombre in nombres
21+
]}
22+
url = API_BASE_URL + endpoint
23+
results = requests.post(
24+
url, json=data, headers={"Content-Type": "application/json"}
25+
).json()
26+
27+
# convierte a una lista de "resultado más probable" o "vacío" cuando no hay
28+
parsed_results = [
29+
single_result[endpoint][0] if single_result[endpoint] else {}
30+
for single_result in results["resultados"]
31+
]
32+
33+
return parsed_results
34+
35+
36+
def get_territorial_units(ubicaciones):
37+
"""Pide las unidades territoriales que contienen a c/punto de una lista de coordenadas."""
38+
39+
# realiza consulta a la API
40+
endpoint = "ubicacion"
41+
data = {
42+
"ubicaciones": [
43+
{"lat": ubicacion["lat"], "lon": ubicacion["lon"], "aplanar": True}
44+
for ubicacion in ubicaciones
45+
]}
46+
url = API_BASE_URL + endpoint
47+
48+
results = requests.post(
49+
url, json=data, headers={"Content-Type": "application/json"}
50+
).json()
51+
52+
# convierte a una lista de "resultado más probable" o "vacío" cuando no hay
53+
parsed_results = [
54+
single_result[endpoint] if single_result[endpoint] else {}
55+
for single_result in results["resultados"]
56+
]
57+
58+
return parsed_results

tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+

tests/test_georequests.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import unittest
2+
3+
from src.georef_ar_py import georequests
4+
5+
6+
class MyTestCase(unittest.TestCase):
7+
def test_get_similar(self):
8+
response = georequests.get_similar('provincias', 'San Juan')
9+
self.assertEqual(response[0]['id'], '70')
10+
self.assertEqual(response[0]['nombre'], 'San Juan')
11+
12+
def test_similar_bulk(self):
13+
response = georequests.get_similar_bulk("provincias", ["pxa", "sant fe"])
14+
self.assertEqual(len(response), 2)
15+
self.assertEqual(len(response[0]), 0)
16+
self.assertEqual(response[1]['id'], '82')
17+
self.assertEqual(response[1]['nombre'], 'Santa Fe')
18+
19+
def test_get_territorial_units(self):
20+
location1, location2 = georequests.get_territorial_units([
21+
{"lat": -32.9477132, "lon": -60.6304658},
22+
{"lat": -34.6037389, "lon": -58.3815704}
23+
])
24+
self.assertEqual('Santa Fe', location1['provincia_nombre'])
25+
self.assertEqual('Rosario', location1['departamento_nombre'])
26+
27+
self.assertEqual(location2['provincia_nombre'], 'Ciudad Autónoma de Buenos Aires')
28+
self.assertEqual(location2['departamento_nombre'], 'Comuna 1')
29+
30+
31+
if __name__ == '__main__':
32+
unittest.main()

0 commit comments

Comments
 (0)