Repository: apache/airflow

Issue:
A minor typo in NotPreviouslySkippedDep
**Apache Airflow version**: master


**Kubernetes version (if you are using kubernetes)** (use `kubectl version`): n/a

**Environment**: n/a

- **Cloud provider or hardware configuration**: n/a
- **OS** (e.g. from /etc/os-release): n/a
- **Kernel** (e.g. `uname -a`): n/a
- **Install tools**: n/a
- **Others**: n/a

**What happened**:

Found a typo in `airflow/airflow/ti_deps/deps/not_previously_skipped_dep.py`:
```python
class NotPreviouslySkippedDep(BaseTIDep):
    """
    Determines if any of the task's direct upstream relatives have decided this task should
    be skipped.
    """

    NAME = "Not Previously Skipped"
    IGNORABLE = True
    IS_TASK_DEP = True
```

**What you expected to happen**:

`IGNORABLE`, though lexically correct, should have been `IGNOREABLE`, as specified in `BaseTIDep`:
```python
class BaseTIDep:
    """
    Abstract base class for dependencies that must be satisfied in order for task
    instances to run. For example, a task that can only run if a certain number of its
    upstream tasks succeed. This is an abstract class and must be subclassed to be used.
    """

    # If this dependency can be ignored by a context in which it is added to. Needed
    # because some dependencies should never be ignoreable in their contexts.
    IGNOREABLE = False
```

It is being used here:
```python
@provide_session
    def get_dep_statuses(self, ti, session, dep_context=None):
        """
        Wrapper around the private _get_dep_statuses method that contains some global
        checks for all dependencies.

        :param ti: the task instance to get the dependency status for
        :type ti: airflow.models.TaskInstance
        :param session: database session
        :type session: sqlalchemy.orm.session.Session
        :param dep_context: the context for which this dependency should be evaluated for
        :type dep_context: DepContext
        """
        if dep_context is None:
            dep_context = DepContext()

        if self.IGNOREABLE and dep_context.ignore_all_deps:
            yield self._passing_status(
                reason="Context specified all dependencies should be ignored.")
            return

        if self.IS_TASK_DEP and dep_context.ignore_task_deps:
            yield self._passing_status(
                reason="Context specified all task dependencies should be ignored.")
            return

        yield from self._get_dep_statuses(ti, session, dep_context)
```

**How to reproduce it**:

n/a

**Anything else we need to know**:

I can help out with this issue if given the green light 😄 


Discussion:
Thanks for opening your first issue here! Be sure to follow the issue template!

If you have a ready solution, you don't have to create a ticket. It is much easier to discuss change when we have PR.  Issue is only needed when someone else is creating PR, or when you are implementing a long-term plan.


Resolving patch:
diff --git a/airflow/models/taskinstance.py b/airflow/models/taskinstance.py
--- a/airflow/models/taskinstance.py
+++ b/airflow/models/taskinstance.py
@@ -432,7 +432,7 @@ def generate_command(
         :type execution_date: datetime
         :param mark_success: Whether to mark the task as successful
         :type mark_success: bool
-        :param ignore_all_deps: Ignore all ignorable dependencies.
+        :param ignore_all_deps: Ignore all ignoreable dependencies.
             Overrides the other ignore_* parameters.
         :type ignore_all_deps: bool
         :param ignore_depends_on_past: Ignore depends_on_past parameter of DAGs
diff --git a/airflow/ti_deps/deps/not_previously_skipped_dep.py b/airflow/ti_deps/deps/not_previously_skipped_dep.py
--- a/airflow/ti_deps/deps/not_previously_skipped_dep.py
+++ b/airflow/ti_deps/deps/not_previously_skipped_dep.py
@@ -25,7 +25,7 @@ class NotPreviouslySkippedDep(BaseTIDep):
     """
 
     NAME = "Not Previously Skipped"
-    IGNORABLE = True
+    IGNOREABLE = True
     IS_TASK_DEP = True
 
     def _get_dep_statuses(self, ti, session, dep_context):  # pylint: disable=signature-differs


Test patch: