Update Spyglass documentation

Updates CLI commands to match current code

Fixes title formatting on README

Pins six back to 1.12.0 for OpenSUSE incompatibility

Updates package dependencies list

Change-Id: Iedf6a438fbe441315dc1124364eea38056090065
This commit is contained in:
Ian H Pittwood 2019-11-14 12:12:03 -06:00 committed by Ian Pittwood
parent 0bed580daa
commit e65715d1a1
5 changed files with 150 additions and 112 deletions

View File

@ -21,6 +21,7 @@ netaddr = "~=0.7.19"
spyglass-plugin-xls = {git = "https://opendev.org/airship/spyglass-plugin-xls.git"} spyglass-plugin-xls = {git = "https://opendev.org/airship/spyglass-plugin-xls.git"}
Jinja2 = "~=2.10.1" Jinja2 = "~=2.10.1"
PyYAML = "==5.1.1" PyYAML = "==5.1.1"
six = "<=1.12.0" # OpenSUSE 15.1 is not compatible with versions greater than 1.12.0
[requires] [requires]
python_version = "3.6" python_version = "3.6"

118
Pipfile.lock generated
View File

@ -1,7 +1,7 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "998682b3c6b9e786e008f8d48847ec5317eb9b8054cc6cee3a91f1d57b7c5bb7" "sha256": "af892a5802170741b6dc348ae2561538ab994416872638c3138360e1cbcf4679"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
@ -18,10 +18,10 @@
"default": { "default": {
"attrs": { "attrs": {
"hashes": [ "hashes": [
"sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
"sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
], ],
"version": "==19.1.0" "version": "==19.3.0"
}, },
"click": { "click": {
"hashes": [ "hashes": [
@ -41,11 +41,11 @@
}, },
"jinja2": { "jinja2": {
"hashes": [ "hashes": [
"sha256:065c4f02ebe7f7cf559e49ee5a95fb800a9e4528727aec6f24402a5374c65013", "sha256:74320bb91f31270f9551d46522e33af46a80c3d619f4a4bf42b3164d30b5911f",
"sha256:14dd6caf1527abb21f08f86c784eac40853ba93edb79552aa1e4b8aef1b61c7b" "sha256:9fe95f19286cfefaa917656583d020be14e7859c6b0252588391e47db34527de"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.10.1" "version": "==2.10.3"
}, },
"jsonschema": { "jsonschema": {
"hashes": [ "hashes": [
@ -98,9 +98,9 @@
}, },
"pyrsistent": { "pyrsistent": {
"hashes": [ "hashes": [
"sha256:34b47fa169d6006b32e99d4b3c4031f155e6e68ebcc107d6454852e8e0ee6533" "sha256:eb6545dbeb1aa69ab1fb4809bfbf5a8705e44d92ef8fc7c2361682a47c46c778"
], ],
"version": "==0.15.4" "version": "==0.15.5"
}, },
"pyyaml": { "pyyaml": {
"hashes": [ "hashes": [
@ -124,11 +124,12 @@
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
"sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
], ],
"index": "pypi",
"version": "==1.12.0" "version": "==1.12.0"
}, },
"spyglass-plugin-xls": { "spyglass-plugin-xls": {
"git": "https://opendev.org/airship/spyglass-plugin-xls.git", "git": "https://opendev.org/airship/spyglass-plugin-xls.git",
"ref": "3b794d05ffd4731e1b7c4f23bc73a3d73f5ba1c1" "ref": "c9d3ad98f745ad8c01bc9b9fb43a06ad63ddd112"
} }
}, },
"develop": { "develop": {
@ -148,10 +149,10 @@
}, },
"attrs": { "attrs": {
"hashes": [ "hashes": [
"sha256:69c0dbf2ed392de1cb5ec704444b08a5ef81680a61cb899dc08127123af36a79", "sha256:08a96c641c3a74e44eb59afb61a24f2cb9f4d7188748e76ba4bb5edfa3cb7d1c",
"sha256:f0b870f674851ecbfbbbd364d6b5cbdff9dcedbc7f3f5e18a6891057f21fe399" "sha256:f7b7ce16570fe9965acd6d30101a28f62fb4a7f9e926b3bbc9b61f8b04247e72"
], ],
"version": "==19.1.0" "version": "==19.3.0"
}, },
"bandit": { "bandit": {
"hashes": [ "hashes": [
@ -200,10 +201,10 @@
}, },
"execnet": { "execnet": {
"hashes": [ "hashes": [
"sha256:0dd40ad3b960aae93bdad7fe1c3f049bbcc8fba47094655a4301f5b33e906816", "sha256:cacb9df31c9680ec5f95553976c4da484d407e85e41c83cb812aa014f0eddc50",
"sha256:3839f3c1e9270926e7b3d9b0a52a57be89c302a3826a2b19c8d6e6c3d2b506d2" "sha256:d4efd397930c46415f62f8a31388d6be4f27a91d7550eb79bc64a756e0056547"
], ],
"version": "==1.7.0" "version": "==1.7.1"
}, },
"filelock": { "filelock": {
"hashes": [ "hashes": [
@ -221,17 +222,17 @@
}, },
"gitdb2": { "gitdb2": {
"hashes": [ "hashes": [
"sha256:83361131a1836661a155172932a13c08bda2db3674e4caa32368aa6eb02f38c2", "sha256:1b6df1433567a51a4a9c1a5a0de977aa351a405cc56d7d35f3388bad1f630350",
"sha256:e3a0141c5f2a3f635c7209d56c496ebe1ad35da82fe4d3ec4aaa36278d70648a" "sha256:96bbb507d765a7f51eb802554a9cfe194a174582f772e0d89f4e87288c288b7b"
], ],
"version": "==2.0.5" "version": "==2.0.6"
}, },
"gitpython": { "gitpython": {
"hashes": [ "hashes": [
"sha256:947cc75913e7b6da108458136607e2ee0e40c20be1e12d4284e7c6c12956c276", "sha256:9c2398ffc3dcb3c40b27324b316f08a4f93ad646d5a6328cafbb871aa79f5e42",
"sha256:d2f4945f8260f6981d724f5957bc076398ada55cb5d25aaee10108bcdc894100" "sha256:c155c6a2653593ccb300462f6ef533583a913e17857cfef8fc617c246b6dc245"
], ],
"version": "==3.0.2" "version": "==3.0.5"
}, },
"hacking": { "hacking": {
"hashes": [ "hashes": [
@ -243,11 +244,11 @@
}, },
"importlib-metadata": { "importlib-metadata": {
"hashes": [ "hashes": [
"sha256:23d3d873e008a513952355379d93cbcab874c58f4f034ff657c7a87422fa64e8", "sha256:aa18d7378b00b40847790e7c27e11673d7fed219354109d0e7b9e5b25dc3ad26",
"sha256:80d2de76188eabfbfcf27e6a37342c2827801e59c4cc14b0371c56fed43820e3" "sha256:d5f18a79777f3aa179c145737780282e27b508fc8fd688cb17c7a813e8bd39af"
], ],
"markers": "python_version < '3.8'", "markers": "python_version < '3.8'",
"version": "==0.19" "version": "==0.23"
}, },
"mccabe": { "mccabe": {
"hashes": [ "hashes": [
@ -265,25 +266,25 @@
}, },
"packaging": { "packaging": {
"hashes": [ "hashes": [
"sha256:a7ac867b97fdc07ee80a8058fe4435ccd274ecc3b0ed61d852d7d53055528cf9", "sha256:28b924174df7a2fa32c1953825ff29c61e2f5e082343165438812f00d3a7fc47",
"sha256:c491ca87294da7cc01902edbe30a5bc6c4c28172b5138ab4e4aa1b9d7bfaeafe" "sha256:d9551545c6d761f3def1677baf08ab2a3ca17c56879e70fecba2fc4dde4ed108"
], ],
"version": "==19.1" "version": "==19.2"
}, },
"pbr": { "pbr": {
"hashes": [ "hashes": [
"sha256:56e52299170b9492513c64be44736d27a512fa7e606f21942160b68ce510b4bc", "sha256:2c8e420cd4ed4cec4e7999ee47409e876af575d4c35a45840d59e8b5f3155ab8",
"sha256:9b321c204a88d8ab5082699469f52cc94c5da45c51f114113d01b3d993c24cdf" "sha256:b32c8ccaac7b1a20c0ce00ce317642e6cf231cf038f9875e0280e28af5bf7ac9"
], ],
"index": "pypi", "index": "pypi",
"version": "==5.4.2" "version": "==5.4.3"
}, },
"pluggy": { "pluggy": {
"hashes": [ "hashes": [
"sha256:0825a152ac059776623854c1543d65a4ad408eb3d33ee114dff91e57ec6ae6fc", "sha256:0db4b7601aae1d35b4a033282da476845aa19185c1e6964b25cf324b5e4ec3e6",
"sha256:b9817417e95936bf75d85d3f8767f7df6cdde751fc40aed3bb3074cbcb77757c" "sha256:fa5fa1622fa6dd5c030e9cad086fa19ef6a0cf6d7a2d12318e10cb49d6d68f34"
], ],
"version": "==0.12.0" "version": "==0.13.0"
}, },
"py": { "py": {
"hashes": [ "hashes": [
@ -308,41 +309,41 @@
}, },
"pyparsing": { "pyparsing": {
"hashes": [ "hashes": [
"sha256:6f98a7b9397e206d78cc01df10131398f1c8b8510a2f4d97d9abd82e1aacdd80", "sha256:20f995ecd72f2a1f4bf6b072b63b22e2eb457836601e76d6e5dfcd75436acc1f",
"sha256:d9338df12903bbf5d65a0e4e87c2161968b10d2e489652bb47001d82a9b028b4" "sha256:4ca62001be367f01bd3e92ecbb79070272a9d4964dce6a48a82ff0b8bc7e683a"
], ],
"version": "==2.4.2" "version": "==2.4.5"
}, },
"pytest": { "pytest": {
"hashes": [ "hashes": [
"sha256:95b1f6db806e5b1b5b443efeb58984c24945508f93a866c1719e1a507a957d7c", "sha256:27abc3fef618a01bebb1f0d6d303d2816a99aa87a5968ebc32fe971be91eb1e6",
"sha256:c3d5020755f70c82eceda3feaf556af9a341334414a8eca521a18f463bcead88" "sha256:58cee9e09242937e136dbb3dab466116ba20d6b7828c7620f23947f37eb4dae4"
], ],
"index": "pypi", "index": "pypi",
"version": "==5.1.1" "version": "==5.2.2"
}, },
"pytest-cov": { "pytest-cov": {
"hashes": [ "hashes": [
"sha256:2b097cde81a302e1047331b48cadacf23577e431b61e9c6f49a1170bbe3d3da6", "sha256:cc6742d8bac45070217169f5f72ceee1e0e55b0221f54bcf24845972d3a47f2b",
"sha256:e00ea4fdde970725482f1f35630d12f074e121a23801aabf2ae154ec6bdd343a" "sha256:cdbdef4f870408ebdbfeb44e63e07eb18bb4619fae852f6e760645fa36172626"
], ],
"index": "pypi", "index": "pypi",
"version": "==2.7.1" "version": "==2.8.1"
}, },
"pytest-forked": { "pytest-forked": {
"hashes": [ "hashes": [
"sha256:5fe33fbd07d7b1302c95310803a5e5726a4ff7f19d5a542b7ce57c76fed8135f", "sha256:1805699ed9c9e60cb7a8179b8d4fa2b8898098e82d229b0825d8095f0f261100",
"sha256:d352aaced2ebd54d42a65825722cb433004b4446ab5d2044851d9cc7a00c9e38" "sha256:1ae25dba8ee2e56fb47311c9638f9e58552691da87e82d25b0ce0e4bf52b7d87"
], ],
"version": "==1.0.2" "version": "==1.1.3"
}, },
"pytest-xdist": { "pytest-xdist": {
"hashes": [ "hashes": [
"sha256:3489d91516d7847db5eaecff7a2e623dba68984835dbe6cedb05ae126c4fb17f", "sha256:5d1b1d4461518a6023d56dab62fb63670d6f7537f23e2708459a557329accf48",
"sha256:501795cb99e567746f30fe78850533d4cd500c93794128e6ab9988e92a17b1f8" "sha256:a8569b027db70112b290911ce2ed732121876632fb3f40b1d39cd2f72f58b147"
], ],
"index": "pypi", "index": "pypi",
"version": "==1.29.0" "version": "==1.30.0"
}, },
"pyyaml": { "pyyaml": {
"hashes": [ "hashes": [
@ -366,6 +367,7 @@
"sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c", "sha256:3350809f0555b11f552448330d0b52d5f24c91a322ea4a15ef22629740f3761c",
"sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73" "sha256:d16a0141ec1a18405cd4ce8b4613101da75da0e9a7aec5bdd4fa804d0e0eba73"
], ],
"index": "pypi",
"version": "==1.12.0" "version": "==1.12.0"
}, },
"smmap2": { "smmap2": {
@ -377,10 +379,10 @@
}, },
"stevedore": { "stevedore": {
"hashes": [ "hashes": [
"sha256:7be098ff53d87f23d798a7ce7ae5c31f094f3deb92ba18059b1aeb1ca9fec0a0", "sha256:01d9f4beecf0fbd070ddb18e5efb10567801ba7ef3ddab0074f54e3cd4e91730",
"sha256:7d1ce610a87d26f53c087da61f06f9b7f7e552efad2a7f6d2322632b5f932ea2" "sha256:e0739f9739a681c7a1fda76a102b65295e96a144ccdb552f2ae03c5f0abe8a14"
], ],
"version": "==1.30.1" "version": "==1.31.0"
}, },
"toml": { "toml": {
"hashes": [ "hashes": [
@ -391,18 +393,18 @@
}, },
"tox": { "tox": {
"hashes": [ "hashes": [
"sha256:dab0b0160dd187b654fc33d690ee1d7bf328bd5b8dc6ef3bb3cc468969c659ba", "sha256:1d1368ac86e8332f79e2bcef9fefe2b077469f08449eadf0183759b34f3b2070",
"sha256:ee35ffce74933a6c6ac10c9a0182e41763140a5a5070e21b114feca56eaccdcd" "sha256:bcfa3e40abc1e9b70607b56adfd976fe7dc8286ad56aab44e3151daca7d2d0d0"
], ],
"index": "pypi", "index": "pypi",
"version": "==3.13.2" "version": "==3.14.1"
}, },
"virtualenv": { "virtualenv": {
"hashes": [ "hashes": [
"sha256:94a6898293d07f84a98add34c4df900f8ec64a570292279f6d91c781d37fd305", "sha256:11cb4608930d5fd3afb545ecf8db83fa50e1f96fc4fca80c94b07d2c83146589",
"sha256:f6fc312c031f2d2344f885de114f1cb029dfcffd26aa6e57d2ee2296935c4e7d" "sha256:d257bb3773e48cac60e475a19b608996c73f4d333b3ba2e4e57d5ac6134e0136"
], ],
"version": "==16.7.4" "version": "==16.7.7"
}, },
"wcwidth": { "wcwidth": {
"hashes": [ "hashes": [

View File

@ -1,6 +1,6 @@
What is Spyglass? What is Spyglass?
---------------- -----------------
Spyglass is the data extractor tool which can interface with Spyglass is the data extractor tool which can interface with
different input data sources to generate site manifest YAML files. different input data sources to generate site manifest YAML files.

View File

@ -32,6 +32,11 @@ CLI Options
Enable debug logging. Enable debug logging.
Excel Plugin
************
Commands available under the excel plugin package.
Generate Intermediary Generate Intermediary
--------------------- ---------------------
@ -39,27 +44,14 @@ Generates an intermediary file from passed excel data.
.. code-block:: bash .. code-block:: bash
./spyglass.sh i -p <plugin_type> -x <engineering_excel_file> \ ./spyglass.sh excel intermediary -x <engineering_excel_file> \
-e <excel_spec> -c <additional_site_config> -s <site_name> -e <excel_spec> \
-c <additional_site_config> \
-s <site_name>
Options Options
^^^^^^^ ^^^^^^^
**-p / --plugin-type** "tugboat" by default.
The plugin to use to open engineering data. Two plugins are available by
default: "tugboat" and "formation". Tugboat can be used for reading Excel data.
Formation can be used to read data from remote sources.
**-f / --formation-target** (Required for "formation" plugin).
Target remote for the formation plugin. Accepts a url and a username and
password to access the url.
::
-f <remote_url> <username> <password>
**-d / --intermediary-dir** (Optional). **-d / --intermediary-dir** (Optional).
Path where the intermediary file will be created. Must be a writeable Path where the intermediary file will be created. Must be a writeable
@ -80,6 +72,14 @@ engineering excel files. Must be a readable file in YAML format.
Path to site specific configuration YAML. Must be a readable file. Path to site specific configuration YAML. Must be a readable file.
**--intermediary-schema** (Optional).
Path to the intermediary schema to be used for validation.
**--no-validation** (Optional).
Skips validation on generated intermediary data.
**-s / --site-name** (Optional). **-s / --site-name** (Optional).
Name of the site for which the intermediary is generated. Name of the site for which the intermediary is generated.
@ -92,32 +92,17 @@ Intermediary data is always generated, but will not be saved unless specified.
.. code-block:: bash .. code-block:: bash
./spyglass.sh m -t <plugin_type> -x <engineering_excel_file> \ ./spyglass.sh excel documents -x <engineering_excel_file> \
-e <excel_spec> -c <additional_site_config> \ -e <excel_spec> -c <additional_site_config> \
-s <site_name> -t <j2_template_directory> -s <site_name> -t <j2_template_directory>
Options Options
^^^^^^^ ^^^^^^^
**-i / --save-intermediary** (Optional). False by default. **-i / --generate-intermediary** (Optional). False by default.
Saves the intermediary file used to make the manifests created by the command. Saves the intermediary file used to make the manifests created by the command.
**-p / --plugin-type** "tugboat" by default.
The plugin to use to open engineering data. Two plugins are available by
default: "tugboat" and "formation". Tugboat can be used for reading Excel data.
Formation can be used to read data from remote sources.
**-f / --formation-target** (Required for "formation" plugin).
Target remote for the formation plugin. Requires a url, a username, and a
password to access the url.
::
-f <remote_url> <username> <password>
**-d / --intermediary-dir** (Optional). **-d / --intermediary-dir** (Optional).
Path where the intermediary file will be created. Must be a writeable Path where the intermediary file will be created. Must be a writeable
@ -138,6 +123,14 @@ engineering excel files. Must be a readable file in YAML format.
Path to site specific configuration YAML. Must be a readable file. Path to site specific configuration YAML. Must be a readable file.
**--intermediary-schema** (Optional).
Path to the intermediary schema to be used for validation.
**--no-validation** (Optional).
Skips validation on generated intermediary data.
**-s / --site-name** (Optional). **-s / --site-name** (Optional).
Name of the site for which the intermediary is generated. Name of the site for which the intermediary is generated.
@ -152,6 +145,9 @@ Must be a readable directory with Jinja2 files using the .j2 extension.
Path where generated manifest files should be written. Must be a writeable Path where generated manifest files should be written. Must be a writeable
directory. directory.
General
*******
Generate Manifests from Intermediary Generate Manifests from Intermediary
------------------------------------ ------------------------------------
@ -180,48 +176,74 @@ Must be a readable directory with Jinja2 files using the .j2 extension.
**-m / --manifest-dir** (Optional). **-m / --manifest-dir** (Optional).
Path where generated manifest files should be written. Must be a writeable directory. Path where generated manifest files should be written. Must be a writeable
directory.
**--force** (Optional).
Forces manifests to be written, regardless of undefined data.
Validate Documents
------------------
Validates pegleg documents against their schema.
.. code-block:: bash
spyglass validate -d <DOCUMENT_PATH> -p <SCHEMA_PATH>
Options
^^^^^^^
**-d / --document-path**
Path to the document(s) to validate.
**-p / --schema-path**
Path to a schema or directory of schema files used to validate documents in
document path.
Examples Examples
======== ========
Running Spyglass with Excel Plugin Running Spyglass with Excel Plugin
---------------------------------- **********************************
.. code-block:: bash .. code-block:: bash
spyglass m -i -p tugboat -x <Excel File> -e <Excel Spec> -c <Site Config> \ spyglass excel documents -i -x <Excel File> -e <Excel Spec> \
-s <Region> -t <j2 template dir> -c <Site Config> -s <Site Name> -t <j2 template dir>
Generating intermediary and manifests Generating intermediary and manifests
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -------------------------------------
.. code-block:: bash .. code-block:: bash
spyglass m -i -p tugboat -x SiteDesignSpec_v0.1.xlsx \ spyglass excel documents -i -x SiteDesignSpec_v0.1.xlsx \
-e excel_spec_upstream.yaml -c site_config.yaml \ -e excel_spec_upstream.yaml -c site_config.yaml \
-s airship-seaworthy -t <j2 template dir> -s airship-seaworthy -t <j2 template dir>
Generating intermediary without manifests Generating intermediary without manifests
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -----------------------------------------
.. code-block:: bash .. code-block:: bash
spyglass i -p tugboat -x SiteDesignSpec_v0.1.xlsx \ spyglass excel intermediary -x SiteDesignSpec_v0.1.xlsx \
-e excel_spec_upstream.yaml -c site_config.yaml \ -e excel_spec_upstream.yaml -c site_config.yaml \
-s airship-seaworthy -s airship-seaworthy
Generating manifests without intermediary Generating manifests without intermediary
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -----------------------------------------
.. code-block:: bash .. code-block:: bash
spyglass m -p tugboat -x SiteDesignSpec_v0.1.xlsx \ spyglass excel documents -x SiteDesignSpec_v0.1.xlsx \
-e excel_spec_upstream.yaml -c site_config.yaml \ -e excel_spec_upstream.yaml -c site_config.yaml \
-s airship-seaworthy --template_dir=<j2 template dir> -s airship-seaworthy -t <j2 template dir>
Generating manifests using intermediary Generating manifests using intermediary
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ***************************************
.. code-block:: bash .. code-block:: bash
@ -229,4 +251,11 @@ Generating manifests using intermediary
Where sample 'excel_spec_upstream.yaml', 'SiteDesignSpec_v0.1.xlsx' Where sample 'excel_spec_upstream.yaml', 'SiteDesignSpec_v0.1.xlsx'
'site_config.yaml' and J2 templates can be found under 'spyglass/examples' 'site_config.yaml' and J2 templates can be found under 'spyglass/examples'
folder. folder.
Validate Documents
******************
.. code-block:: bash
spyglass validate -d <DOCUMENT_PATH> -p <SCHEMA_PATH>

View File

@ -28,30 +28,36 @@ airship-spyglass directory.
sudo apt install -y python3-pip sudo apt install -y python3-pip
sudo apt install -y tox sudo apt install -y tox
2. Set up an environment with tox. 2. Install Pipenv.
.. code-block:: console
pip3 install pipenv
2. Set up an environment with Pipenv
.. code-block:: console .. code-block:: console
tox -e py36 --notest pipenv install
3. Enter the tox environment. 3. Enter the Pipenv environment.
.. code-block:: console .. code-block:: console
source .tox/py36/bin/activate pipenv shell
4. Install spyglass in the tox environment. 4. Install spyglass in the tox environment.
.. code-block:: console .. code-block:: console
pip install -e . pip3 install .
5. Run spyglass on the example files to generate an intermediate document. 5. Run spyglass on the example files to generate an intermediate document.
.. code-block:: console .. code-block:: console
mkdir intermediate mkdir intermediate
spyglass m -s airship-seaworthy -p tugboat -d intermediate \ spyglass excel documents -s airship-seaworthy -d intermediate -i \
--excel-spec spyglass/examples/excel_spec.yaml \ --excel-spec spyglass/examples/excel_spec.yaml \
--excel-file spyglass/examples/SiteDesignSpec_v0.1.xlsx \ --excel-file spyglass/examples/SiteDesignSpec_v0.1.xlsx \
--site-configuration spyglass/examples/site_config.yaml \ --site-configuration spyglass/examples/site_config.yaml \