### Apache Airflow version

2.7.0

### What happened

When trying to install SodaCore on Airflow 2.7, the following error is received due to a conflict with `opentelemetry-api`.

```
ERROR: Cannot install apache-airflow==2.7.0 and soda-core==3.0.48 because these package versions have conflicting dependencies.

The conflict is caused by:
    apache-airflow 2.7.0 depends on opentelemetry-api==1.15.0
    soda-core 3.0.48 depends on opentelemetry-api~=1.16.0
```

SodaCore has depended on `opentelemetry-api~=1.16.0` ever since v[3.0.24](https://github.com/sodadata/soda-core/releases/tag/v3.0.24).

### What you think should happen instead

Airflow needs to support versions of `opentelemetry-api` 1.16.x.

### How to reproduce

Simply running the following commands to install the two packages should reproduce the error.

```
$ python3 -m venv /tmp/soda                                                                                         
$ /tmp/soda/bin/pip install apache-airflow==2.7.0 soda-core-bigquery==3.0.48
```

### Operating System

n/a

### Versions of Apache Airflow Providers

_No response_

### Deployment

Virtualenv installation

### Deployment details

_No response_

### Anything else

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

LOGS_DIR = AIRFLOW_SOURCES_ROOT / "logs"
DIST_DIR = AIRFLOW_SOURCES_ROOT / "dist"
DOCS_DIR = AIRFLOW_SOURCES_ROOT / "docs"
SCRIPTS_CI_DIR = AIRFLOW_SOURCES_ROOT / "scripts" / "ci"
DOCKER_CONTEXT_DIR = AIRFLOW_SOURCES_ROOT / "docker-context-files"
CACHE_TMP_FILE_DIR = tempfile.TemporaryDirectory()
OUTPUT_LOG = Path(CACHE_TMP_FILE_DIR.name, "out.log")
BREEZE_SOURCES_ROOT = AIRFLOW_SOURCES_ROOT / "dev" / "breeze"
MSSQL_TMP_DIR_NAME = ".tmp-mssql"
def create_volume_if_missing(volume_name: str):
    from airflow_breeze.utils.run_utils import run_command
    res_inspect = run_command(
        cmd=["docker", "volume", "inspect", volume_name],
        stdout=subprocess.DEVNULL,
        stderr=subprocess.DEVNULL,
        check=False,
    )
    if res_inspect.returncode != 0:
        result = run_command(
            cmd=["docker", "volume", "create", volume_name],
            check=False,
            capture_output=True,
        )
        if result.returncode != 0:
            get_console().print(
                "[warning]\nMypy Cache volume could not be created. Continuing, but you "
                "should make sure your docker works.\n\n"
                f"Error: {result.stdout}\n"
            )
def create_mypy_volume_if_needed():