Repository: vogt4nick/dequindre

Issue:
Align readme.md with docs/

Discussion:

Patch:
diff --git a/.bumpversion.cfg b/.bumpversion.cfg
index c58e0f9..f3259ce 100644
--- a/.bumpversion.cfg
+++ b/.bumpversion.cfg
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.6.1.dev0
+current_version = 0.7.0
 commit = True
 tag = False
 parse = (?P<major>\d+)
diff --git a/dequindre/__init__.py b/dequindre/__init__.py
index 355ab35..1615964 100644
--- a/dequindre/__init__.py
+++ b/dequindre/__init__.py
@@ -13,38 +13,13 @@ import os
 from typing import Dict, Set
 from subprocess import run as subprocess_run
 from subprocess import check_output, CalledProcessError
-from time import sleep
 
 
-__version__ = '0.6.1.dev0'
+__version__ = '0.7.0'
 
 
 class CyclicGraphError(Exception):
     pass
-
-
-class CondaVersionError(Exception):
-    pass
-
-
-def check_conda():
-    """Verify the machine has a version of conda capable of using `run`. 
-
-    `conda run -n base python 'print("test")'` 
-    """
-    host_version = check_output('conda --version', shell=True).decode().strip()
-    cmd = """ conda run -n base python -c 'print("test...")' """
-    try:
-        check_output(cmd, shell=True)
-    except CalledProcessError:
-        msg = (
-            """Your version of conda does not support the 'conda run' """
-            f"""function. Your machine has {host_version} installed. """
-            """You must upgrade to upgrade to conda >=4.6 to use dequindre."""
-        )
-        raise CondaVersionError(msg)
-
-
 class Task:
     """Defines a Task and its relevant attributes. Tasks with the same loc
     are equal.
@@ -73,9 +48,9 @@ class Task:
         env = self.env
         hash_str = '-'.join((loc, env))
         big_int = int(md5(hash_str.encode()).hexdigest(), 16)
-        
+
         return big_int
-    
+
 
     def __eq__(self, other: 'Task') -> bool:
         if not isinstance(other, type(self)):
@@ -99,26 +74,54 @@ class Task:
 
 
 class DAG:
-    """Defines a directed acyclic graph with tasks and directed edges. Not
-    obviously, a DAG may contain more than one graph. Also not obviously,
+    """Defines a directed acyclic graph with tasks and dependencies as nodes
+    and directed edges respectively.
+
+    Not obviously, a DAG may contain more than one graph. Also not obviously,
     new Tasks defined by edges are automatically added to the set of tasks.
 
-    DAGs are instantiated without arguments.
+    Instantiation:
+        DAG(tasks: Set[Task], dependencies: Dict[Task, Set[Task]]) -> None:
+            You have the option to define all the tasks and dependencies at
+            once if you prefer that syntax.
 
     Attributes:
-        tasks (Set[Task]): The set of all tasks. Need not
-        edges (Dict[Task, Set[Task]]): A dict of directed edges from one Task
-            to a set of Tasks.
-
-    TODO: The DAG should catch cycles before they get to Dequindre.
-    TODO: Consider defining edges at instantiation.
-    TODO: Define edges as downstream: upstream.
-    TODO: Consider renaming "edge" to dependency or something more intuitive
-        for users.
+        tasks (Set[Task]):
+            The set of all tasks. Dequindre will try to run every task in
+            this attribute.
+        _edges (Dict[Task, Set[Task]]):
+            A dict of directed edges from one Task to a set of Tasks. Access
+            directly at your own peril.
+
+    Methods:
+        add_task(task: Task) -> None:
+            Add one task to the DAG with no dependencies.
+        add_tasks(tasks: Set[Task]) -> None:
+            Add multiple tasks to the DAG with no dependencies.
+        remove_task(task: Task) -> None:
+            Remove one task from the DAG. This also removes all dependencies
+            downstream and upstream of the task.
+        remove_tasks(tasks: Set[Task]) -> None:
+            Remove multiple tasks from the DAG with no dependencies. This also
+            removes all dependencies downstream and upstream of the task.
+        add_dependency(task: Task, depends_on: Task) -> None:
+            Add a task dependency to the DAG. If either task does not yet
+            exist in DAG, the task will automatically be added to the dag.
+        add_dependencies(d: Dict[Task, Set[Task]]) -> None:
+            Add multiple task dependencies to the DAG. If any task does not
+            yet exist in DAG, the task will automatically be added to the
+            dag.
+        get_downstream() -> (Dict[Task, Set[Task]]):
+            Get the adjacency dict of downstream Tasks.
+        get_upstream() -> (Dict[Task, Set[Task]]):
+            Get the adjacency dict of upstream Tasks.
+        get_sources() -> (Set(Task)):
+            Get the set of all tasks with no upstream dependencies.
+        get_sinks() -> (Set[Task]):
+            Get the set of all tasks with no downstream dependencies.
     """
 
     def __init__(self, *, tasks: set = None, dependencies: dict = None):
