VIAWARN

Country wide ECC

Fetching data from Canada ECC with Airbyte and Python.

Description

This Airbyte Connector uses the HTTP API provided by the Canada ECC in Python. With this connector, data is easily pulled from Canada ECC and loaded into the ViaWarn Postgres database, and are available in the ViaWarn app.

The connector is built on top of the Airbyte open-source platform, which provides a standardized way of integrating data sources and destinations. It is designed to be simple and easy to use. The required configuration is show in the the sections below. 

The pulled resource from the Canada ECC API is the following:

Requirements and Installation

Find the requirements and steps to create the connector in the Airbyte documentation.

Customized files

After creating the Airbyte connector template, modify the next files to retrieve data from Canada ECC.

spec.yaml

Location: source-viawarn-ca-cw-ecc/spec.yaml
Access API: FREE
spec.yaml:
				
					documentationUrl: https://weather.gc.ca/
connectionSpecification:
  $schema: http://json-schema.org/draft-07/schema#
  title: Viawarn CA CW ECC - Spec
  type: object
  properties:
    documentationUrl:
      type: string
      description: You can consult https://www.canada.ca/en/environment-climate-change/services/weather-general-tools-resources/weather-webmapping.html
				
			

config.json

Location: secrets/config.json
This file is ignore by git.
The config file holds an empty directory because this API is FREE and does not require any other parameter.
config.json:
				
					{}
				
			

configure_catalog.json

Location: integration_tests/configure_catalog.json
List of Streams that describes the data in the data store that a Source represents. It also declares the sync modes supported by each stream (full refresh or incremental).
configure_catalog.json:
				
					{ 
"streams": 
    [
    {
        "stream": {
            "name": "weath",
            "json_schema": {},
            "supported_sync_modes": ["full_refresh"] 
            },
        "sync_mode": "full_refresh", "destination_sync_mode": "overwrite" 
        } 
    ]
}
				
			

source.py

Location: source-viawarn-ca-cw-ecc/source.py

class ViawarnCaCwEccStream()

Create a stream to represent the data that will be pull from the API. It contains all the common API functionalities:
  •  url_base

This field is the common part of the URL for all streams, if it does not exist, add it in each stream method.

String

  • next_page_token()

Pagination is not provided by this API.

return None

  • request_params()

The API does not require any parameter. 

return an empty dictionary

  • parse_response()

It is a placeholder to store the request.response object and constructs the appropriate mapping object for each parsed element by each Stream class.

yields an empty dictionary.

class Weath()

This method extends the ViawarnCaCwEccStream() method to specified unique behavior for this stream.
  • primary_key

Unique field required in the stream associate to each output record.

String

  • path()

subdomain to be passed into the URL.

return a string

  • parse_response()

Definition of how a response is parsed.

Set a definition to: primary key and ewkt fields.

return an iterable containing each record in the response.

class SourceViawarnCaCwEcc()

  • check_connection()

Set up a test to verify the connection between the connector and the API. This test should return two variables: the first one is a boolean that indicates the status of the connection, while the second one shows a log message if the connection fails.

return True, None

  • streams()
Set up the stream in the source that will be parsed.
return List of streams

weath.json

Location: source-viawarn-ca-cw-ecc/schemas/weath.json
Declare stream schema by adding a json file and describing the output from the stream.
Streams name: weath

support@viawarn.com