Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aggregate1 #66

Open
wants to merge 6 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"python.pythonPath": "/usr/bin/python3",
"python.testing.pytestArgs": [
"COVID19Py"
],
"python.testing.unittestEnabled": false,
"python.testing.nosetestsEnabled": false,
"python.testing.pytestEnabled": true
}
88 changes: 71 additions & 17 deletions COVID19Py/covid19.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,77 @@
import requests
import json



class CovidLoc:
url = ""
data_source = ""



def sources(self, url, data):
self.url = url
self.data_source = data

def _request(self, endpoint, params=None):
if params is None:
params = {}
response = requests.get(self.url + endpoint, {**params, "source":self.data_source})
response.raise_for_status()
return response

def getLocationByIdTwoo(self, country_id: int):
"""
:param country_id: Country Id, an int
:return: A dictionary with case information for the specified location.
"""
data = self._request("/v2/locations/" + str(country_id))
return data

def getLocationByCountryTwo(self, country, timelines=False) -> List[Dict]:
"""
:param country: String denoting name of the country
:param timelines: Whether timeline information should be returned as well.
:return: A list of areas that correspond to the country name. If the country is invalid, it returns an empty list.
"""
data = None
if timelines:
data = self._request("/v2/locations", {"country": country, "timelines": str(timelines).lower()})
else:
data = self._request("/v2/locations", {"country": country})
return data

def getLocationByCountryCodeTwo(self, country_code, timelines=False) -> List[Dict]:
"""
:param country_code: String denoting the ISO 3166-1 alpha-2 code (https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) of the country
:param timelines: Whether timeline information should be returned as well.
:return: A list of areas that correspond to the country_code. If the country_code is invalid, it returns an empty list.
"""
data = None
if timelines:
data = self._request("/v2/locations", {"country_code": country_code, "timelines": str(timelines).lower()})
else:
data = self._request("/v2/locations", {"country_code": country_code})
return data


covidloc = CovidLoc()

class COVID19(object):
default_url = "https://covid-tracker-us.herokuapp.com"
url = ""
data_source = ""
previousData = None
latestData = None
_valid_data_sources = []

covidLoc = "hello"
mirrors_source = "https://raw.github.com/Kamaropoulos/COVID19Py/master/mirrors.json"
mirrors = None

def __init__(self, url="https://covid-tracker-us.herokuapp.com", data_source='jhu'):
def __init__(self, url="https://covid-tracker-us.herokuapp.com", data_source='jhu', covidLocation = covidloc):
# Skip mirror checking if custom url was passed
self.covidLoc = covidLocation