-        # check_conda()
         self.tasks = set()
         self._edges = defaultdict(set)
 
@@ -131,7 +134,7 @@ class DAG:
             self.add_dependencies(dependencies)
 
         return None
-    
+
 
     def __repr__(self):
         if self.tasks:
@@ -151,12 +154,14 @@ class DAG:
 
 
     def add_tasks(self, tasks: set):
-        """Add multiple tasks to the set of tasks
+        """Add multiple tasks to the set of tasks"""
+        assert isinstance(tasks, (set, Task)), TypeError('tasks is not a set')
 
-        TODO: Handle iterables
-        TODO: Handle non-iterables
-        """
-        assert isinstance(tasks, set), TypeError('tasks is not a set')
+        if isinstance(tasks, Task):
+            task = tasks
+            self.add_task(task)
+
+            return None
 
         for t in tasks:
             self.add_task(t)
@@ -166,8 +171,6 @@ class DAG:
 
     def remove_task(self, task: Task):
         """Remove task from the set of tasks and remove any related edges
-
-        TODO: Define remove_tasks
         """
         assert isinstance(task, Task), TypeError('task is not a dequindre Task')
 
@@ -183,34 +186,24 @@ class DAG:
         return None
 
 
-    def add_edge(self, start: Task, end:Task):
-        """Add directed edge to DAG"""
-        # error handling by add_tasks won't be clear to the user.
-        assert isinstance(start, Task), TypeError('start is not a dequindre Task')
-        assert isinstance(end, Task), TypeError('end is not a dequindre Task')
+    def remove_tasks(self, tasks: set):
+        """Remove multiple tasks from the set of tasks"""
+        assert isinstance(tasks, (set, Task)), TypeError('tasks is not a set')
 
-        self.add_tasks({start, end})
-        self._edges[start].add(end)
-
-        return None
+        if isinstance(tasks, Task):
+            task = tasks
+            self.remove_task(task)
 
+            return None
 
-    def add_edges(self, d: dict):
-        """Add directed edges to the DAG"""
-        for k, v in d.items():
-            if isinstance(v, Task):
-                self.add_edge(k, v)
-                continue
-            elif isinstance(v, set):
-                for vi in v:
-                    self.add_edge(k, vi)
+        for t in tasks:
+            self.remove_task(t)
 
         return None
 
-
     def add_dependency(self, task: Task, depends_on: Task):
         """Add dependency to DAG
-        
+
         Examples:
         >>> from dequindre import Task, DAG
         >>> boil_water = Task('boil_water.py')
@@ -232,11 +225,11 @@ class DAG:
             raise CyclicGraphError(msg)
 
         return None
-    
-    
+
+
     def add_dependencies(self, d: Dict[Task, Set[Task]]):
         """Add dependencies to DAG
-        
+
         Examples:
         >>> from dequindre import Task, DAG
         >>> boil_water = Task('boil_water.py')
@@ -247,7 +240,7 @@ class DAG:
         """
         for task, dependencies in d.items():
             if isinstance(dependencies, Task):
-                dependency = dependencies 
+                dependency = dependencies
                 self.add_dependency(task, dependency)
                 continue
             elif isinstance(dependencies, set):
@@ -257,6 +250,8 @@ class DAG:
     # ------------------------------------------------------------------------
     # Graph Utilities
     # ------------------------------------------------------------------------
+    # nested loops are easier to read here. If time-complexity becomes a 
+    # problem, the user clearly needs to use a full-featured scheduler
     def get_downstream(self) -> dict:
         """Return adjacency dict of downstream Tasks."""
         return defaultdict(set,
@@ -349,14 +344,12 @@ class Dequindre:
     TODO: The DAG should catch cycles before they get to Dequindre.
     TODO: Define exception for when cycles are detected
     """
