Our docs on dag policy demonstrate usage with type annotations:
https://airflow.apache.org/docs/apache-airflow/stable/concepts.html?highlight=dag_policy#dag-level-cluster-policy

```python
def dag_policy(dag: DAG):
    """Ensure that DAG has at least one tag"""
    if not dag.tags:
        raise AirflowClusterPolicyViolation(
            f"DAG {dag.dag_id} has no tags. At least one tag required. File path: {dag.filepath}"
        )
```

The problem is, by the time you import DAG with `from airflow import DAG`, airflow will have already loaded up the `settings.py` file (where processing of airflow_local_settings.py is done), and it seems nothing in your airflow local settings file gets imported.

So none of these examples would actually work.

To test this you can add a local settings file containing this:

```
from airflow import DAG

raise Exception('hello')
```

Now run `airflow dags list` and observe that no error will be raised.

Remove the `DAG` import.  Now you'll see the error.

Any suggestions how to handle this?  

There are a couple conf settings imported from settings. We could move these to `airflow/__init__.py`.  But less straightforward would be what to do about `settings.initialize()`.  Perhaps we could make it so that initialized is called within settings?


tests/cluster_policies/__init__.py
"""Ensure Tasks have non-default owners."""
    _check_task_rules(task)
def dag_policy(dag: DAG):
    """Ensure that DAG has at least one tag"""
    if not dag.tags:
        raise AirflowClusterPolicyViolation(
            f"DAG {dag.dag_id} has no tags. At least one tag required. File path: {dag.filepath}"
        )
def task_policy(task: BaseOperator):
    if task.task_type == 'HivePartitionSensor':
        task.queue = "sensor_queue"
    if task.timeout > timedelta(hours=48):
        task.timeout = timedelta(hours=48)
def task_instance_mutation_hook(task_instance: TaskInstance):
    if task_instance.try_number >= 1:
        task_instance.queue = 'retry_queue'