Data Science API

DS API - Family Promise 0.38.02

How to Use the DS API

Main URL: http://family-promise-dev.us-east-1.elasticbeanstalk.com

/vizmap endpoint

Perform SQL query of database according to filters implemented by user. Only pick out the following columns, and include those in a single JSON object that will be sent to DS API:

  • service_type_name from service_types table.

Plus:

  • address

  • address_line2

  • city

  • state

  • zip

  • country

from locations table.

*zip codes are pulled from github repo link and added to a dataframe based on pulled zip

/veteran_counts endpoint

A JSON object containing:

  • recipient_id

  • recipient_veteran_status

from recipients table.

/age_metric endpoint

A JSON object containing:

  • recipient_id

  • recipient_date_of_birth

from recipients table.

/eligibility endpoint

Accepts a string containing a household_id from the households table.

Returns a JSON object containing:

  • resident_assistance_eligibility: bool

  • reduced_bus_fare_eligiblity: bool

/total_served endpoint

Returns an integer representing the total number of recipients recorded in the database.

/families_served endpoint

Returns an integer representing the total number of families recorded in the database.

/children_served endpoint

Returns an integer representing the total number of children recorded in the database.

/genders_served endpoint

Returns an list displaying the total number of recipients of each gender in the database.

/races_served endpoint

Returns a list displaying the total number of recipients of each race in the database.

/ethnicities_served endpoint

Returns a list displaying the total number of recipients of each ethnicity in the database.

/program_enrollment endpoint

Returns a list displaying the total number of services done that fall under each program.

/services_given endpoint

Returns a list displaying the total number of each service done.

/locations_of_service endpoint

Returns a list displaying the total number of services given at each type of location in the database.

Docs

Running the DS application

  • Create the .env file in the folder.

    • Add DATABASE_URL = postgresql://docker:****@localhost:5400/api-dev to the .env file.

      • That is only for spinning up the local instance for the DS API

    • Make sure the .env file matches the .env file that is in the non public documentation.

  • run:pipenv install --dev to download all the dependencies.

  • run:pipenv shell to start the pipenv environment.

  • run:uvicorn app.main:app --reload to start running the fast api.

Running the DS application with Apple M1

  • When you pipenv install --dev on the M1 you will most likely run into issues where the Pipfile will fail to lock due to issues with psycopg2. Psyocopg2 specifically has issues pip installing on the M1. After figuring out past issues with the M1, this is a work around until there is further bug fixing on compatibility.

  • Install Homebrew.

  • Install miniforge for arm64(Apple Silicone M1).

  • run: conda create --name NAME python=3.8: creates a conda environment.

  • run: conda activate NAME: activates the conda environment.

    • The conda environment needs to running in order for the application to run.

  • run: conda install -c conda-forge -y psycopg2 numpy pandas: install necessary dependencies.

  • Create the .env file in the folder and continue following the instructions in the section above.

Updating the Elastic Beanstalk environment

  1. Do a normal push to GitHub repo and wait for the changes to be approved and pushed to the main branch.

  2. run:git pull to make sure code is perfect to deploy to Elastic Beanstalk.

  3. run:git add --all to get all the changes to the api that has been made.

  4. Change the version number in the main.py file. Example: 0.37.01

    • run:git commit -m 'Depoying version 0.XX.XX to AWS' to get all the changes add.

    • When you start to deploy the new changes to Elastic Beanstalk it will take latest commit you made.

  5. run: eb init --region us-east-1 family-promise to create the Elastic Beanstalk files in the application.

    • This step will only be required if you have not deployed to the Elastic Beanstalk environment.

  6. run:eb deploy --region us-east-1 family-promise-dev.

    • Follow instruction that will given to you.

    • You may have to grab your security credentials from AWS.

  7. Do a final push to add the final version number to the GitHub repo.

Contributors

Data Science Team (September, 2021)

DS API - Family Promise 0.38.02 OAS3

/openapi.json

To use these interactive docs:

  • Click on an endpoint below

  • Click the Try it out button

  • Edit the Request body or any parameters

  • Click the Execute button

  • Scroll down to see the Server response Code & Details

GET​/infoGet Url

Verify we can connect to the database, and return the database URL in this format: dialect://user:password@host/dbname The password will be hidden with ***

Parameters

Cancel

No parametersExecute

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

POST​/vizmap​/{query_json}VisualPOST​/veteran_counts​/{query_json}Veteran CountsPOST​/age_metric​/{query_json}Age Metric

POST​/eligibility​/{household_id}Check Eligibility

GET​/total_servedGet Total Served

Returns the total number of recipients TODO: Return recipients relavent to user

Returns

int total_served

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

GET​/families_servedGet Families Served

Returns the total number of families TODO: Return only those relavent to the user

Returns

int families_served

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

GET​/children_servedGet Children Served

Returns the number of recipients under 18, not inclusive.

Returns

int children_served

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

GET​/genders_servedGet Genders Served

Returns the count of each gender served.

Returns

list genders_served

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

GET​/races_servedGet Races Served

Returns the count of each race served.

Returns

list races_served

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

GET​/ethnicities_servedGet Ethnicities Served

Returns the count of each ethnicity served.

Returns

list ethnicities_served

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

GET​/program_enrollmentGet Program Enrollment

Returns the count of services done for each program.

Returns

list program_enrollment

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

GET​/services_givenGet Services Given

Returns the count of each service provided.

Returns

list services_given

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

GET​/locations_of_serviceGet Locations

Returns the count of services at each type of location.

Returns

list locations_of_service

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

POST​/geocode​/Get Latitude Longitude

Please post an address as a JSON object with this exact format: { "address": "123 Gilman Dr W", "address_line2": "", "city": "Seattle", "state": "WA", "zip": "98119", "country": "United States" }

All values should be a string if there is no address_line2, the value should still be an empty string

The output will be a JSON object with the following format: {"latitude": , "longitude": }

Parameters

Try it out

No parameters

Responses

CodeDescriptionLinks

200

Successful ResponseMedia typeapplication/jsonControls Accept header.

  • Example Value

  • Schema

No links

Schemas

HTTPValidationErrorValidationError

Last updated