-    def __init__(self, dag: DAG, *, validate_conda: bool = True):
-        if validate_conda:
-            check_conda()
+    def __init__(self, dag: DAG):
         self.original_dag = dag
         self.refresh_dag()
 
         return None
-    
+
 
     def __repr__(self):
         return f"{Dequindre.__qualname__}({self.dag})"
@@ -421,9 +414,7 @@ class Dequindre:
             ValueError(f'{task} is not in the dag')
 
         print(f'\nRunning {repr(task)}\n')
-        r = subprocess_run(
-            f'conda run -n {task.env} python {task.loc}',
-            shell=True, check=True)
+        r = subprocess_run(f'{task.env} {task.loc}', shell=True, check=True)
 
         return None
 
@@ -439,4 +430,3 @@ class Dequindre:
                     self.run_task(task)
                 except Exception as err:
                     print(err)
-                sleep(1)
diff --git a/docs/source/index.rst b/docs/source/index.rst
index ba2c808..6dd79c7 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -30,12 +30,12 @@ Dequindre /\_de-KWIN-der\_/ (n.): A minimalist scheduler.
 ..     :target: https://pypi.org/project/dequindre/
 
 
-Vision
-^^^^^^
+Vision: Simplify Workflow Automation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
-``dequindre`` aims to empower workflow automation for everyone. It's part of a 
-larger vision to teach the fundamentals and best practices to practicing and 
-aspiring data scientists and data engineers.
+``dequindre`` aims to simplify workflow automation. It is part of a larger 
+vision to teach the fundamentals and best practices to practicing and aspiring
+data scientists and data engineers.
 
 
 What is dequindre?
@@ -48,6 +48,19 @@ What is dequindre?
 - learn the fundamentals and best practices of scheduling workflows.
 
 
+Features
+^^^^^^^^
+
+- **Automated workflow scheduling**
+- **Run your Python tasks in any pre-defined environments**
+    - ``dequindre`` facilitates **virtualenv**, **conda**, and **pipenv** environments
+- **Supports dynamic workflow configuration** also seen in Airflow
+- **Pure Python**: Relies entirely from Python built-ins.
+- **Cross-Python compatible**: Supports Python 2 and Python 3
+- **Cross-platform**: Windows and Unix style environments
+- **Documented** examples and configuration
+
+
 Basic Example
 ^^^^^^^^^^^^^
 
@@ -75,18 +88,6 @@ First, install ``dequindre`` with ``pip install dequindre``. Then, in the REPL o
         2: {Task(boil_water.py)},  
         3: {Task(steep_tea.py)}})
 
-
-Features
-^^^^^^^^
-
-- **Automated workflow scheduling**
-- **Run your Python tasks in any pre-defined environments**
-    - ``dequindre`` facilitates **virtualenv** and **conda** environments
-- **Supports dynamic workflow configuration** also seen in Airflow
-- **Cross-Python compatible**: Supports Python 2 and Python 3
-- **Cross-platform**: Windows and Unix style environments
-- **Documented** examples and configuration
-
 User Guide
 ^^^^^^^^^^
 
diff --git a/license.md b/license.md
index bbdf6d0..cbaa56e 100644
--- a/license.md
+++ b/license.md
@@ -1,5 +1,3 @@
-# License
-
 The MIT License (MIT)
 
 Copyright (c) 2019 Nick Vogt
@@ -22,6 +20,4 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
 THE SOFTWARE.
 
-## Contact
-
 Questions? Please contact vogt4nick@gmail.com
diff --git a/readme.md b/readme.md
index f21aafd..83cd123 100644
--- a/readme.md
+++ b/readme.md
@@ -1,66 +1,71 @@
 
-# Dequindre /_de-KWIN-der_/ (n.): A minimalist scheduler. 
+# Dequindre /\_de-KWIN-der\_/ (n.): A minimalist scheduler.
 
