# `set_tracks` lambda

The `set_tracks` lambda creates tracks for the product and populates them with the JSON data. The lambda populates all of the track metadata fields available in Workstation: audio file preview start point, track info, contributors and master rights. It does not populate assets. Currently it uses the `saveTracks` mutation to update the track metadata after the `setProductTracks` mutation created the tracks. We should aim to remove the use of `saveTracks` once `setProductTracks` supports all of the same fields.



## Setup

### Install [`uv`](https://docs.astral.sh/uv/)

Choose your favourite or similar:

```shell
pip install uv
pipx install uv
brew install uv
```

### Permissions

Use [`awsume`](https://www.notion.so/AWS-Access-f841b9dd815d4443a80e96a86c92cd2f#5618a9119254428e9baeada414767e85):


```shell
awsume prod
```


### Install Packages

```shell
make uv_dev
```


### Copy and edit env and event.json shadows

```shell
cp event.shadow.json event.json
cp .env.shadow .env.shadow
```
Update the `identity_uuid` to yours in `event.json` and the `ENVIRONMENT` to `qa` in the `.env`.

To get a recent event for local development, you can visit the [#qa-ccm-bulk-product-creation-alerts](https://sonymusic.enterprise.slack.com/archives/C09U6ML41E2) slack channel, which shows active sessions in QA with links to the step function. You can copy the `set_tracks` lambda input and drop it into the `event.json`. Remember to update the `identity_uuid` to yours.


## Local Development

```shell
# Install uv
brew install uv

# Install dependencies + create .venv (uv)
make uv_dev

# Run the function locally using event.json and print results
make dev

# Run formatting (ruff)
make fmt

# Run linting (ruff/mypy)
make lint

# Run unit tests (pytest)
make test_unit
```


## Local Development (Docker)

```shell
# Ensure the Docker daemon is running
docker ps

# Start the lambda container
make docker_up

# Send event.json to the local lambda container
make docker_event

# End the lambda container
make docker_down
```
