Skip to content

Commit 66905ad

Browse files
authored
Merge pull request #411 from sjsrey/remote
Return a dataframe with info on available datasets
2 parents 6d14c62 + 133de8a commit 66905ad

File tree

7 files changed

+375
-703
lines changed

7 files changed

+375
-703
lines changed

ci/36.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ channels:
44
dependencies:
55
- python=3.6
66
- beautifulsoup4
7+
- jinja2
78
- pandas>=1.0
89
- scipy>=1.0
910
- xarray

ci/37.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ channels:
44
dependencies:
55
- python=3.7
66
- beautifulsoup4
7+
- jinja2
78
- pandas>=1.0
89
- scipy>=1.0
910
- xarray

ci/38.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ channels:
44
dependencies:
55
- python=3.8
66
- beautifulsoup4
7+
- jinja2
78
- pandas>=1.0
89
- scipy>=1.0
910
- xarray

libpysal/examples/__init__.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
example datasets as well as functions to fetch larger datasets.
33
"""
44

5+
6+
import pandas as pd
57
from .base import example_manager
68
from .remotes import datasets as remote_datasets
79
from .builtin import datasets as builtin_datasets
@@ -20,7 +22,6 @@ def fetch_all():
2022
names = list(datasets.keys())
2123
names.sort()
2224
for name in names:
23-
print(name)
2425
example = datasets[name]
2526
try:
2627
example.download()
@@ -29,8 +30,8 @@ def fetch_all():
2930
example_manager.add_examples(datasets)
3031

3132

32-
def available() -> str:
33-
"""List available datasets."""
33+
def available() -> pd.DataFrame:
34+
"""Return a dataframe with available datasets."""
3435
fetch_all()
3536

3637
return example_manager.available()

libpysal/examples/base.py

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ def get_path(self, file_name, verbose=True) -> Union[str, None]:
148148
if file_name == base_name:
149149
return file_path
150150
if verbose:
151-
print("{} is not a file in this example".format(file_name))
151+
print(f'{file_name} is not a file in this example.')
152152
return None
153153

154154
def downloaded(self) -> bool:
@@ -179,9 +179,7 @@ def explain(self) -> None:
179179
def download(self, path=get_data_home()):
180180
"""Download the files for the example."""
181181

182-
if self.downloaded():
183-
print("Already downloaded")
184-
else:
182+
if not self.downloaded():
185183
request = requests.get(self.download_url)
186184
archive = zipfile.ZipFile(io.BytesIO(request.content))
187185
target = join(path, self.root)
@@ -231,7 +229,7 @@ def explain(self, example_name) -> str:
231229
print("not available")
232230

233231
def available(self):
234-
"""Report available datasets."""
232+
"""Return df of available datasets."""
235233
datasets = self.datasets
236234
names = list(datasets.keys())
237235
names.sort()
@@ -244,7 +242,7 @@ def available(self):
244242
data=rows, columns=["Name", "Description", "Installed"]
245243
)
246244
datasets.style.set_properties(subset=["text"], **{"width": "300px"})
247-
print(datasets.to_string(max_colwidth=60))
245+
return datasets
248246

249247
def load(self, example_name: str) -> Example:
250248
"""Load example dataset, download if not locally available."""
@@ -253,11 +251,10 @@ def load(self, example_name: str) -> Example:
253251
if example.installed:
254252
return example
255253
else:
256-
"Downloading: {}".format(example_name)
257254
example.download()
258255
return example
259256
else:
260-
print("Example not available: {}".format(example_name))
257+
print(f'Example not available: {example_name}')
261258
return None
262259

263260
def download_remotes(self):
@@ -271,7 +268,7 @@ def download_remotes(self):
271268
try:
272269
example.download()
273270
except:
274-
print("Example not downloaded: {}".format(name))
271+
print(f'Example not downloaded: {name}.')
275272

276273
def get_installed_names(self) -> list:
277274
"""Return names of all currently installed datasets."""
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env python3
2+
3+
import os
4+
import unittest
5+
import numpy as np
6+
import pandas
7+
8+
from .. import available
9+
10+
class Testavailable(unittest.TestCase):
11+
12+
def test_available(self):
13+
examples = available()
14+
self.assertEqual(type(examples), pandas.core.frame.DataFrame)
15+
16+
17+
suite = unittest.TestLoader().loadTestsFromTestCase(Testavailable)
18+
19+
if __name__ == "__main__":
20+
runner = unittest.TextTestRunner()
21+
runner.run(suite)

0 commit comments

Comments
 (0)