Network Wrangler 2.1 Summary:
- supports groups of projects, or _plans_
- supports co-requisites, pre-requisites, and conflicts
- tighter and more flexible version-compatibility controls
- more enforced documentation
**1. Expand the Types to include project, plan, and seed.**
- _Projects_: code representations of changes to a `hwy` or `trn` network. Similar to projects in older versions of wrangler, with updates described below.
- _Plans_: collection of projects and/or other plans. Specified by a file called `planSpecs.csv` with two columns: the first indicates the `path/name` of the project, and the second indicates the Type.
- _Seed_: the baseline starting point for a network. They are similar to projects but are meant to be applied first.
**2. Upgrade 'project', 'plan', and 'seed' definition requirements to force more documentation**
Every 'project', 'plan', and 'seed' is expected to have an `__init__.py` file with functions to return standard information.
- `champVersion`: This now returns a tuple of the earliest and latest versions of CHAMP this project is compatible with. This is no longer stored in `champVersion.txt` for `hwy` projects.
- `wranglerVersion`: A new function that returns a tuple of the earliest and latest versions of NetworkWrangler the a project is compatible with
- `desc`: Returns a description of the project. This is no longer stored in `desc.txt` for hwy projects.
- `year`: Returns the opening year of a project, or the model year if the `modelyear` keyword argument is supplied.
- `networks`: A new function that returns a list of the network types that the project applies to. This is used by plans so projects listed in the plan are added to the correct networks.
- `prereqs`: Returns a list of projects which must be applied before this project.
- `coreqs`: Returns a list of projects which should be applied with this project (order doesn't matter though).
- `conflicts`: Returns a list of projects which are known to cause errors when applied with this project.
- `apply`, `applyFiles`, and `applyEdits`: Used the same as before, but we recommend using with a `modelyear` argument to specify the opening year of a project.
**3. Update `build_network.py` to support plans and enforce version requirements and corequisites, prerequisites, and conflicts - and checks for potential errors *in the begining***
- For each 'plan' in each network's project list, the script adds its projects, seeds, and other plans. These are all checked out prior to beginning to build any network.
- For each 'project' in each network's project list (including projects contained within plans), the script checks the project list for prereqs, coreqs, and conflicts, and prompts the user for review and approval before continuing.
- All projects (including projects contained within plans) are cloned and checked out prior to building any network. Only after checking out all projects and checking wranglerVersion, champVersion, prereqs, coreqs, and conflicts are networks built.