-Dequindre is built for professionals with the most basic use-cases in mind. You can install and configure your first pipeline in minutes. Dequindre makes it easy to configure, test, and deploy workflows. It also functions as a learning tool for students and professionals without the time or resources to setup the requisite architecture for a full-featured scheduler.
+[![Supported
+Versions](https://img.shields.io/pypi/pyversions/dequindre.svg)](https://pypi.org/project/dequindre/)
+[![Documentation](https://img.shields.io/readthedocs/dequindre.svg)](https://dequindre.readthedocs.io/en/latest/)
+[![Version](https://img.shields.io/pypi/v/dequindre.svg?color=blue)](https://pypi.org/project/dequindre/)
+[![Last
+Commit](https://img.shields.io/github/last-commit/vogt4nick/dequindre.svg)](https://github.com/vogt4nick/dequindre)
+[![License](https://img.shields.io/pypi/l/dequindre.svg?color=red)](https://pypi.org/project/dequindre/)
 
-Inspired by the complexity of Airflow, Dequindre is build on three design pillars:
+---
 
-1. The schedule should be human readable and optimizable.  
-2. Tasks should fail loudly and clearly.  
-3. 80% of the work can be done with the bare-essential features.  
+## Vision: Simplify Workflow Automation
 
-Dequindre offers
+`dequindre` aims to simplify workflow automation. It is part of a larger vision to teach the fundamentals and best practices to practicing and aspiring data scientists and data engineers.
 
-* No Python dependencies; no third-party bugs
-* Single-container deployment
-* Legible source code; fewer than 1000 lines
-* Fast, dynamic configuration
+## What is dequindre?
 
-# Usage
+`dequindre` is a minimalist scheduler you can use to:
 
-Dequindre allows dynamic configuration with Python. By example, we may program the process to make tea as  
+- quickly configure python workflows at home or at work,
+- run dependent tasks in separate python environments, and
+- learn the fundamentals and best practices of scheduling workflows.
 
-```usage
+## Features
+
+- **Automated workflow scheduling**
+- **Run your Python tasks in any pre-defined environments**
+  - `dequindre` facilitates **virtualenv**, **conda**, and **pipenv** environments
+- **Supports dynamic workflow configuration** also seen in Airflow
+- **Pure Python**: Relies entirely from Python built-ins.
+- **Cross-Python compatible**: Supports Python 2 and Python 3
+- **Cross-platform**: Windows and Unix style environments
+- **Documented** examples and configuration
+
+## Basic Example
+
+First, install `dequindre` with `pip install dequindre`. Then, in the
+REPL or in a `schedule.py` file,
+
+```basic-example
 >>> from dequindre import Task, DAG, Dequindre
 >>>
->>> # define tasks and environments
->>> pour_water = Task('pour_water.py, env='kitchen')
->>> boil_water = Task('boil_water.py', env='microwave')
->>> prep_infuser = Task('prep_infuser.py', env='kitchen')
->>> steep_tea = Task('steep_tea.py', env='kitchen')
+>>> ## define tasks and environments
+>>> pour_water = Task('pour_water.py)
+>>> boil_water = Task('boil_water.py')
+>>> prep_infuser = Task('prep_infuser.py)
+>>> steep_tea = Task('steep_tea.py')
 >>>
->>> # define runtime dependencies
+>>> ## define runtime dependencies
 >>> make_tea = DAG(dependencies={
 ...    boil_water: {pour_water},
 ...    steep_tea: {boil_water, prep_infuser}
-...})
+... })
 >>>
->>> # run tasks
->>> dq = Dequindre(dag, check_conda=False)
->>> dq = dq.get_schedules()
+>>> ## run tasks
+>>> dq = Dequindre(make_tea, validate_conda=False)
+>>> dq.get_schedules()
 defaultdict(<class 'set'>, {
-    1: {Task(make_tea.py), Task(prep_infuser.py)},
-    2: {Task(boil_water.py)},
-    3: {Task(steep_tea.py)}
-})
->>> dq.run_tasks()
-...
+    1: {Task(prep_infuser.py), Task(pour_water.py)},  
+    2: {Task(boil_water.py)},  
+    3: {Task(steep_tea.py)}})
 ```
 
-`dq.run_tasks()` looks at the priorities and runs `conda run -n ENVIRONMENT python PATH` under the hood.
-
 ## Getting Started
 
-Dequindre has two requirements: conda and python.
-
-### Prerequisites
-
-Dequindre relies on [conda >=4.6](https://docs.conda.io/projects/conda/en/latest/user-guide/getting-started.html) to run tasks in different environments.  
-
-```conda-version
-$ conda --version
-conda 4.6.4
-```
+Dequindre is has two requirements: conda and python.
 
 ### Installing
 
@@ -74,24 +79,6 @@ If you're interested in contributing to Dequindre, [raise an issue](https://gith
 
 Please read [contributing.md](contributing.md) for details on our code of conduct, and the process for submitting pull requests to us.
 
-### Running the tests
-
-Dequindre's tests are currently written entirely with the `pytest` module. Navigate to the repo's directory on your system and use the `pytest` command. Output should resemble
-
-```pytest
-$ pytest
-============================= test session starts =============================
-platform win32 -- Python 3.6.6, pytest-4.2.1, py-1.7.0, pluggy-0.8.1
-rootdir: C:\Users\Nick.Vogt\Projects\repos\dequindre, inifile:
-collected 25 items
-
-dequindre\tests\test_DAG.py ...............                              [ 60%]
-dequindre\tests\test_Dequindre.py ......                                 [ 84%]
-dequindre\tests\test_Task.py ....                                        [100%]
-
-========================== 25 passed in 4.14 seconds ==========================
-```
-
 ## Versioning
 
 We use [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository](https://github.com/vogt4nick/dequindre/tags).  
diff --git a/setup.py b/setup.py
index 8dd8ebb..ace054b 100644
--- a/setup.py
+++ b/setup.py
@@ -22,7 +22,7 @@ setup(
         "Programming Language :: Python :: 3.5",
         "Programming Language :: Python :: 3.6",
         "Programming Language :: Python :: 3.7",
-        "Programming Language :: Python :: 3.8",
+        "Topic :: Software Development :: Libraries :: Python Modules",
         "License :: OSI Approved :: MIT License",
         "Operating System :: OS Independent"
     ],


Test patch:
diff --git a/tests/test_DAG.py b/tests/test_DAG.py
index db1ca4c..c9f4978 100644
--- a/tests/test_DAG.py
+++ b/tests/test_DAG.py
@@ -14,25 +14,9 @@ def get_two_tasks():
         Task('B.py', env='test-env')
     )
 
-
-def get_cyclic_graph():
-    A = Task('A.py', env='test-env')
-    B = Task('B.py', env='test-env')
-    C = Task('C.py', env='test-env')
-
-    dag = DAG()
-    dag.add_edges({
-        A: B,
-        B: C,
-        C: A,
-    })
-
-    return dag
-
 # ----------------------------------------------------------------------------
 # DAG magic methods
 # ----------------------------------------------------------------------------
-@pytest.mark.run(order=2)
 def test__DAG_init():
     DAG()
 
@@ -51,7 +35,6 @@ def test__DAG_repr():
 # ----------------------------------------------------------------------------
 # DAG.tasks
 # ----------------------------------------------------------------------------
-@pytest.mark.run(order=2)
 def test__DAG_add_task():
     A, B = get_two_tasks()
 
@@ -61,50 +44,39 @@ def test__DAG_add_task():
     assert dag.tasks == {A,}, 'Test Task was not added to the DAG'
 
 
-@pytest.mark.run(order=2)
 def test__DAG_add_tasks():
     A, B = get_two_tasks()
-
+    C = Task('C.py')
     dag = DAG()
     dag.add_tasks({A, B})
 
     assert dag.tasks == {A,B}, 'Test Tasks were not added to the DAG'
 
+    dag.add_tasks(C)
 
-@pytest.mark.run(order=2)
-def test__DAG_remove_task():
-    A, B = get_two_tasks()
+    assert dag.tasks == {A,B,C}
 
-    dag = DAG()
-    dag.add_tasks({A, B})
-    dag.remove_task(A)
-
-    assert dag.tasks == {B}, 'Test Task was not added to the DAG'
 
-# ----------------------------------------------------------------------------
-# DAG._edges
-# ----------------------------------------------------------------------------
-@pytest.mark.run(order=2)
-def test__DAG_add_edge():
+def test__DAG_remove_task():
     A, B = get_two_tasks()
 
     dag = DAG()
     dag.add_tasks({A, B})
-    dag.add_edge(A, B)
-    assert dag._edges == {A: {B,}}, 'edge was not created'
+    dag.remove_task(A)
 
-    del dag 
-    dag = DAG()
-    dag.add_edge(A, B)
-    assert dag._edges == {A: {B,}}, 'edge Tasks were not added to DAG.tasks'
+    assert dag.tasks == {B}
 
 
-@pytest.mark.run(order=2)
-def test__DAG_edges():
+def test__DAG_remove_tasks():
     A, B = get_two_tasks()
+    C = Task('C.py')
     dag = DAG()
-    dag.add_edges({A: B})
-    assert isinstance(dag._edges[A], set), 'edge dict value is not a set'
+    dag.add_tasks({A, B, C})
+    dag.remove_tasks({A, B})
+    assert dag.tasks == {C}
+
+    dag.remove_tasks(C)
+    assert dag.tasks == set()
 
 # ----------------------------------------------------------------------------
 # add dependencies
@@ -152,50 +124,46 @@ def test__DAG_add_dependency_detect_cycle():
 # ----------------------------------------------------------------------------
 # methods
 # ----------------------------------------------------------------------------
-@pytest.mark.run(order=2)
 def test__DAG_get_downstream():
     A, B = get_two_tasks()
     dag = DAG()
-    dag.add_edge(A, B)
+    dag.add_dependency(B, depends_on=A)
     assert dag.get_downstream() is not None
     assert dag.get_downstream()[A] == {B,}
     assert dag.get_downstream() == {A: {B,}}, 'Task B is not downstream'
 
 
-@pytest.mark.run(order=2)
 def test__DAG_get_upstream():
     A, B = get_two_tasks()
     dag = DAG()
-    dag.add_edge(A, B)
+    dag.add_dependency(B, depends_on=A)
     assert dag.get_upstream() is not None
     assert dag.get_upstream()[B] == {A,}
     assert dag.get_upstream() == {B: {A,}}, 'Task A is not upstream'
 
 
-@pytest.mark.run(order=2)
 def test__DAG_get_sources():
     A, B = get_two_tasks()
     dag = DAG()
-    dag.add_edge(A, B)
+    dag.add_dependency(B, depends_on=A)
     assert dag.get_sources() is not None
     assert dag.get_sources() == {A,}
 
 
-@pytest.mark.run(order=2)
 def test__DAG_get_sinks():
     A, B = get_two_tasks()
     dag = DAG()
-    dag.add_edge(A, B)
+    dag.add_dependency(B, depends_on=A)
     assert dag.get_sinks() is not None
     assert dag.get_sinks() == {B,}
 
 
-@pytest.mark.run(order=2)
 def test__DAG_is_cyclic():
     A, B = get_two_tasks()
     dag = DAG()
-    dag.add_edge(A, B)
+
+    dag.add_dependency(B, depends_on=A)
     assert not dag.is_cyclic(), 'acyclic graph idenfied as cyclic'
     
-    dag = get_cyclic_graph()
-    assert dag.is_cyclic(), 'cyclic graph idenfied as acyclic'
+    with pytest.raises(CyclicGraphError):
+        dag.add_dependency(A, depends_on=B)
diff --git a/tests/test_Dequindre.py b/tests/test_Dequindre.py
index 82b8b1c..29ba312 100644
--- a/tests/test_Dequindre.py
+++ b/tests/test_Dequindre.py
@@ -7,7 +7,6 @@ import pytest
 from dequindre import Task, DAG, Dequindre
 
 
-@pytest.mark.run(order=1)
 def test__Dequindre_init_exceptions():
     """Raise expected exceptions
     """
@@ -24,7 +23,6 @@ def test__Dequindre_init_exceptions():
     return None
 
 
-@pytest.mark.run(order=2)
 def test__Dequindre_init():
     """Nothing should break here
     """
@@ -75,7 +73,7 @@ def test__Dequindre_get_task_schedules():
     Z = Task('Z.py', 'test-env')
     dag = DAG()
     dag.add_tasks({A, B, C, Z})
-    dag.add_edges({A:B, B:C})
+    dag.add_dependencies({B:A, C:B})
     dq = Dequindre(dag)
 
     priorities = dq.get_task_schedules()
@@ -96,7 +94,7 @@ def test__Dequindre_get_schedules():
     Z = Task('Z.py', 'test-env')
     dag = DAG()
     dag.add_tasks({A, B, C, Z})
-    dag.add_edges({A:B, B:C})
+    dag.add_dependencies({B:A, C:B})
     dq = Dequindre(dag)
 
     priorities = dq.get_schedules()
diff --git a/tests/test_Task.py b/tests/test_Task.py
index 4f76736..2124bb6 100644
--- a/tests/test_Task.py
+++ b/tests/test_Task.py
@@ -5,7 +5,6 @@ import pytest
 from dequindre import Task
 
 
-@pytest.mark.run(order=1)
 def test__Task_init():
     good_loc = 'path/to/file.py'
     good_env = 'test-env'