Giter Club home page Giter Club logo

covid-api's Introduction

covid-api

COVID19 Api based on Johns Hopkins CSSE data (more data sources are coming).

CircleCI

The intent of this project is to create an API which will make easier to access the COVID19 reports provided by the Johns Hopkins CSSE and other data sources available. Using this API researchers can concentrate their efforts on data analysis while we take care of retriving the data, cleaning it and keeping the database always updated.

Data Sources

Status

We have essentially reached an MVP status (see #20 for more information) and live data is available at https://api.covid19data.cloud

Now we are working on improving features (like adding more query filters for existing endpoints) and better cleaning the available data.

The next step will be to add more data sources.

Usage Example (Python)

In [1]: import requests

In [2]: response = requests.get('https://api.covid19data.cloud/v1/jh/daily-reports?last_update_from=2020-04-01&last_update_to=2020-04-03&country=Italy')

In [3]: response.json()
Out[3]:
[{'id': 35343,
  'country_region': 'Italy',
  'province_state': None,
  'fips': None,
  'admin2': None,
  'last_update': '2020-04-01T21:58:34',
  'confirmed': 110574,
  'deaths': 13155,
  'recovered': 16847},
 {'id': 37895,
  'country_region': 'Italy',
  'province_state': None,
  'fips': None,
  'admin2': None,
  'last_update': '2020-04-02T23:25:14',
  'confirmed': 115242,
  'deaths': 13915,
  'recovered': 18278}]

Further API documentation is available at https://api.covid19data.cloud/docs

Development Setup

Postgres database

You will need a postgres database to run the application. If you have docker installed, then you can create a database by running

docker-compose up db

This creates an empty database called covidapi, and a user called covidapi with password dummypassword.

Running the app through docker

If you run docker-compose up instead of docker-compose up db, the whole app will be run inside docker as well.

The first time you do this you will need to run docker-compose exec app python /covidapi/covidapi/import_data.py to import the data.

Running the app directly

To run the app directly you will need python 3.7 or later.

Create a virtualenv, activate it, and then install the dependencies:

python -m venv env
source ./env/bin/activate
pip install -r requirements.txt

To import the data, run

python import_data.py jh --all

Then you can run the app with:

uvicorn covidapi.app:app --reload

Viewing the API

The API will be served at http://localhost:8000/

The API docs are served at http://localhost:8000/docs

Deployment

The lastest master branch is automatically deployed to Heroku whenever a pull request is merged (and tests are passing on CircleCI).

See deploying to heroku.

Sponsors and Thanks

  • Heroku: for sponsoring the costs of running the service

Disclaimer

We are doing our best to keep the available data updated, clean (removing duplicates), and to provide a reliable service, but we are not in any way responsible for the accuracy of the data nor for the availability of the service itself. Please use it at your own risk.

Abuse notice: we are currently not requiring any registration or authentication to use this service because we would like to keep it as simple as possible. Please do not abuse the service or you will force us to require a registration (subject to approval) to continue using it.

covid-api's People

Contributors

andreagrandi avatar matmoore avatar perryrivera avatar sankur-codes avatar shiv-io avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

covid-api's Issues

Directory structure

Hi, I thought I'd create a ticket to discuss the proposed structure as you mentioned you are still finalising it.

Currently we have this

covidapi/
├── api
│   ├── __init__.py
│   └── main.py
└── db
    ├── __init__.py
    ├── crud.py
    ├── database.py
    ├── models.py
    └── schemas.py

This is based on the FastAPI recommendation of

└── sql_app
    ├── __init__.py
    ├── crud.py
    ├── database.py
    ├── main.py
    ├── models.py
    └── schemas.py

The intention is to add an app.py to the root (see #6) and then put view modules under api/.

This separation of API and db seems logical to me, but I think that the schemas.py does not belong there because it defines the pydantic model which is not actually required for the db part.

crud.py also feels like a higher level thing as it translates between the two kinds of models. What do you think about moving these two modules?

If we were to separate things as much as possible, the directory structure could look like this:

covidapi/
├── db             # only depends on SQLAlchemy (and alembic?)
│ ├── __init__.py
│ ├── database.py
│ └── models.py
├── schemas
│ ├── __init__.py
│ └── schemas.py   # pydantic models
├──services        # could contain other things used by the views
│ └── crud.py      # accepts/returns pydantic models, encapsulates the db
└── views          # uses services and schemas
   ├── __init__.py
   └── main.py 

Alternatively schemas and crud.py could be moved into the api layer.

What do you think?

Add report date to JH import

Currently, we store the "last updated" field for each record, which is different from the date JH reported it.

If we provide the report date, then API users will always be able to see a snapshot of the information on any given day.

I don't think the last updated field is very useful at all. It can give an idea of how out of date the numbers are but I have no idea what "updating" actually means - who has provided that update, what time zone they're in, etc.

In some cases the last updated date doesn't change even though the numbers do, for example on the 14th March, Italy had 1441 deaths, and on 15th March it had 1809, but both are reported with the same timestamp of 2020-03-14T20:13:16. This means our import drops the first record.

Make the root URL do something useful

Split from #20

Currently, the root URL (i.e. http://localhost:8000/) returns a 404 which is probably going to be confusing.

Can we redirect that to the docs, or put in an HTML landing page?

tiangolo/fastapi#199 has an example of how to do redirects in FastAPI

For a landing page I think we can follow https://fastapi.tiangolo.com/tutorial/static-files/

Some ideas for things we could put on a landing page:

How do we handle different data formats?

Hi everyone,

something we didn't initislly discuss is: how are we going to handle different data sources?

This API is born to support and serve the data from Johns Hopkins CSSE, which is fine, but it's worth noticing that they only support a few useful fields: Confirmed, Deaths and Recovered

Screenshot 2020-03-27 19 43 33

The data source from Italian "Protezione Civile", which I would really like to support, offers more useful data (for example the number of tests done in each city, which is useful in addition to the new positive cases found, so you can know if the trend is growing or decreasing):

Screenshot 2020-03-27 19 43 50

I'm sure that other countries are offering different data and formats too, which could all be useful.

Now, if we wanted to give our users the possibilities to query every different data source that we support, how should we structure this? I'm thinking about at least 1 model for each data source, but how are we structuring the API endpoints?

ie:

  • Italian Protezione Civile: /api/v1/itapc/national-reports
  • John Hopkins: /api/v1/jh/world-reports
  • etc... ?

Does anyone have any idea about how we could support this? cc @MatMoore @audreyr @fundor333

Add --all and --latest to import script

I would like to add two command line options to the import script:

  • --all should import all the available data (we know when the first day is so we just need to pass it as from_date value)
  • --latest should import last two days (yesterday and today). This is useful to run the import script every day/hour from Heroku Scheduler (see https://elements.heroku.com/addons/scheduler ) so we don't have to pass a different parameter every day, we can just pass --latest and the script will be able to calculate the correct --from-date

Once we have these two options (especially the --latest one), I can configure the Heroku Scheduler to run it regularly.

Covid-API MVP

Hi everyone,

I would like to use this issue to discuss what should be part of the MVP. With MVP I mean the "Minimum Valuable Product" we should try to get out as a first release.

  1. Import script: a script that takes each *.csv file available here https://github.com/CSSEGISandData/COVID-19/tree/master/csse_covid_19_data/csse_covid_19_daily_reports and import the data in the database. The CREATE or UPDATE criteria will be based on these table keys: Province/State, Country/Region and Last Update.

  2. Have a few (we will decide them in a separate issue and link them here) endpoints offering basic data queries

  3. Deploy the project to Heroku and make it live

  4. Add a few usage examples to the README

After these points are done, we should try to advertise the service as much as possible and base the future priorities on the feedback we receive from people using it.

What do you think about? cc @MatMoore @andreagrandi @fundor333

Is the date of the file needed?

This is the csv row into a BaseModel but we don't have the date of the file.

class DailyReport(BaseModel):
id: int
country_region: str
province_state: str
last_update: datetime
confirmed: int
deaths: int
recovered: int
class Config:
orm_mode = True

Do we need it? Or we save only the last date of the data?

Ignore site-packages when running pytest

Currently, when running pytest packages from the virtual environment are included and in particular we have aiofiles emitting a lot of warnings:

(covid-api) ➜  covid-api git:(fix-pytest-ignore-site-packages) ✗ pytest
============================================================================================================================= test session starts ==============================================================================================================================
platform darwin -- Python 3.8.1, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
rootdir: /Users/andrea/Projects/covid-api, inifile: pytest.ini, testpaths: ./tests
collected 1 item

tests/test_health.py .                                                                                                                                                                                                                                                   [100%]

=============================================================================================================================== warnings summary ===============================================================================================================================
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:17
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:17: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def __anext__(self):

/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:63
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:63: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def __iter__(self):

/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:72
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:72: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def __anext__(self):

/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:77
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:77: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def __aenter__(self):

/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:82
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:82: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def __aexit__(self, exc_type, exc, tb):

/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:91
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/base.py:91: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def __aexit__(self, exc_type, exc_val, exc_tb):

/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/utils.py:33: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def method(self, *args, **kwargs):

/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/__init__.py:27
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/threadpool/__init__.py:27: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def _open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None,

/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/os.py:10
/Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/os.py:10
  /Users/andrea/.virtualenvs/covid-api/lib/python3.8/site-packages/aiofiles/os.py:10: DeprecationWarning: "@coroutine" decorator is deprecated since Python 3.8, use "async def" instead
    def run(*args, loop=None, executor=None, **kwargs):

-- Docs: https://docs.pytest.org/en/latest/warnings.html
======================================================================================================================== 1 passed, 54 warnings in 0.52s ========================================================================================================================
(covid-api) ➜  covid-api git:(fix-pytest-ignore-site-packages) ✗

it would be nice to exclude the */site-packages/* folders from pytest.
I'm currently trying to do it from pytest.ini but it doesn't seem to work.

Cannot run tests with pytest anymore

Hi everyone,

I was going to work on CircleCI (and this is a confirmation that I probably should have done it sooner) integration, and before doing that I wanted to make sure that pytest was still running correctly, but despite having installed all the required libraries in my virtual environment, I'm getting this error:

(covid-api) ➜  covid-api git:(master) ✗ pytest
============================================================================================================================= test session starts ==============================================================================================================================
platform darwin -- Python 3.8.1, pytest-5.3.5, py-1.8.1, pluggy-0.13.1
rootdir: /Users/andrea/Projects/covid-api
collected 0 items / 1 error

==================================================================================================================================== ERRORS ====================================================================================================================================
____________________________________________________________________________________________________________________ ERROR collecting tests/test_health.py _____________________________________________________________________________________________________________________
ImportError while importing test module '/Users/andrea/Projects/covid-api/tests/test_health.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
tests/test_health.py:1: in <module>
    from fastapi.testclient import TestClient
E   ModuleNotFoundError: No module named 'fastapi.testclient'

I've also tried to open a Python shell and import it manually, but I'm getting the same error:

(covid-api) ➜  covid-api git:(master) ✗ python
Python 3.8.1 (default, Feb  6 2020, 15:57:25)
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from fastapi.testclient import TestClient
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'fastapi.testclient'

Does anyone know how/when this was broken? Am I doing something wrong?

cc @MatMoore

Cheers

Add query string support for /v1/jh/daily-reports endpoint

At the moment the /v1/jh/daily-reports endpoint endpoint only returns the first 100 results of the John Hopkins CSSE Daily Reports.

We need to be able to query the data specifying at least these four parameters:

  • last_update_from: a Date parameter (ie: 2020-03-21) wich will be used to search in JHDailyReport all the records ...WHERE last_update >= 2020-03-21
  • last_update_to: a Date parameter (ie: 2020-04-02) wich will be used to search in JHDailyReport all the records ...WHERE last_update <= 2020-04-02
  • country: a str parameter (ie: US) wich will be used to search in JHDailyReport all the records ...WHERE country_region = 'US'
  • province: a str parameter (ie: Los Angeles, CA) wich will be used to search in JHDailyReport all the records ...WHERE country_region = 'Los Angeles, CA'

Query example: /v1/jh/daily-reports endpoint?last_update_from=2020-03-21&last_update_to=2020-04-02&country=US&province=Los Angeles, CA

Note: all the above parameters must be optional

Add standardised country code

Forking this discussion from #42

Problem 1: Country identifiers are inconsistent

Currently, the country_region field is not a very reliable identifier.

One example is the UK, which has been reported in at least two different ways:

Currently, we ignore the change in column name but not the change in column value.

Problem 2: There is no way to consistently refer to the scope of the data

Originally most data was country level, except for China, which was reported in different regions.

This is getting more detailed as time goes on, so it means that if you make the same API call, you can get different information back depending on the date range you are querying.

For the UK, there is now additional rows with country_region=United Kingdom, but province_state set. To get just the UK, you need to filter extra rows that include British overseas territories and crown dependencies.

For the US, they have started reporting county-level information instead of country-level.

Proposal

  1. We use this lookup table ISO alpha2/3 country codes to each row, and make them filterable, so that users can filter by country more reliably. We should make this a new column for backwards compatibility.

  2. We add a new column called something like "scope", with values country_region, province_state and admin2. We can infer the scope of each record by looking at which columns are filled in. The code is sort of doing this already to check uniqueness, but the result is not stored. This way, API users should be able to write a query with scope and country parameters set and always get a consistent response back.

Patterns of Enterprise Application Architecture

I just downloaded your source code and started reading through it. I have a limited experience in software development and I'm still learning. I'm familiar with the MVC pattern but it doesn't appear that this is the pattern you used. Could you please provide a link to some information that described the design pattern you used or that is used in the industry when developing an API such as this?

Thanks in advance
Eric

Add Italian Protezione Civile data source

Italian Protezione Civile publishes a very accurated dataset every day. The raw data is available at this address: https://github.com/pcm-dpc/COVID-19

To consider this task feature complete, we need:

  • create ITAPCRegion, ITAPCProvince, ITAPCNationalTrend models in db/models.py using the fields described here https://github.com/pcm-dpc/COVID-19 but translating the field names to english language (the import script will take care of mapping the original Italian name with the english name in the models)
  • create ITAPCRegion, ITAPCProvince, ITAPCNationalTrend schemas in schemas/schemas.py using the same fields and data types used for the models
  • create ITAPCCRUD class in services/crud.py
    • create get_regions_reports()
    • create get_provinces_reports()
    • create get_national_trend_reports()
  • create views in api/views.py
    • /v1/itapc/regions-reports/ --> get_regions_reports
    • /v1/itapc/provinces-reports/ --> get_provinces_reports
    • /v1/itapc/national-trend-reports/ --> get_national_trend_reports
  • create import_data_itapc.py import script to import the existing data

Global testing dataset from OWID

This is another potential data source we could use: https://github.com/owid/covid-19-data/blob/master/public/data/testing/covid-testing-all-observations.csv

Context: https://ourworldindata.org/covid-testing

Like the John Hopkins Dataset:

  • it's updated daily
  • it contains records from different countries, which we could map to country codes.

Unlike JH:

  • they provide sources for each record
  • they don't correct past data (the numbers reflect what is known at commit time)

Thoughts on documentation?

I'm at PyBeachLA right now about to run sprints, and I think I can get some sprinters here involved. Docs are usually a good starting point for people who aren't ready to jump into code yet.

I'm thinking a docs/ folder with Markdown files, connected via webhook to ReadTheDocs.org?

Or do you have other suggestions/ideas?

Refactor the code to support additional sources of data

covid-api is currently supporting only the John Hopkins data. We are going to support additional source of data soon (see #27 ) but before doing that we need to refactor the code, which at the moment assumes there is only one data source.

Things to be done:

  • serve /v1/daily-reports/ from /v1/jh/daily-reports/
  • rename DailyReport model to JHDailyReport and change __tablename__ = "jh_daily_reports" (this will force us to reimport the existing data but it's not a problem since it only takes a few minutes)
  • rename DailyReport schema to JHDailyReport
  • move crud operation under a dedicated class
  • update existing import_script.py and rename it to import_script_jh.py (after the new code has been deployed we need to update the scheduler configuration on Heroku)

Create a production app on Heroku

This task is directly assigned to me, but I may need some help and advices. I've created the app on my Heroku account and I was wondering if we are going to deploy the code "manually" (using Heroku CLI) for the beginning or if we are going to setup some CI integration (I've mostly used TravisCI in the past but I've recently used CircleCI too to deploy my static blog to GitHub Pages).

I'd like to invite you @MatMoore to the Heroku app as collaborator, but I don't have your personal email. May I have through a Twitter direct message, please?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.