if url == self.default_url:
# Load mirrors
response = requests.get(self.mirrors_source)
Expand Down Expand Up @@ -49,6 +107,9 @@ def __init__(self, url="https://covid-tracker-us.herokuapp.com", data_source='jh
raise ValueError("Invalid data source. Expected one of: %s" % self._valid_data_sources)
self.data_source = data_source

self.covidLoc.sources(self.url,self.data_source)


def _update(self, timelines):
latest = self.getLatest()
locations = self.getLocations(timelines)
Expand Down Expand Up @@ -129,30 +190,23 @@ def getLocationByCountryCode(self, country_code, timelines=False) -> List[Dict]:
:param timelines: Whether timeline information should be returned as well.
:return: A list of areas that correspond to the country_code. If the country_code is invalid, it returns an empty list.
"""
data = None
if timelines:
data = self._request("/v2/locations", {"country_code": country_code, "timelines": str(timelines).lower()})
else:
data = self._request("/v2/locations", {"country_code": country_code})
return data["locations"]

return self.covidLoc.getLocationByCountryCodeTwo(country_code).json()["locations"]

def getLocationByCountry(self, country, timelines=False) -> List[Dict]:
"""
:param country: String denoting name of the country
:param timelines: Whether timeline information should be returned as well.
:return: A list of areas that correspond to the country name. If the country is invalid, it returns an empty list.
"""
data = None
if timelines:
data = self._request("/v2/locations", {"country": country, "timelines": str(timelines).lower()})
else:
data = self._request("/v2/locations", {"country": country})
return data["locations"]


return self.covidLoc.getLocationByCountryTwo(country).json()["locations"]


def getLocationById(self, country_id: int):
"""
:param country_id: Country Id, an int
:return: A dictionary with case information for the specified location.
"""
data = self._request("/v2/locations/" + str(country_id))
return data["location"]

return self.covidLoc.getLocationByIdTwoo(39).json()["location"]
29 changes: 25 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# COVID19Py

<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->

[![Downloads](https://pepy.tech/badge/covid19py)](https://pepy.tech/project/covid19py)
[![Downloads](https://pepy.tech/badge/covid19py/month)](https://pepy.tech/project/covid19py/month)
[![Downloads](https://pepy.tech/badge/covid19py/week)](https://pepy.tech/project/covid19py/week)
Expand All @@ -8,8 +10,11 @@
[![CodeFactor](https://www.codefactor.io/repository/github/kamaropoulos/covid19py/badge)](https://www.codefactor.io/repository/github/kamaropoulos/covid19py)
[![HitCount](http://hits.dwyl.com/Kamaropoulos/COVID19Py.svg)](http://hits.dwyl.com/Kamaropoulos/COVID19Py)
[![GitHub stars](https://img.shields.io/github/stars/Kamaropoulos/COVID19Py.svg?style=social&label=Star)](https://github.com/Kamaropoulos/COVID19Py)

<!-- ALL-CONTRIBUTORS-BADGE:END -->

A tiny Python package for easy access to up-to-date Coronavirus (COVID-19, SARS-CoV-2) cases data.

<!-- Python API Wrapper for tracking Coronavirus (COVID-19, SARS-CoV-2) via https://github.com/ExpDev07/coronavirus-tracker-api -->

## About
Expand All @@ -18,10 +23,12 @@ COVID19Py is a Python wrapper made to be compatible with [ExpDev07/coronavirus-t
It retrieves data directly from an instance of [@ExpDev07](https://covid-tracker-us.herokuapp.com/)'s backend but it can also be set up to use a different backend.

To achieve this, just pass the URL of the backend as a parameter to the library's constructor:

```python
import COVID19Py
covid19 = COVID19Py.COVID19("https://my-awesome-covid19-backend")
```

## Installation

In order install this package, simply run:
Expand All @@ -43,9 +50,11 @@ covid19 = COVID19Py.COVID19()

COVID19Py supports the retrieval of data from multiple data sources.
To choose a specific data source, simply pass it as a parameter to the library's constructor:

```python
covid19 = COVID19Py.COVID19(data_source="csbs")
```

For more details about the available data sources, please check the [API's documentation](https://github.com/ExpDev07/coronavirus-tracker-api/blob/master/README.md#picking-data-source).

### Getting latest amount of total confirmed cases, deaths, and recoveries:
Expand All @@ -65,6 +74,7 @@ or:
```python
locations = covid19.getLocations(timelines=True)
```

to also get timelines.

You can also rank the results by `confirmed`, `deaths` or `recovered`.
Expand All @@ -78,10 +88,13 @@ locations = covid19.getLocations(rank_by='recovered')
```python
location = covid19.getLocationByCountryCode("US")
```

or:

```python
location = covid19.getLocationByCountryCode("US", timelines=True)
```

to also get timelines.

### Getting a specific location (includes timelines by default):
Expand All @@ -102,18 +115,20 @@ or:
location = covid19.getLocationByCountry("Zimbabwe", timelines=True)
```


### Getting all data at once:

You can also get all the available data with one command.

```python
data = covid19.getAll()
```

or:

```python
data = covid19.getAll(timelines=True)
```

to also get timelines.

`latest` will be available on `data["latest"]` and `locations` will be available on `data["locations"]`.
Expand All @@ -125,18 +140,21 @@ When using `getAll()`, COVID19Py will also store the previous version of the ret
```python
changes = covid19.getLatestChanges()
```

```json
{
"confirmed": 512,
"deaths": 16,
"recovered": 1024
"confirmed": 512,
"deaths": 16,
"recovered": 1024
}
```

## Contributing

You will need to fork this repository onto your own GitHub account, then clone the repo to your local machine.

In the project directory, you will need to make sure the required packages are installed. To install requirements from the Pipfile, run a command like the following, which may depend on how you have package management set up:

```bash
pipenv install
```
Expand All @@ -157,6 +175,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d

<!-- markdownlint-enable -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

# just testing!