.. This file is part of Sympathy for Data. .. Copyright (c) 2010-2012 Combine Control Systems AB .. .. Sympathy for Data is free software: you can redistribute it and/or modify .. it under the terms of the GNU General Public License as published by .. the Free Software Foundation, version 3 of the License. .. .. Sympathy for Data is distributed in the hope that it will be useful, .. but WITHOUT ANY WARRANTY; without even the implied warranty of .. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .. GNU General Public License for more details. .. .. You should have received a copy of the GNU General Public License .. along with Sympathy for Data. If not, see . .. _batch: Command line ============ When Sympathy is installed in your python environment you can run ``python -m sympathy`` to access the command line interface. For a comprehensive list of commands and options, see :ref:`appendix_cli`. .. _launch_options: Top-level commands ------------------ Running ``python -m sympathy --help`` will print the top level commands available. ``gui`` run Sympathy in GUI mode ``cli`` run Sympathy in CLI mode ``viewer`` run the viewer for sydata files ``doc`` generate documentation files ``install`` install Sympathy (start menu, file associations) ``uninstall`` uninstall Sympathy (start menu, file associations) ``clear`` cleanup temporary files .. _start_options: Command options --------------- As mentioned there are several top level commands. Most of which have their own options. In order to list the options available for a command, run sympathy adding the desired command and ``--help`` to the command line. For example, ``python -m sympathy gui --help`` shows the available options for running Sympathy in GUI mode. Noteable examples ----------------- Here are a few examples that might be useful, for the full list please use the ``--help`` flag. Run *Sympathy for Data GUI*: .. code-block:: bash python -m sympathy gui Run *Sympathy for Data CLI*, executing a specified syx-workflow-file: .. code-block:: bash python -m sympathy cli filename Build documentation for Sympathy for the platform and standard library. .. code-block:: bash python -m sympathy doc -v --library-dir Shortcuts --------- Depending on how Sympathy was installed, you might also have shortcuts available to some commands. Wheel installer: * sympathy (``python -m sympathy``) * sympathy cli (``python -m sympathy cli``) * sympathy gui (``python -m sympathy gui``) Windows installer: * RunSympathyCLI.exe (``python -m sympathy cli``) * RunSympathyGUI.exe (``python -m sympathy gui``) .. _env_vars: Using environment variables --------------------------- Environment variable expansion is useful in node configurations where the node should behave differently depending on the environment where it is executed. A simple example would be a workflow that always loads a certain file from the current user's home directory. To achieve that you can simply configure a :ref:`Datasource` node to point to *$(HOME)/somefile.txt* and it will point to the file *somefile.txt* in the user's home directory. Apart from using already existing OS environment variables you can also add your own environment variables at three different levels: OS/shell, workflow, and global. Workflow level variables are generally preferred as they do not risk affecting workflows that they should not affect. .. _default_workflow_vars: Default workflow environment variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A few variables are always defined in every workflow. ``$(SY_FLOW_FILEPATH)`` holds the full path to the workflow file, and ``$(SY_FLOW_DIR)`` contains the directory of the workflow file. These variables behave just like normal workflow variables, but they are not stored in a syx-file. Instead they are computed on the fly when they are used. Check properties for a flow to see what values these variables have for that flow. .. _shell_vars: Adding OS/shell environment variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Setting environment variables or shell variables is done differently depending on operating system, version, shell, and so on. As an example let us set the shell variable ``GREETING`` and start Sympathy in a command prompt in Windows:: > set GREETING=Hi! > RunSympathyGUI.exe .. TODO : Write about OSX and linux? Add a :ref:`Hello world Example` node and configure it to display ``$(GREETING)``. Run the node. The output should be *Hi!*. .. _flow_vars: Adding workflow environment variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Workflow level environment variables can be added and removed via the preferences GUI. Right click in your flow and click *Properties* and go to the tab *Environment variables*, where you can add, change, and remove workflow variables. These variables are stored in the workflow file, and will only affect that workflow, and its subflows. A subflow can always override a variable set by one of its parent flows. Adding environment variables to the global file ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Just as workflow level variables, global variables can be added and edited in :ref:`Environment Preferences` but they are stored in the global config file for Sympathy so they affect all workflows. Priority ^^^^^^^^ In case of name conflicts, environment variables are looked up in the following order: 1. OS/shell 2. Workflow (defined in current subflow) 3. Workflow (defined in a parent workflow) 4. Global settings Special variables ^^^^^^^^^^^^^^^^^ **SY_OVERRIDE_TEMP_PATH** Used to override the folder where session data (temporary files) are stored. The temporary path may in turn contain environment variables. .. _credential_env_vars: Passing credentials via environment variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Credentials can be passed to `gui` and `cli` via environment variables. To so, use `--environment-credentials` `PREFIX`. They need to follow a specific data format to be used. 1. The variable name must start with PREFIX. After matching, the prefix is not considered to be part of the name, the remaining part of the name should be a parse-able to a list of strings using json. There must be a credential type that can be constructed from the strings. 2. The variable value should be parse-able to a dictionary in the same format as is returned by `BasicNode.require_credentials`. Here are 3 examples for the different credential types. 1. Secret credential :Name: `SFD["secret",""]` :Value: `{"secret":""}` 2. Login credential :Name: `SFD["login",""]` :Value: `{"username":"","password":""}` 3. Azure credential :Name: `SFD["azure","",""]` :Value: `{"token":"","expires_on":}` Note that expires_on is an integer. While it can be tricky to enter such variables from the shell, it should be possible to do for the intended usescase which is to supply the application with sensitive information when running in a headless environment.