Skip to content

Commit

Permalink
Add JSON client for feed and tags
Browse files Browse the repository at this point in the history
  • Loading branch information
gounux committed Apr 26, 2024
1 parent 7250505 commit fa0c803
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
Empty file added geotribu_cli/json/__init__.py
Empty file.
58 changes: 58 additions & 0 deletions geotribu_cli/json/json_client.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
from typing import Any

import requests
from requests import Response

from geotribu_cli.__about__ import __executable_name__, __version__

JSON_FEED_URL = "https://geotribu.fr/feed_json_created.json"
JSON_TAGS_URL = "https://geotribu.fr/tags.json"

HEADERS: dict = {
b"Accept": b"application/json",
b"User-Agent": bytes(f"{__executable_name__}/{__version__}", "utf8"),
}


class JsonFeedClient:
def __init__(self, url: str = JSON_FEED_URL, tags_url: str = JSON_TAGS_URL):
"""
Class initialization
Args:
url: JSON feed URL, defaults to https://geotribu.fr/feed_json_created.json
tags_url: JSON tags URL, defaults to https://geotribu.fr/tags.json
"""
self.url = url
self.tags_url = tags_url

@property
def items(self) -> list[dict[str, Any]]:
"""
Fetch Geotribu JSON feed items
Returns:
List of dicts representing raw JSON feed items
"""
r: Response = requests.get(self.url, headers=HEADERS)
r.raise_for_status()
return r.json()["items"]

@property
def tags(self, should_sort: bool = False) -> list[str]:
"""
Fetch Geotribu used tags
Args:
should_sort: if the list of returned tags should be alphabetically sorted
Returns:
List of tags used by Geotribu
"""
r: Response = requests.get(self.tags_url, headers=HEADERS)
r.raise_for_status()
tags = set()
for item in r.json()["mappings"]:
for tag in item["tags"]:
tags.add(tag)
return sorted(tags) if should_sort else list(tags)

0 comments on commit fa0c803

Please sign in to comment.