canalyst-sdk 0.0.5
The official Canalyst Software Development Kit (SDK) for our public API
Requires Python: >=3.8

# Canalyst SDK

The Python SDK, is intended to provide users a way to interact with the
Canalyst public API. Additionally, users will be able to create scenarios and
analyze data from those what-if changes.

# Usage
## Configuration
The Python SDK supports three ways of providing configuration, in order of precedence:
   1. [Creating a `Config` instance](#using-config)
   2. [Using environment variables](#using-environment-variables)
   3. [Using a configuration file](#using-configuration-file)

`Config` is used to store a user's configuration information. On initial `candas` import, it will attempt to retrieve the configuration.

### Using `Config`
A `Config` instance can be created with the desired configurations.

In Python/iPython or Jupyter Notebook. Replace `<..>` with values

```
import sys
sys.path.append('<path to sdk-python>/src')
import candas as cd
from candas.configuration.config import Config

# if you want to set a default directory
# from pathlib import Path
# home = Path.home()
# default_dir = f"{home}/<any place under your home directory>"

config_info = {
  "canalyst_api_key": "<Canalyst API key>",
  "s3_access_key_id": "<S3 Access Key ID>",
  "s3_secret_key": "<S3 Secret Key>",
  "fred_key": "<Fred key>",
  "default_dir": "",
  "mds_host": "",
  "wp_host": ""
}

config = Config(config=config_info)

ticker = "<ticker you want test with>"
model = cd.Model(ticker=ticker, config=config)
model_set = cd.ModelSet(ticker_list=[ticker], config=config)
cd.ModelMap(
  ticker=ticker,
  config=config,
  time_series=time_series,
  col_for_labels=<label>,
  common_size_tree=True,
  notebook=False,
  auto_download=False,
)
```

### Using Environment Variables
Environment variables can be set in your terminal. The SDK looks for
- CANALYST_API_KEY
- S3_ACCESS_KEY_ID
- S3_SECRET_KEY
- FRED_KEY (optional)
- DEFAULT_DIR (optional; default is `sdk-python/`)
- MDS_HOST (optional; default is production Model Data System)
- WP_HOST (optional; default is production Web Portal)

In Python/iPython or Jupyter Notebook. Replace `<..>` with values

```
import sys
sys.path.append('<path to sdk-python>/src')
import candas as cd

ticker = "<ticker to test with>"
time_series = "<time series to test with>"
label = "<label of interest>
model = cd.Model(ticker=ticker)
model_set = cd.ModelSet(ticker_list=[ticker])
cd.ModelMap(
  ticker=ticker,
  time_series=time_series,
  col_for_labels=<label>,
  common_size_tree=True,
  notebook=False,
  auto_download=False,
)
```

### Using a Configuration File
When `candas` is imported and if there is not already an existing configuration file, a configuration file, `keys.json`, is created in the user's home directory, `C:\Users\<username>\canalyst\keys.json` on Windows or `/User/<username>/canalyst/keys.json` on a Unix-based OS (e.g. Mac, Linux). The configuration file can be moved but must be under a user's home directory and must be in directly under a 'canalyst' folder. Examples of valid locations:

Windows
- `C:\Users\<username>\canalyst\keys.json`
- `C:\Users\<username\Downloads\canalyst\keys.json'`
  
Unix-based OS
- `/Users/<username/canalyst/keys.json`
- `/Users/<username>/Downloads/canalyst/keys.json`

The contents of `keys.json`:
```
{
    "canalyst_api_key": "",
    "canalyst_s3_id": "",
    "canalyst_s3_key": "",
    "fred_key": "",
    "default_dir": "",
    "mds_host": "",
    "wp_host": ""
}
```

Fill in 
1. `canalyst_api_key`: Canalyst API token. Get it at https://app.canalyst.com/settings/api-tokens
2. `canalyst_s3_id`:  AWS S3 Access Key ID
3. `canalyst_s3_key`:  AWS S3 Secret Key
4. (Optional) `default_dir`: your chosen directory for where downloads will go

In Python/iPython or Jupyter Notebook. Replace `<..>` with values

```
import sys
sys.path.append('<path to sdk-python>/src')
import candas as cd

ticker = "<ticker to test with>"
time_series = "<time series to test with>"
label = "<label of interest>
model = cd.Model(ticker=ticker)
model_set = cd.ModelSet(ticker_list=[ticker])
cd.ModelMap(
  ticker=ticker,
  time_series=time_series,
  col_for_labels=<label>,
  common_size_tree=True,
  notebook=False,
  auto_download=False,
)
```