├── tests ├── nodes │ ├── __init__.py │ ├── data │ │ ├── filepattern │ │ │ └── tree1 │ │ │ │ ├── fafoofen │ │ │ │ ├── rabarco │ │ │ │ ├── qirfoobarken │ │ │ │ ├── dirfooken │ │ │ │ ├── barbr │ │ │ │ ├── fefoofe │ │ │ │ ├── bafffbro │ │ │ │ │ └── foofile │ │ │ │ └── bagogogbr │ │ │ │ │ └── babr │ │ │ │ └── dirgorfool │ │ │ │ ├── akfoolen │ │ │ │ └── baqwebr │ │ │ │ └── foobar │ │ ├── test_pwint.db │ │ ├── test_splitint.db │ │ ├── test_basic_stuff.db │ │ ├── test_filepattern.db │ │ ├── test_waitforint.db │ │ └── mock_ffmpeg │ │ │ └── ffprobe │ ├── test_mantra.py │ ├── test_husk.py │ └── test_split_waiter_integration.py ├── data │ ├── fake_bin │ │ ├── python │ │ └── python.exe │ ├── test_badndeser.db │ ├── test_errorinv.db │ ├── test_resources.db │ ├── test_instadoneinv.db │ ├── test_resources1.db │ ├── test_invocmessaging.db │ ├── test_taskgroup_del.db │ └── test_attribserialization.db ├── config_data │ └── orig │ │ ├── foofar │ │ └── config.toml │ │ ├── foobar │ │ └── config.toml │ │ └── boofar │ │ ├── config.toml │ │ └── config.d │ │ ├── some.toml │ │ └── body.toml └── environment_resolver_data │ ├── scheduler │ └── config.toml │ ├── worker │ └── config.toml │ └── standard_environment_resolver │ └── config.toml ├── src ├── lifeblood │ ├── __init__.py │ ├── net_messages │ │ ├── __init__.py │ │ ├── impl │ │ │ ├── __init__.py │ │ │ └── tcp_message_receiver_factory.py │ │ ├── logging.py │ │ ├── defaults.py │ │ ├── enums.py │ │ ├── connections.py │ │ ├── message_handler.py │ │ ├── address_routing.py │ │ ├── interfaces.py │ │ └── address.py │ ├── scheduler │ │ └── __init__.py │ ├── worker_runtime_pythonpath │ │ └── __init__.py │ ├── stock_nodes │ │ ├── alicevision │ │ │ └── python │ │ │ │ └── 3 │ │ │ │ └── lifeblood_alicevision_modules │ │ │ │ ├── __init__.py │ │ │ │ └── base_node.py │ │ ├── houdini │ │ │ └── python │ │ │ │ └── 3 │ │ │ │ └── lifeblood_stock_houdini_helpers │ │ │ │ └── __init__.py │ │ ├── redshift │ │ │ └── meta.toml │ │ ├── matrixclient │ │ │ └── data │ │ │ │ └── matrixclient.pyz │ │ ├── telegram_client │ │ │ └── data │ │ │ │ └── telegram_client.pyz │ │ ├── webserver │ │ │ └── data │ │ │ │ ├── result_ready.html │ │ │ │ ├── result_not_ready.html │ │ │ │ └── index.html │ │ └── houdini_distributed_sim │ │ │ └── data │ │ │ └── killer.py │ ├── node_ui_callback_receiver_base.py │ ├── expression_locals_provider_base.py │ ├── base.py │ ├── os_based_cheats.py │ ├── matrix_helper.py │ ├── worker_metadata.py │ ├── defaults.py │ ├── node_visualization_classes.py │ ├── nodegraph_holder_base.py │ ├── buffer_serializable.py │ ├── attribute_serialization.py │ ├── core_nodes │ │ ├── kill.py │ │ └── null.py │ ├── rwlock.py │ ├── worker_pool_message_processor_client.py │ ├── main_workerpool.py │ └── timestamp.py ├── lifeblood_cli │ └── __init__.py ├── lifeblood_testing_common │ └── __init__.py ├── lifeblood_viewer │ ├── models │ │ └── __init__.py │ ├── widgets │ │ ├── __init__.py │ │ └── dialogs │ │ │ ├── __init__.py │ │ │ └── message_dialog.py │ ├── code_editor │ │ └── __init__.py │ ├── nodeeditor_overlays │ │ └── __init__.py │ ├── nodeeditor_windows │ │ ├── __init__.py │ │ ├── ui_parameters_window.py │ │ ├── ui_longop_window.py │ │ └── ui_undo_window.py │ ├── task_group_actions_impl │ │ ├── __init__.py │ │ └── noop_action.py │ ├── graphics_items │ │ ├── pretty_items │ │ │ ├── __init__.py │ │ │ ├── fancy_items │ │ │ │ └── __init__.py │ │ │ ├── node_decorator_base.py │ │ │ ├── decorated_node.py │ │ │ ├── node_connection_snap_point.py │ │ │ └── drawable_node_with_snap_points.py │ │ ├── __init__.py │ │ ├── utils.py │ │ ├── network_item.py │ │ └── qextended_graphics_item.py │ ├── task_group_action_performers │ │ ├── __init__.py │ │ └── noop_action_performer.py │ ├── __init__.py │ ├── menu_entry_base.py │ ├── graphics_scene_viewing_widget.py │ ├── scene_item_factory_base.py │ └── db_misc.py └── lifeblood_client │ ├── __init__.py │ ├── attribute_serialization.py │ └── nethelpers.py ├── pkg_lifeblood ├── README.md ├── src │ └── lifeblood ├── build_pypi.sh ├── MANIFEST.in ├── upload_pypi.sh └── pyproject.toml ├── pkg_lifeblood_viewer ├── README.md ├── src │ └── lifeblood_viewer ├── build_pypi.sh ├── upload_pypi.sh ├── pyproject.toml └── setup.cfg ├── stock_tools ├── matrix_client │ ├── urllib3 │ │ ├── contrib │ │ │ ├── __init__.py │ │ │ ├── _securetransport │ │ │ │ └── __init__.py │ │ │ └── _appengine_environ.py │ │ ├── packages │ │ │ ├── backports │ │ │ │ └── __init__.py │ │ │ ├── __init__.py │ │ │ └── ssl_match_hostname │ │ │ │ └── __init__.py │ │ ├── _version.py │ │ └── util │ │ │ └── queue.py │ ├── matrix_client │ │ ├── crypto │ │ │ └── __init__.py │ │ ├── __init__.py │ │ └── checks.py │ ├── compile.sh │ └── requests │ │ ├── __version__.py │ │ ├── certs.py │ │ ├── hooks.py │ │ └── packages.py └── telegram_client │ └── compile.sh ├── rcc ├── dark │ ├── transparent.svg │ ├── branch_open-on.svg │ ├── branch_closed.svg │ ├── branch_open.svg │ ├── stylesheet-vline.svg │ ├── branch_closed-on.svg │ ├── undock.svg │ ├── stylesheet-branch-end.svg │ ├── hsepartoolbar.svg │ ├── stylesheet-branch-end-open.svg │ ├── stylesheet-branch-more.svg │ ├── stylesheet-branch-end-closed.svg │ ├── sizegrip.svg │ ├── hmovetoolbar.svg │ ├── checkbox_unchecked.svg │ ├── checkbox_unchecked_disabled.svg │ ├── checkbox_checked.svg │ ├── checkbox_checked_disabled.svg │ ├── radio_unchecked.svg │ ├── undock-hover.svg │ ├── radio_unchecked_disabled.svg │ ├── radio_checked.svg │ ├── radio_checked_disabled.svg │ ├── right_arrow.svg │ ├── right_arrow_disabled.svg │ ├── checkbox_indeterminate.svg │ ├── close.svg │ ├── checkbox_indeterminate_disabled.svg │ ├── close-hover.svg │ ├── close-pressed.svg │ ├── up_arrow.svg │ ├── down_arrow.svg │ ├── up_arrow-hover.svg │ ├── up_arrow_disabled.svg │ ├── left_arrow.svg │ ├── down_arrow-hover.svg │ ├── down_arrow_disabled.svg │ ├── left_arrow_disabled.svg │ ├── vsepartoolbars.svg │ └── vmovetoolbar.svg ├── light │ ├── transparent.svg │ ├── branch_closed.svg │ ├── branch_open-on.svg │ ├── branch_open.svg │ ├── stylesheet-vline.svg │ ├── branch_closed-on.svg │ ├── undock.svg │ ├── hsepartoolbar.svg │ ├── stylesheet-branch-end.svg │ ├── stylesheet-branch-more.svg │ ├── stylesheet-branch-end-closed.svg │ ├── stylesheet-branch-end-open.svg │ ├── sizegrip.svg │ ├── hmovetoolbar.svg │ ├── checkbox_unchecked-hover.svg │ ├── checkbox_unchecked_disabled.svg │ ├── checkbox_checked.svg │ ├── checkbox_checked-hover.svg │ ├── checkbox_checked_disabled.svg │ ├── radio_unchecked-hover.svg │ ├── undock-hover.svg │ ├── radio_unchecked_disabled.svg │ ├── radio_checked.svg │ ├── radio_checked-hover.svg │ ├── radio_checked_disabled.svg │ ├── right_arrow_disabled.svg │ ├── checkbox_indeterminate.svg │ ├── checkbox_indeterminate-hover.svg │ ├── close.svg │ ├── checkbox_indeterminate_disabled.svg │ ├── close-hover.svg │ ├── close-pressed.svg │ ├── up_arrow.svg │ ├── up_arrow-hover.svg │ ├── down_arrow.svg │ ├── left_arrow.svg │ ├── right_arrow.svg │ ├── up_arrow_disabled.svg │ ├── down_arrow-hover.svg │ ├── down_arrow_disabled.svg │ ├── left_arrow_disabled.svg │ ├── vsepartoolbars.svg │ └── vmovetoolbar.svg └── build.sh ├── dcc_plugins_workspace ├── houdini │ ├── otls │ │ ├── Driver-lifeblood_submitter-1.0.0.hda │ │ │ ├── houdini.hdalibrary │ │ │ ├── lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0 │ │ │ │ ├── Contents.dir │ │ │ │ │ ├── Sections.list │ │ │ │ │ ├── Contents.createtimes │ │ │ │ │ └── Contents.modtimes │ │ │ │ ├── InternalFileOptions │ │ │ │ ├── Sections.list │ │ │ │ ├── TypePropertiesOptions │ │ │ │ ├── CreateScript │ │ │ │ ├── OnCreated │ │ │ │ ├── Tools.shelf │ │ │ │ └── ExtraFileOptions │ │ │ ├── Sections.list │ │ │ └── INDEX__SECTION │ │ ├── Driver-lifeblood_cache_submitter-1.0.hda │ │ │ ├── houdini.hdalibrary │ │ │ ├── lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0 │ │ │ │ ├── Help │ │ │ │ ├── Contents.dir │ │ │ │ │ ├── Sections.list │ │ │ │ │ ├── Contents.createtimes │ │ │ │ │ ├── Contents.modtimes │ │ │ │ │ ├── .OPdummydefs │ │ │ │ │ └── .OPfallbacks │ │ │ │ ├── InternalFileOptions │ │ │ │ ├── Sections.list │ │ │ │ ├── TypePropertiesOptions │ │ │ │ ├── CreateScript │ │ │ │ ├── ExtraFileOptions │ │ │ │ └── Tools.shelf │ │ │ ├── Sections.list │ │ │ └── INDEX__SECTION │ │ ├── Driver-lifeblood_karma_submitter-1.0.hda │ │ │ ├── houdini.hdalibrary │ │ │ ├── lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0 │ │ │ │ ├── Help │ │ │ │ ├── Contents.dir │ │ │ │ │ ├── Sections.list │ │ │ │ │ ├── Contents.createtimes │ │ │ │ │ ├── Contents.modtimes │ │ │ │ │ ├── .OPdummydefs │ │ │ │ │ └── .OPfallbacks │ │ │ │ ├── InternalFileOptions │ │ │ │ ├── Sections.list │ │ │ │ ├── TypePropertiesOptions │ │ │ │ ├── CreateScript │ │ │ │ ├── ExtraFileOptions │ │ │ │ ├── Tools.shelf │ │ │ │ └── PythonModule │ │ │ ├── Sections.list │ │ │ └── INDEX__SECTION │ │ ├── Driver-lifeblood_mantra_submitter-1.0.hda │ │ │ ├── houdini.hdalibrary │ │ │ ├── lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0 │ │ │ │ ├── Help │ │ │ │ ├── Contents.dir │ │ │ │ │ ├── Sections.list │ │ │ │ │ ├── Contents.modtimes │ │ │ │ │ ├── Contents.createtimes │ │ │ │ │ ├── .OPdummydefs │ │ │ │ │ └── .OPfallbacks │ │ │ │ ├── InternalFileOptions │ │ │ │ ├── Sections.list │ │ │ │ ├── TypePropertiesOptions │ │ │ │ ├── CreateScript │ │ │ │ ├── ExtraFileOptions │ │ │ │ ├── PythonModule │ │ │ │ └── Tools.shelf │ │ │ ├── Sections.list │ │ │ └── INDEX__SECTION │ │ ├── Driver-lifeblood_redshift_submitter-1.0.hda │ │ │ ├── houdini.hdalibrary │ │ │ ├── lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0 │ │ │ │ ├── Help │ │ │ │ ├── Contents.dir │ │ │ │ │ ├── Sections.list │ │ │ │ │ ├── Contents.modtimes │ │ │ │ │ └── Contents.createtimes │ │ │ │ ├── InternalFileOptions │ │ │ │ ├── Sections.list │ │ │ │ ├── TypePropertiesOptions │ │ │ │ ├── CreateScript │ │ │ │ ├── PreFirstCreate │ │ │ │ ├── ExtraFileOptions │ │ │ │ ├── PythonModule │ │ │ │ └── Tools.shelf │ │ │ ├── Sections.list │ │ │ └── INDEX__SECTION │ │ ├── Driver-lifeblood_wedge_submitter-1.0.hda │ │ │ ├── houdini.hdalibrary │ │ │ ├── lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0 │ │ │ │ ├── Help │ │ │ │ ├── Contents.dir │ │ │ │ │ ├── Sections.list │ │ │ │ │ ├── Contents.createtimes │ │ │ │ │ ├── Contents.modtimes │ │ │ │ │ ├── .OPdummydefs │ │ │ │ │ └── .OPfallbacks │ │ │ │ ├── InternalFileOptions │ │ │ │ ├── Sections.list │ │ │ │ ├── TypePropertiesOptions │ │ │ │ ├── CreateScript │ │ │ │ ├── ExtraFileOptions │ │ │ │ └── Tools.shelf │ │ │ ├── Sections.list │ │ │ └── INDEX__SECTION │ │ └── Driver-lifeblood_distributed_flip_submitter-1.0.hda │ │ │ ├── houdini.hdalibrary │ │ │ ├── lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0 │ │ │ ├── Help │ │ │ ├── Contents.dir │ │ │ │ ├── Sections.list │ │ │ │ ├── Contents.modtimes │ │ │ │ ├── Contents.createtimes │ │ │ │ ├── .OPdummydefs │ │ │ │ └── .OPfallbacks │ │ │ ├── InternalFileOptions │ │ │ ├── Sections.list │ │ │ ├── TypePropertiesOptions │ │ │ ├── ExtraFileOptions │ │ │ ├── CreateScript │ │ │ └── Tools.shelf │ │ │ ├── Sections.list │ │ │ └── INDEX__SECTION │ ├── presets │ │ └── Driver │ │ │ └── lifeblood-lifeblood_submitter-1.0.0.idx │ └── README.md ├── blender │ ├── README.md │ └── lifeblood_addon.zip ├── build.sh ├── build_blender.sh └── build_houdini.sh ├── icon └── lifeblood_wip1.png ├── docs ├── source │ ├── images │ │ ├── overview.png │ │ ├── viewer_overview.png │ │ ├── viewer_overview.xcf │ │ ├── installation │ │ │ ├── tray.png │ │ │ ├── autolisten.png │ │ │ ├── launch_tab.png │ │ │ ├── lbm_as_is.png │ │ │ ├── overview.png │ │ │ ├── savescene.png │ │ │ ├── see_dead.png │ │ │ ├── takes_time.png │ │ │ ├── tray_menu.png │ │ │ ├── wizard_dcc.png │ │ │ ├── wizard_gpu.png │ │ │ ├── nodes_create.png │ │ │ ├── redshift_cmd.png │ │ │ ├── render_done.png │ │ │ ├── start_viewer.png │ │ │ ├── wizard_intro.png │ │ │ ├── wizard_succ.png │ │ │ ├── wizard_summ.png │ │ │ ├── workers_work.png │ │ │ ├── create_task_btn.png │ │ │ ├── lbm_as_is_empty.png │ │ │ ├── press_download.png │ │ │ ├── task_group_list.png │ │ │ ├── tray_autostart.png │ │ │ ├── uncheck_python.png │ │ │ ├── viewer_overview.png │ │ │ ├── wizard_button.png │ │ │ ├── wizard_houdini.png │ │ │ ├── wizard_redshift.png │ │ │ ├── wizard_scratch.png │ │ │ ├── after_submission.png │ │ │ ├── render_done_clean.png │ │ │ ├── autostart_components.png │ │ │ ├── launch_tab_launched.png │ │ │ ├── redshift_submitter.png │ │ │ ├── wizard_houdini_tools.png │ │ │ └── redshift_preset_overview.png │ │ ├── manager_overview.png │ │ ├── viewer_group_list.png │ │ ├── viewer_nodeeditor.png │ │ ├── viewer_worker_list.png │ │ ├── viewer_nodeeditor_newnode.png │ │ ├── viewer_nodeeditor_parameters.png │ │ ├── viewer_nodeeditor_tasklist.png │ │ ├── viewer_nodeeditor_connecspawn.png │ │ └── viewer_nodeeditor_connecsplit.png │ ├── news │ │ ├── post_01 │ │ │ └── params.png │ │ └── index.rst │ ├── components │ │ ├── viewer │ │ │ ├── config.rst │ │ │ └── viewer_api.rst │ │ ├── worker │ │ │ ├── index.rst │ │ │ └── worker_api.rst │ │ ├── index.rst │ │ ├── scheduler │ │ │ └── scheduler_api.rst │ │ └── logging.rst │ ├── nodes │ │ ├── core │ │ │ ├── null.rst │ │ │ ├── mod_attrib.rst │ │ │ ├── set_attrib.rst │ │ │ ├── switch.rst │ │ │ ├── rename_attrib.rst │ │ │ ├── delete_attrib.rst │ │ │ ├── killer.rst │ │ │ ├── spawn_children.rst │ │ │ ├── split_waiter.rst │ │ │ ├── environment_resolver_arguments_setter.rst │ │ │ └── wedge.rst │ │ └── stock │ │ │ └── houdini │ │ │ ├── mantra.rst │ │ │ └── common_devices.rst │ ├── api.rst │ ├── _static │ │ └── css │ │ │ └── custom.css │ ├── requirements.txt │ ├── nodes.rst │ ├── index.rst │ └── concepts.rst ├── Makefile └── make.bat ├── entry.py ├── .gitignore ├── .github ├── dependabot.yml └── workflows │ ├── sphinx.yml │ └── lint.yml ├── lifeblood.nix ├── flake.nix ├── flake.lock ├── lifeblood-viewer.nix └── install └── README.md /tests/nodes/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/data/fake_bin/python: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood_cli/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/data/fake_bin/python.exe: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pkg_lifeblood/README.md: -------------------------------------------------------------------------------- 1 | ../README.md -------------------------------------------------------------------------------- /src/lifeblood/net_messages/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood/scheduler/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pkg_lifeblood_viewer/README.md: -------------------------------------------------------------------------------- 1 | ../README.md -------------------------------------------------------------------------------- /src/lifeblood/net_messages/impl/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood_testing_common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/widgets/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/config_data/orig/foofar/config.toml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/fafoofen: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/rabarco: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pkg_lifeblood/src/lifeblood: -------------------------------------------------------------------------------- 1 | ../../src/lifeblood -------------------------------------------------------------------------------- /src/lifeblood_viewer/code_editor/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/widgets/dialogs/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/qirfoobarken: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood/worker_runtime_pythonpath/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/nodeeditor_overlays/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/nodeeditor_windows/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/urllib3/contrib/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/dirfooken/barbr: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/dirfooken/fefoofe: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rcc/dark/transparent.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/task_group_actions_impl/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/matrix_client/crypto/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/dirgorfool/akfoolen: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /rcc/light/transparent.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/pretty_items/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/task_group_action_performers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/dirfooken/bafffbro/foofile: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/dirfooken/bagogogbr/babr: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/nodes/data/filepattern/tree1/dirgorfool/baqwebr/foobar: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pkg_lifeblood_viewer/src/lifeblood_viewer: -------------------------------------------------------------------------------- 1 | ../../src/lifeblood_viewer -------------------------------------------------------------------------------- /stock_tools/matrix_client/urllib3/packages/backports/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood/net_messages/logging.py: -------------------------------------------------------------------------------- 1 | from ..logging import get_logger -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/pretty_items/fancy_items/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/urllib3/contrib/_securetransport/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/config_data/orig/foobar/config.toml: -------------------------------------------------------------------------------- 1 | [crap] 2 | ass="woof" 3 | bob=12.3 -------------------------------------------------------------------------------- /pkg_lifeblood/build_pypi.sh: -------------------------------------------------------------------------------- 1 | rm dist/lifeblood* 2 | rm -rf build 3 | python3 -m build -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/alicevision/python/3/lifeblood_alicevision_modules/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/houdini/python/3/lifeblood_stock_houdini_helpers/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/redshift/meta.toml: -------------------------------------------------------------------------------- 1 | dependencies = [ 2 | "houdini", 3 | ] 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/houdini.hdalibrary: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pkg_lifeblood_viewer/build_pypi.sh: -------------------------------------------------------------------------------- 1 | rm dist/lifeblood* 2 | rm -rf build 3 | python3 -m build -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/houdini.hdalibrary: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/houdini.hdalibrary: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/houdini.hdalibrary: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/houdini.hdalibrary: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/houdini.hdalibrary: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/config_data/orig/boofar/config.toml: -------------------------------------------------------------------------------- 1 | [main] 2 | one = 3.44 3 | two = "beep" 4 | three = 123 -------------------------------------------------------------------------------- /icon/lifeblood_wip1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/icon/lifeblood_wip1.png -------------------------------------------------------------------------------- /pkg_lifeblood/MANIFEST.in: -------------------------------------------------------------------------------- 1 | global-exclude src/lifeblood/stock_nodes/matrixclient/data/matrixcommander -------------------------------------------------------------------------------- /src/lifeblood/net_messages/defaults.py: -------------------------------------------------------------------------------- 1 | 2 | default_stream_timeout: float = 90 # TODO: ENSURE RO 3 | -------------------------------------------------------------------------------- /tests/config_data/orig/boofar/config.d/some.toml: -------------------------------------------------------------------------------- 1 | [main] 2 | one = 13.44 3 | 4 | [some] 5 | wow="cat" -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/houdini.hdalibrary: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /tests/config_data/orig/boofar/config.d/body.toml: -------------------------------------------------------------------------------- 1 | [main] 2 | three = 456 3 | 4 | [body] 5 | wee = 'so much' -------------------------------------------------------------------------------- /rcc/dark/branch_open-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /tests/data/test_badndeser.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/data/test_badndeser.db -------------------------------------------------------------------------------- /tests/data/test_errorinv.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/data/test_errorinv.db -------------------------------------------------------------------------------- /tests/data/test_resources.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/data/test_resources.db -------------------------------------------------------------------------------- /docs/source/images/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/overview.png -------------------------------------------------------------------------------- /rcc/dark/branch_closed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/dark/branch_open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/branch_closed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/branch_open-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/urllib3/_version.py: -------------------------------------------------------------------------------- 1 | # This file is protected via CODEOWNERS 2 | __version__ = "1.26.7" 3 | -------------------------------------------------------------------------------- /tests/data/test_instadoneinv.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/data/test_instadoneinv.db -------------------------------------------------------------------------------- /tests/data/test_resources1.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/data/test_resources1.db -------------------------------------------------------------------------------- /tests/nodes/data/test_pwint.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/nodes/data/test_pwint.db -------------------------------------------------------------------------------- /rcc/light/branch_open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /tests/data/test_invocmessaging.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/data/test_invocmessaging.db -------------------------------------------------------------------------------- /tests/data/test_taskgroup_del.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/data/test_taskgroup_del.db -------------------------------------------------------------------------------- /tests/nodes/data/test_splitint.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/nodes/data/test_splitint.db -------------------------------------------------------------------------------- /dcc_plugins_workspace/blender/README.md: -------------------------------------------------------------------------------- 1 | # Blender plugin 2 | 3 | * check latest `tools` releases for a zipped blender addon 4 | -------------------------------------------------------------------------------- /docs/source/news/post_01/params.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/news/post_01/params.png -------------------------------------------------------------------------------- /tests/nodes/data/test_basic_stuff.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/nodes/data/test_basic_stuff.db -------------------------------------------------------------------------------- /tests/nodes/data/test_filepattern.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/nodes/data/test_filepattern.db -------------------------------------------------------------------------------- /tests/nodes/data/test_waitforint.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/nodes/data/test_waitforint.db -------------------------------------------------------------------------------- /docs/source/images/viewer_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_overview.png -------------------------------------------------------------------------------- /docs/source/images/viewer_overview.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_overview.xcf -------------------------------------------------------------------------------- /rcc/dark/stylesheet-vline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/stylesheet-vline.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /tests/data/test_attribserialization.db: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/tests/data/test_attribserialization.db -------------------------------------------------------------------------------- /dcc_plugins_workspace/build.sh: -------------------------------------------------------------------------------- 1 | echo "building everything" 2 | 3 | ./build_houdini.sh 4 | ./build_blender.sh 5 | 6 | echo "building done" -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Help: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Help: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Help: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Help: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/source/images/installation/tray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/tray.png -------------------------------------------------------------------------------- /docs/source/images/manager_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/manager_overview.png -------------------------------------------------------------------------------- /docs/source/images/viewer_group_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_group_list.png -------------------------------------------------------------------------------- /docs/source/images/viewer_nodeeditor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_nodeeditor.png -------------------------------------------------------------------------------- /docs/source/images/viewer_worker_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_worker_list.png -------------------------------------------------------------------------------- /pkg_lifeblood/upload_pypi.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | ../venv/bin/python -m twine upload --repository $2 -u __token__ -p $(<../$1) dist/* -------------------------------------------------------------------------------- /rcc/dark/branch_closed-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/branch_closed-on.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/Help: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /pkg_lifeblood_viewer/upload_pypi.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | ../venv/bin/python -m twine upload --repository $2 -u __token__ -p $(<../$1) dist/* -------------------------------------------------------------------------------- /docs/source/images/installation/autolisten.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/autolisten.png -------------------------------------------------------------------------------- /docs/source/images/installation/launch_tab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/launch_tab.png -------------------------------------------------------------------------------- /docs/source/images/installation/lbm_as_is.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/lbm_as_is.png -------------------------------------------------------------------------------- /docs/source/images/installation/overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/overview.png -------------------------------------------------------------------------------- /docs/source/images/installation/savescene.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/savescene.png -------------------------------------------------------------------------------- /docs/source/images/installation/see_dead.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/see_dead.png -------------------------------------------------------------------------------- /docs/source/images/installation/takes_time.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/takes_time.png -------------------------------------------------------------------------------- /docs/source/images/installation/tray_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/tray_menu.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_dcc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_dcc.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_gpu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_gpu.png -------------------------------------------------------------------------------- /docs/source/images/installation/nodes_create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/nodes_create.png -------------------------------------------------------------------------------- /docs/source/images/installation/redshift_cmd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/redshift_cmd.png -------------------------------------------------------------------------------- /docs/source/images/installation/render_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/render_done.png -------------------------------------------------------------------------------- /docs/source/images/installation/start_viewer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/start_viewer.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_intro.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_intro.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_succ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_succ.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_summ.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_summ.png -------------------------------------------------------------------------------- /docs/source/images/installation/workers_work.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/workers_work.png -------------------------------------------------------------------------------- /docs/source/images/viewer_nodeeditor_newnode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_nodeeditor_newnode.png -------------------------------------------------------------------------------- /pkg_lifeblood/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = [ 3 | "setuptools>=42", 4 | "wheel" 5 | ] 6 | build-backend = "setuptools.build_meta" -------------------------------------------------------------------------------- /rcc/build.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | pushd $(dirname $0) 4 | 5 | pyside2-rcc theme.rcc -o ../src/lifeblood_viewer/breeze_resources.py 6 | 7 | popd -------------------------------------------------------------------------------- /dcc_plugins_workspace/blender/lifeblood_addon.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/dcc_plugins_workspace/blender/lifeblood_addon.zip -------------------------------------------------------------------------------- /docs/source/components/viewer/config.rst: -------------------------------------------------------------------------------- 1 | .. _viewer configs: 2 | 3 | ==================== 4 | Viewer Configuration 5 | ==================== 6 | 7 | TODO: do -------------------------------------------------------------------------------- /docs/source/images/installation/create_task_btn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/create_task_btn.png -------------------------------------------------------------------------------- /docs/source/images/installation/lbm_as_is_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/lbm_as_is_empty.png -------------------------------------------------------------------------------- /docs/source/images/installation/press_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/press_download.png -------------------------------------------------------------------------------- /docs/source/images/installation/task_group_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/task_group_list.png -------------------------------------------------------------------------------- /docs/source/images/installation/tray_autostart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/tray_autostart.png -------------------------------------------------------------------------------- /docs/source/images/installation/uncheck_python.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/uncheck_python.png -------------------------------------------------------------------------------- /docs/source/images/installation/viewer_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/viewer_overview.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_button.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_houdini.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_houdini.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_redshift.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_redshift.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_scratch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_scratch.png -------------------------------------------------------------------------------- /docs/source/images/viewer_nodeeditor_parameters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_nodeeditor_parameters.png -------------------------------------------------------------------------------- /docs/source/images/viewer_nodeeditor_tasklist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_nodeeditor_tasklist.png -------------------------------------------------------------------------------- /docs/source/news/index.rst: -------------------------------------------------------------------------------- 1 | .. _news: 2 | 3 | ==== 4 | News 5 | ==== 6 | 7 | .. toctree:: 8 | :caption: News 9 | 10 | post_01/index 11 | -------------------------------------------------------------------------------- /pkg_lifeblood_viewer/pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = [ 3 | "setuptools>=42", 4 | "wheel" 5 | ] 6 | build-backend = "setuptools.build_meta" -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Help: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/source/images/installation/after_submission.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/after_submission.png -------------------------------------------------------------------------------- /docs/source/images/installation/render_done_clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/render_done_clean.png -------------------------------------------------------------------------------- /docs/source/images/viewer_nodeeditor_connecspawn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_nodeeditor_connecspawn.png -------------------------------------------------------------------------------- /docs/source/images/viewer_nodeeditor_connecsplit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/viewer_nodeeditor_connecsplit.png -------------------------------------------------------------------------------- /docs/source/images/installation/autostart_components.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/autostart_components.png -------------------------------------------------------------------------------- /docs/source/images/installation/launch_tab_launched.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/launch_tab_launched.png -------------------------------------------------------------------------------- /docs/source/images/installation/redshift_submitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/redshift_submitter.png -------------------------------------------------------------------------------- /docs/source/images/installation/wizard_houdini_tools.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/wizard_houdini_tools.png -------------------------------------------------------------------------------- /docs/source/images/installation/redshift_preset_overview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/docs/source/images/installation/redshift_preset_overview.png -------------------------------------------------------------------------------- /rcc/dark/undock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/undock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/matrixclient/data/matrixclient.pyz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/src/lifeblood/stock_nodes/matrixclient/data/matrixclient.pyz -------------------------------------------------------------------------------- /src/lifeblood_viewer/__init__.py: -------------------------------------------------------------------------------- 1 | default_config = ''' 2 | [viewer] 3 | listen_to_broadcast = true 4 | 5 | [imgui] 6 | # ini_file = "path/to/some/special/imgui.ini" 7 | ''' 8 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/urllib3/packages/__init__.py: -------------------------------------------------------------------------------- 1 | from __future__ import absolute_import 2 | 3 | from . import ssl_match_hostname 4 | 5 | __all__ = ("ssl_match_hostname",) 6 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/Contents.dir/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | Contents.mime Contents.mime 3 | -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/telegram_client/data/telegram_client.pyz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/src/lifeblood/stock_nodes/telegram_client/data/telegram_client.pyz -------------------------------------------------------------------------------- /src/lifeblood/node_ui_callback_receiver_base.py: -------------------------------------------------------------------------------- 1 | class NodeUiCallbackReceiverBase: 2 | def _ui_changed(self, definition_changed: bool = False): 3 | raise NotImplementedError() 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Contents.dir/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | Contents.mime Contents.mime 3 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Contents.dir/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | Contents.mime Contents.mime 3 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/Contents.dir/Contents.createtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot.def":872838840 3 | } 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/Contents.dir/Contents.modtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot.def":1650326098 3 | } 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Contents.dir/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | Contents.mime Contents.mime 3 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Contents.dir/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | Contents.mime Contents.mime 3 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/Contents.dir/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | Contents.mime Contents.mime 3 | -------------------------------------------------------------------------------- /docs/source/components/worker/index.rst: -------------------------------------------------------------------------------- 1 | ====== 2 | Worker 3 | ====== 4 | 5 | .. toctree:: 6 | :caption: Worker 7 | :maxdepth: 2 8 | 9 | worker 10 | environment_resolver 11 | -------------------------------------------------------------------------------- /src/lifeblood/expression_locals_provider_base.py: -------------------------------------------------------------------------------- 1 | from typing import Any, Dict 2 | 3 | 4 | class ExpressionLocalsProviderBase: 5 | def locals(self) -> Dict[str, Any]: 6 | raise NotImplementedError() 7 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Contents.dir/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | Contents.mime Contents.mime 3 | -------------------------------------------------------------------------------- /rcc/dark/stylesheet-branch-end.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/presets/Driver/lifeblood-lifeblood_submitter-1.0.0.idx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/dcc_plugins_workspace/houdini/presets/Driver/lifeblood-lifeblood_submitter-1.0.0.idx -------------------------------------------------------------------------------- /rcc/dark/hsepartoolbar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/dark/stylesheet-branch-end-open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/dark/stylesheet-branch-more.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/hsepartoolbar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/stylesheet-branch-end.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/stylesheet-branch-more.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/source/components/index.rst: -------------------------------------------------------------------------------- 1 | ========== 2 | Components 3 | ========== 4 | 5 | .. toctree:: 6 | :caption: Components 7 | :maxdepth: 1 8 | 9 | viewer/index 10 | scheduler/index 11 | worker/index 12 | -------------------------------------------------------------------------------- /entry.py: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | "exec" "`dirname \`readlink -f $0\``/venv/bin/python" "`readlink -f $0`" "$@" 3 | import sys 4 | from lifeblood import launch 5 | 6 | if __name__ == '__main__': 7 | sys.exit(launch.main(sys.argv[1:])) 8 | -------------------------------------------------------------------------------- /rcc/dark/stylesheet-branch-end-closed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/stylesheet-branch-end-closed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/stylesheet-branch-end-open.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /docs/source/components/worker/worker_api.rst: -------------------------------------------------------------------------------- 1 | .. _worker_api: 2 | 3 | ==================== 4 | Worker API Reference 5 | ==================== 6 | 7 | .. automodule:: lifeblood.worker 8 | :members: 9 | :undoc-members: 10 | -------------------------------------------------------------------------------- /docs/source/nodes/core/null.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/null: 2 | 3 | ==== 4 | Null 5 | ==== 6 | 7 | Does nothing. 8 | 9 | Parameters 10 | ========== 11 | 12 | None 13 | 14 | Attributes Set 15 | ============== 16 | 17 | None 18 | -------------------------------------------------------------------------------- /docs/source/components/viewer/viewer_api.rst: -------------------------------------------------------------------------------- 1 | .. _viewer_api: 2 | 3 | ==================== 4 | Viewer API Reference 5 | ==================== 6 | 7 | .. automodule:: lifeblood_viewer 8 | :members: 9 | :undoc-members: 10 | 11 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Contents.dir/Contents.createtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730822841, 3 | "hdaroot.def":1730823159 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Contents.dir/Contents.modtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730823327, 3 | "hdaroot.def":1730826241 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Contents.dir/Contents.createtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730817200, 3 | "hdaroot.def":1730815331 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Contents.dir/Contents.modtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730819987, 3 | "hdaroot.def":1730819995 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Contents.dir/Contents.modtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730830199, 3 | "hdaroot.def":1730830128 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Contents.dir/Contents.createtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730830147, 3 | "hdaroot.def":1730830225 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Contents.dir/Contents.modtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730830415, 3 | "hdaroot.def":1730830234 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Contents.dir/Contents.createtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730829848, 3 | "hdaroot.def":1730829942 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/Contents.dir/Contents.modtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730830199, 3 | "hdaroot.def":1730830128 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/Contents.dir/Contents.createtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730829848, 3 | "hdaroot.def":1730829942 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | INDEX__SECTION INDEX_SECTION 3 | houdini.hdalibrary houdini.hdalibrary 4 | lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0 lifeblood::Driver/lifeblood_submitter::1.0.0 5 | -------------------------------------------------------------------------------- /docs/source/components/scheduler/scheduler_api.rst: -------------------------------------------------------------------------------- 1 | .. _scheduler_api: 2 | 3 | ======================= 4 | Scheduler API Reference 5 | ======================= 6 | 7 | .. automodule:: lifeblood.scheduler 8 | :members: 9 | :undoc-members: 10 | 11 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Contents.dir/Contents.modtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730830589, 3 | "hdaroot.def":1730831605 4 | } 5 | -------------------------------------------------------------------------------- /rcc/dark/sizegrip.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/sizegrip.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | INDEX__SECTION INDEX_SECTION 3 | houdini.hdalibrary houdini.hdalibrary 4 | lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0 lifeblood::Driver/lifeblood_cache_submitter::1.0 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Contents.dir/Contents.createtimes: -------------------------------------------------------------------------------- 1 | { 2 | "hdaroot/lifeblood_submitter.def":1730830362, 3 | "hdaroot.def":1730830431 4 | } 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | INDEX__SECTION INDEX_SECTION 3 | houdini.hdalibrary houdini.hdalibrary 4 | lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0 lifeblood::Driver/lifeblood_karma_submitter::1.0 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | INDEX__SECTION INDEX_SECTION 3 | houdini.hdalibrary houdini.hdalibrary 4 | lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0 lifeblood::Driver/lifeblood_mantra_submitter::1.0 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | INDEX__SECTION INDEX_SECTION 3 | houdini.hdalibrary houdini.hdalibrary 4 | lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0 lifeblood::Driver/lifeblood_wedge_submitter::1.0 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | INDEX__SECTION INDEX_SECTION 3 | houdini.hdalibrary houdini.hdalibrary 4 | lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0 lifeblood::Driver/lifeblood_redshift_submitter::1.0 5 | -------------------------------------------------------------------------------- /src/lifeblood/base.py: -------------------------------------------------------------------------------- 1 | from typing import Optional, Set 2 | 3 | class TypeMetadata: 4 | @property 5 | def label(self) -> Optional[str]: 6 | raise NotImplementedError() 7 | 8 | @property 9 | def tags(self) -> Set[str]: 10 | raise NotImplementedError() -------------------------------------------------------------------------------- /docs/source/api.rst: -------------------------------------------------------------------------------- 1 | .. _api: 2 | 3 | ============= 4 | API Reference 5 | ============= 6 | 7 | .. toctree:: 8 | :maxdepth: 2 9 | :caption: Contents 10 | 11 | components/scheduler/scheduler_api 12 | components/worker/worker_api 13 | components/viewer/viewer_api 14 | -------------------------------------------------------------------------------- /rcc/dark/hmovetoolbar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/hmovetoolbar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/lifeblood/net_messages/enums.py: -------------------------------------------------------------------------------- 1 | from enum import Enum 2 | 3 | 4 | class MessageType(Enum): 5 | @classmethod 6 | def message_type_size(cls) -> int: 7 | return 2 8 | 9 | DEFAULT_MESSAGE = b'\0\0' 10 | SYSTEM_PING = b'\0\1' 11 | DELIVERY_ERROR = b'\1\0' 12 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/InternalFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "nodeconntype":{ 3 | "type":"bool", 4 | "value":false 5 | }, 6 | "nodeparmtype":{ 7 | "type":"bool", 8 | "value":false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /rcc/dark/checkbox_unchecked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/InternalFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "nodeconntype":{ 3 | "type":"bool", 4 | "value":false 5 | }, 6 | "nodeparmtype":{ 7 | "type":"bool", 8 | "value":false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | INDEX__SECTION INDEX_SECTION 3 | houdini.hdalibrary houdini.hdalibrary 4 | lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0 lifeblood::Driver/lifeblood_distributed_flip_submitter::1.0 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/InternalFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "nodeconntype":{ 3 | "type":"bool", 4 | "value":false 5 | }, 6 | "nodeparmtype":{ 7 | "type":"bool", 8 | "value":false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/InternalFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "nodeconntype":{ 3 | "type":"bool", 4 | "value":false 5 | }, 6 | "nodeparmtype":{ 7 | "type":"bool", 8 | "value":false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/InternalFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "nodeconntype":{ 3 | "type":"bool", 4 | "value":false 5 | }, 6 | "nodeparmtype":{ 7 | "type":"bool", 8 | "value":false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /rcc/dark/checkbox_unchecked_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/checkbox_unchecked-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/checkbox_unchecked_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/InternalFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "nodeconntype":{ 3 | "type":"bool", 4 | "value":false 5 | }, 6 | "nodeparmtype":{ 7 | "type":"bool", 8 | "value":false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | zip -r matrixclient.pyz __main__.py matrix_client/ requests/ urllib3/ canonicaljson/ 3 | mv matrixclient.pyz ../../src/lifeblood/stock_nodes/matrixclient/data/. 4 | cp install_matrix_commander.py ../../src/lifeblood/stock_nodes/matrixclient/data/. 5 | printf "all done\n" 6 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/InternalFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "nodeconntype":{ 3 | "type":"bool", 4 | "value":false 5 | }, 6 | "nodeparmtype":{ 7 | "type":"bool", 8 | "value":false 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/webserver/data/result_ready.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 | back 8 |

Done

9 |
10 |
11 | {result} 12 |
13 | 14 | -------------------------------------------------------------------------------- /docs/source/_static/css/custom.css: -------------------------------------------------------------------------------- 1 | .bd-main .bd-content .bd-article-container { 2 | max-width: 100rem; 3 | } 4 | 5 | .bd-page-width { 6 | max-width: 105rem; 7 | } 8 | 9 | .bd-sidebar-primary { 10 | width: 18%; 11 | } 12 | 13 | html[data-theme=dark] img:not(.only-dark):not(.dark-light) { 14 | filter:brightness(.975) contrast(1.05); 15 | } -------------------------------------------------------------------------------- /src/lifeblood/os_based_cheats.py: -------------------------------------------------------------------------------- 1 | import platform 2 | 3 | 4 | if platform.system().lower() == 'windows': 5 | import socket 6 | # now before you go all crazy about the line below - we ONLY use SO_REUSEPORT in broadcasting 7 | # otherwise it shouldn't break anything.... 8 | # but yeah.... 9 | socket.SO_REUSEPORT = socket.SO_REUSEADDR 10 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/menu_entry_base.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | from typing import Callable, Tuple, Union 4 | 5 | 6 | @dataclass 7 | class MainMenuLocation: 8 | location: Tuple[str, ...] 9 | label: Union[str, Callable[[], str]] 10 | 11 | 12 | @dataclass 13 | class MainMenuEntry(MainMenuLocation): 14 | action: Callable 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Contents.dir/.OPdummydefs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Contents.dir/.OPdummydefs -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Contents.dir/.OPdummydefs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Contents.dir/.OPdummydefs -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Contents.dir/.OPdummydefs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Contents.dir/.OPdummydefs -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Contents.dir/.OPdummydefs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Contents.dir/.OPdummydefs -------------------------------------------------------------------------------- /rcc/dark/checkbox_checked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /rcc/light/checkbox_checked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/source/nodes/core/mod_attrib.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/mod_attrib: 2 | 3 | ================= 4 | Modify Attributes 5 | ================= 6 | 7 | Modify incoming task's attributes 8 | 9 | Parameters 10 | ========== 11 | 12 | :Name: 13 | Name of the attribute to modify 14 | 15 | Attributes Set 16 | ============== 17 | 18 | Attributes of given names will be modified 19 | -------------------------------------------------------------------------------- /rcc/dark/checkbox_checked_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /rcc/dark/radio_unchecked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/dark/undock-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /rcc/light/checkbox_checked-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /rcc/light/checkbox_checked_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /rcc/light/radio_unchecked-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/undock-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/lifeblood/matrix_helper.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import subprocess 3 | from pathlib import Path 4 | 5 | 6 | def main(): 7 | path_to_stuff = Path(__package__)/'stock_nodes'/'matrixclient'/'data'/'matrixclient.pyz' 8 | sys.exit(subprocess.Popen([sys.executable, path_to_stuff, *sys.argv[1:]]).wait()) 9 | 10 | 11 | if __name__ == '__main__': 12 | sys.exit(main() or 0) 13 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/__init__.py: -------------------------------------------------------------------------------- 1 | # export inner classes 2 | from .graphics_items import Node, Task, NodeConnection 3 | from .graphics_scene_container import GraphicsSceneWithNodesAndTasks, GraphicsSceneBase 4 | from .network_item import NetworkItem, NetworkItemWithUI 5 | from .network_item_watchers import NetworkItemWatcher, WatchableNetworkItem, WatchableNetworkItemProxy 6 | -------------------------------------------------------------------------------- /rcc/dark/radio_unchecked_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /rcc/light/radio_unchecked_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /tests/nodes/test_mantra.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from lifeblood_testing_common.nodes_common import TestCaseBase 3 | 4 | 5 | # TODO: tests are currently very shallow !! 6 | 7 | class MantraTestCase(TestCaseBase): 8 | async def test_mantra_node(self): 9 | await self._helper_test_render_node('mantra', 'ifd', 'mantra', Path(__file__).parent / 'data' / 'mock_houdini') 10 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Contents.dir/.OPfallbacks: -------------------------------------------------------------------------------- 1 | lifeblood::Driver/lifeblood_submitter::1.0.0 /home/xapkohheh/git/dev_fhs/projects_py/lifeblood/dcc_plugins/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda 2 | lifeblood::Driver/lifeblood_submitter::1.0.0 otls/Driver-lifeblood_submitter-1.0.0.hda 3 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Contents.dir/.OPfallbacks: -------------------------------------------------------------------------------- 1 | lifeblood::Driver/lifeblood_submitter::1.0.0 /home/xapkohheh/git/dev_fhs/projects_py/lifeblood/dcc_plugins/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda 2 | lifeblood::Driver/lifeblood_submitter::1.0.0 otls/Driver-lifeblood_submitter-1.0.0.hda 3 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Contents.dir/.OPfallbacks: -------------------------------------------------------------------------------- 1 | lifeblood::Driver/lifeblood_submitter::1.0.0 /home/xapkohheh/git/dev_fhs/projects_py/lifeblood/dcc_plugins/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda 2 | lifeblood::Driver/lifeblood_submitter::1.0.0 otls/Driver-lifeblood_submitter-1.0.0.hda 3 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Contents.dir/.OPfallbacks: -------------------------------------------------------------------------------- 1 | lifeblood::Driver/lifeblood_submitter::1.0.0 /home/xapkohheh/git/dev_fhs/projects_py/lifeblood/dcc_plugins/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda 2 | lifeblood::Driver/lifeblood_submitter::1.0.0 otls/Driver-lifeblood_submitter-1.0.0.hda 3 | -------------------------------------------------------------------------------- /docs/source/nodes/core/set_attrib.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/set_attrib: 2 | 3 | ============== 4 | Set Attributes 5 | ============== 6 | 7 | Set attributes on task 8 | 9 | Parameters 10 | ========== 11 | 12 | :Name: 13 | Name of the attribute to set 14 | :Val: 15 | Value to set for the attribute 16 | 17 | Attributes Set 18 | ============== 19 | 20 | Specified attributes will be created 21 | -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/houdini_distributed_sim/data/killer.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import lifeblood_connection 3 | 4 | 5 | def main(invocation_iid: int, addressee: str, timeout: float = 90): 6 | lifeblood_connection.message_to_invocation_send(invocation_iid, addressee, b'stop', timeout) 7 | 8 | 9 | if __name__ == '__main__': 10 | main(int(sys.argv[1]), sys.argv[2], float(sys.argv[3])) 11 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Contents.dir/.OPdummydefs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/permahorse/lifeblood/HEAD/dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Contents.dir/.OPdummydefs -------------------------------------------------------------------------------- /src/lifeblood/worker_metadata.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | 3 | 4 | @dataclass 5 | class WorkerMetadata: 6 | """ 7 | This class represents data that is not important for scheduler-worker work, 8 | but may be useful for UI, search and other extra operations 9 | Some metadata is optional, some, like hostname, is always expected to be present 10 | """ 11 | hostname: str 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | venv 2 | venv-doc 3 | venv_docs 4 | .idea 5 | .run 6 | *.db* 7 | !/tests/nodes/data/**.db 8 | !/tests/data/**.db 9 | **.pyc 10 | **/__pycache__ 11 | stock_tools/telegram_client/urllib3 12 | imgui.ini 13 | build 14 | dist 15 | pkg_*/build 16 | pkg_*/dist 17 | **/otls/backup 18 | **/houdini/houdini.project 19 | dcc_plugins/houdini/otls/Driver-taskflow* 20 | pipkey* 21 | 22 | *.log 23 | tests/**/logs/ 24 | -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/webserver/data/result_not_ready.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |
ur key is {key}, waiting... 8 |
page will auto-refresh every 10 seconds until result is ready 9 |
10 | 11 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | 8 | - package-ecosystem: "pip" 9 | directory: "/pkg_lifeblood" 10 | schedule: 11 | interval: "weekly" 12 | 13 | - package-ecosystem: "pip" 14 | directory: "/pkg_lifeblood_viewer" 15 | schedule: 16 | interval: "weekly" 17 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Contents.dir/.OPfallbacks: -------------------------------------------------------------------------------- 1 | lifeblood::Driver/lifeblood_submitter::1.0.0 /home/xapkohheh/git/dev_fhs/projects_py/lifeblood/dcc_plugins/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda 2 | lifeblood::Driver/lifeblood_submitter::1.0.0 otls/Driver-lifeblood_submitter-1.0.0.hda 3 | -------------------------------------------------------------------------------- /docs/source/nodes/core/switch.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/switch: 2 | 3 | ====== 4 | Switch 5 | ====== 6 | 7 | Output incoming task through a given output. 8 | 9 | Parameters 10 | ========== 11 | 12 | :Number Of Outputs: 13 | Number of outputs for this node 14 | :Select Output: 15 | Incoming task will be outputted through the output with the given number. 16 | 17 | Attributes Set 18 | ============== 19 | 20 | None 21 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/task_group_actions_impl/noop_action.py: -------------------------------------------------------------------------------- 1 | from lifeblood_viewer.task_group_actions import TaskGroupViewerAction 2 | from dataclasses import dataclass 3 | 4 | 5 | @dataclass 6 | class TaskGroupViewerNoopAction(TaskGroupViewerAction): 7 | @classmethod 8 | def from_data_dict(cls, action_data: dict, *, original_user_data: bytes) -> "TaskGroupViewerAction": 9 | return TaskGroupViewerAction('noop') 10 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | DialogScript DialogScript 3 | CreateScript CreateScript 4 | InternalFileOptions InternalFileOptions 5 | Contents.gz Contents.gz 6 | TypePropertiesOptions TypePropertiesOptions 7 | Help Help 8 | Tools.shelf Tools.shelf 9 | PythonModule PythonModule 10 | ExtraFileOptions ExtraFileOptions 11 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | DialogScript DialogScript 3 | CreateScript CreateScript 4 | InternalFileOptions InternalFileOptions 5 | Contents.gz Contents.gz 6 | TypePropertiesOptions TypePropertiesOptions 7 | Help Help 8 | Tools.shelf Tools.shelf 9 | PythonModule PythonModule 10 | ExtraFileOptions ExtraFileOptions 11 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | DialogScript DialogScript 3 | CreateScript CreateScript 4 | InternalFileOptions InternalFileOptions 5 | Contents.gz Contents.gz 6 | TypePropertiesOptions TypePropertiesOptions 7 | Help Help 8 | Tools.shelf Tools.shelf 9 | PythonModule PythonModule 10 | ExtraFileOptions ExtraFileOptions 11 | -------------------------------------------------------------------------------- /tests/environment_resolver_data/scheduler/config.toml: -------------------------------------------------------------------------------- 1 | 2 | [core] 3 | ## you can uncomment stuff below to specify some static values 4 | ## 5 | # server_ip = "192.168.0.2" 6 | # server_port = 7979 7 | # ui_ip = "192.168.0.2" 8 | # ui_port = 7989 9 | 10 | [scheduler] 11 | ## you may specify here some db to load 12 | ## ore use --db-path cmd argument to override whatever is in the config 13 | # db_path = "~/some_special_place/main.db" 14 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | DialogScript DialogScript 3 | CreateScript CreateScript 4 | InternalFileOptions InternalFileOptions 5 | Contents.gz Contents.gz 6 | TypePropertiesOptions TypePropertiesOptions 7 | Help Help 8 | Tools.shelf Tools.shelf 9 | PythonModule PythonModule 10 | ExtraFileOptions ExtraFileOptions 11 | -------------------------------------------------------------------------------- /tests/nodes/data/mock_ffmpeg/ffprobe: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import sys 3 | import os 4 | import re 5 | 6 | 7 | def main(): 8 | """ 9 | TODO: add some arg validation, it's too blunt now 10 | """ 11 | filename = sys.argv[-1] 12 | 13 | print('\n'.join( 14 | re.match(r'.*?(\d+(?:-\d+)?)\..+', os.path.basename(filename)).group(1).split('-') 15 | )) 16 | 17 | 18 | if __name__ == '__main__': 19 | main() 20 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/utils.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtCore import QPointF, QTimer 2 | 3 | 4 | def call_later(callable, *args, **kwargs): #TODO: this repeats here and in nodeeditor 5 | if len(args) == 0 and len(kwargs) == 0: 6 | QTimer.singleShot(0, callable) 7 | else: 8 | QTimer.singleShot(0, lambda: callable(*args, **kwargs)) 9 | 10 | 11 | def length2(v: QPointF): 12 | return QPointF.dotProduct(v, v) 13 | 14 | -------------------------------------------------------------------------------- /src/lifeblood_client/__init__.py: -------------------------------------------------------------------------------- 1 | # this is a helper module that is SUPPOSED to be separate from lifeblood 2 | # this module should be used by DCCs and other scripts that want to communicate with lifeblood 3 | # but this module does NOT use lifeblood module directly, even if that means code duplication 4 | # the point is to have some small light module without any dependencies 5 | # that can be imported to a variety of DCCs and not cause any conflicts etc etc 6 | -------------------------------------------------------------------------------- /rcc/dark/radio_checked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | DialogScript DialogScript 3 | CreateScript CreateScript 4 | InternalFileOptions InternalFileOptions 5 | Contents.gz Contents.gz 6 | TypePropertiesOptions TypePropertiesOptions 7 | Help Help 8 | Tools.shelf Tools.shelf 9 | PythonModule PythonModule 10 | ExtraFileOptions ExtraFileOptions 11 | -------------------------------------------------------------------------------- /docs/source/requirements.txt: -------------------------------------------------------------------------------- 1 | Sphinx==5.* 2 | pydata-sphinx-theme==0.* 3 | sphinxcontrib-applehelp==1.* 4 | sphinxcontrib-devhelp==1.* 5 | sphinxcontrib-htmlhelp==2.* 6 | sphinxcontrib-jsmath==1.* 7 | sphinxcontrib-qthelp==1.* 8 | sphinxcontrib-serializinghtml==1.* 9 | aiofiles~=0.8 10 | aiosqlite~=0.17 11 | aiorwlock~=1.3 12 | lz4~=4.0 13 | psutil~=5.8 14 | pywin32==304; platform_system=='Windows' 15 | semantic-version~=2.10 16 | toml~=0.10 17 | watchdog~=2.1 18 | -------------------------------------------------------------------------------- /rcc/light/radio_checked.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /docs/source/nodes/core/rename_attrib.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/rename_attrib: 2 | 3 | ================= 4 | Rename Attributes 5 | ================= 6 | 7 | Rename task attributes 8 | 9 | Parameters 10 | ========== 11 | 12 | :From: 13 | rename attribute from this name 14 | :To: 15 | to this name 16 | 17 | If attribute named **from** is not found - nothing will be done 18 | 19 | Attributes Set 20 | ============== 21 | 22 | Attributes renamed, nothing is set 23 | -------------------------------------------------------------------------------- /rcc/dark/radio_checked_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /rcc/light/radio_checked-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /rcc/light/radio_checked_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/task_group_action_performers/noop_action_performer.py: -------------------------------------------------------------------------------- 1 | from lifeblood_viewer.task_group_actions import TaskGroupViewerActionPerformerBase, TaskGroupViewerAction 2 | 3 | 4 | class NoopViewerActionPerformer(TaskGroupViewerActionPerformerBase): 5 | def is_action_supported(self, action: TaskGroupViewerAction) -> bool: 6 | return action.type == 'noop' 7 | 8 | def perform_action(self, action: TaskGroupViewerAction): 9 | return 10 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | DialogScript DialogScript 3 | CreateScript CreateScript 4 | TypePropertiesOptions TypePropertiesOptions 5 | Help Help 6 | Tools.shelf Tools.shelf 7 | InternalFileOptions InternalFileOptions 8 | Contents.gz Contents.gz 9 | IconSVG IconSVG 10 | OnCreated OnCreated 11 | PythonModule PythonModule 12 | ExtraFileOptions ExtraFileOptions 13 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/network_item.py: -------------------------------------------------------------------------------- 1 | 2 | class NetworkItem: 3 | def __init__(self, id): 4 | super().__init__() 5 | self.__id = id 6 | 7 | def get_id(self): 8 | return self.__id 9 | 10 | 11 | class NetworkItemWithUI(NetworkItem): 12 | def draw_imgui_elements(self, drawing_widget): 13 | """ 14 | this should only be called from active opengl context! 15 | :return: 16 | """ 17 | pass 18 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/Sections.list: -------------------------------------------------------------------------------- 1 | "" 2 | DialogScript DialogScript 3 | CreateScript CreateScript 4 | InternalFileOptions InternalFileOptions 5 | Contents.gz Contents.gz 6 | TypePropertiesOptions TypePropertiesOptions 7 | Help Help 8 | Tools.shelf Tools.shelf 9 | PythonModule PythonModule 10 | PreFirstCreate PreFirstCreate 11 | ExtraFileOptions ExtraFileOptions 12 | -------------------------------------------------------------------------------- /rcc/dark/right_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/lifeblood/defaults.py: -------------------------------------------------------------------------------- 1 | 2 | def scheduler_port() -> int: 3 | return 1384 4 | 5 | 6 | def scheduler_message_port() -> int: 7 | return 1386 8 | 9 | 10 | def ui_port() -> int: 11 | return 1385 12 | 13 | 14 | def broadcast_port() -> int: 15 | return 34305 16 | 17 | 18 | def worker_pool_port() -> int: 19 | return 1387 20 | 21 | 22 | def worker_start_port() -> int: 23 | return 6969 24 | 25 | 26 | def message_proxy_port() -> int: 27 | return 22182 28 | -------------------------------------------------------------------------------- /tests/environment_resolver_data/worker/config.toml: -------------------------------------------------------------------------------- 1 | 2 | [worker] 3 | listen_to_broadcast = true 4 | 5 | [default_env_wrapper] 6 | ## here you can uncomment lines below to specify your own default environment wrapper and default arguments 7 | ## this will only be used by invocation jobs that have NO environment wrappers specified 8 | # name = TrivialEnvironmentResolver 9 | # arguments = [ "project_name", "or", "config_name", "idunno", "maybe rez packages requirements?", [1,4,11] ] 10 | -------------------------------------------------------------------------------- /rcc/dark/right_arrow_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/right_arrow_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/TypePropertiesOptions: -------------------------------------------------------------------------------- 1 | CheckExternal := 1; 2 | ContentsCompressionType := 1; 3 | ForbidOutsideParms := 1; 4 | GzipContents := 1; 5 | LockContents := 1; 6 | MakeDefault := 1; 7 | ParmsFromVfl := 0; 8 | PrefixDroppedParmLabel := 0; 9 | PrefixDroppedParmName := 0; 10 | SaveCachedCode := 0; 11 | SaveIcon := 1; 12 | SaveSpareParms := 0; 13 | UnlockOnCreate := 0; 14 | UseDSParms := 1; 15 | -------------------------------------------------------------------------------- /docs/source/nodes/core/delete_attrib.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/delete_attrib: 2 | 3 | ================= 4 | Delete Attributes 5 | ================= 6 | 7 | Deletes attributes from the Task 8 | 9 | Parameters 10 | ========== 11 | 12 | :Delete: 13 | Name of the attribute to delete 14 | 15 | This does not currently support patterns, only exact names 16 | 17 | If attribute does not exist - nothing is be done 18 | 19 | Attributes Set 20 | ============== 21 | 22 | Given attributes are removed 23 | -------------------------------------------------------------------------------- /tests/environment_resolver_data/standard_environment_resolver/config.toml: -------------------------------------------------------------------------------- 1 | [packages.houdini."18.5.666"] 2 | priority = 60 3 | env.PATH.prepend=[ 4 | "/path/to/hfs/bin", 5 | "/some/other/path/dunno" 6 | ] 7 | env.PATH.append=[ 8 | "/whatever/you/want/to/append" 9 | ] 10 | env.PYTHONPATH.prepend="/dunno/smth" 11 | 12 | 13 | [packages.assmouth."2.3.4-beta"] 14 | env.PATH.prepend = "bananus" 15 | env.PATH.append = "who/are/you" 16 | env.WooF='yEs' 17 | -------------------------------------------------------------------------------- /.github/workflows/sphinx.yml: -------------------------------------------------------------------------------- 1 | name: "Documentation" 2 | 3 | on: 4 | push: 5 | branches: [ dev, master ] 6 | paths: [ docs/** ] 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - name: Sphinx Pages 14 | uses: pedohorse/sphinx-pages@master 15 | with: 16 | github_token: ${{ secrets.GITHUB_TOKEN }} 17 | create_readme: true 18 | source_dir: docs/source 19 | install_extensions: true 20 | create_nojekyll: true 21 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/TypePropertiesOptions: -------------------------------------------------------------------------------- 1 | CheckExternal := 1; 2 | ContentsCompressionType := 1; 3 | ForbidOutsideParms := 1; 4 | GzipContents := 1; 5 | LockContents := 1; 6 | MakeDefault := 1; 7 | ParmsFromVfl := 0; 8 | PrefixDroppedParmLabel := 0; 9 | PrefixDroppedParmName := 0; 10 | SaveCachedCode := 0; 11 | SaveIcon := 1; 12 | SaveSpareParms := 0; 13 | UnlockOnCreate := 0; 14 | UseDSParms := 1; 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/TypePropertiesOptions: -------------------------------------------------------------------------------- 1 | CheckExternal := 1; 2 | ContentsCompressionType := 1; 3 | ForbidOutsideParms := 1; 4 | GzipContents := 1; 5 | LockContents := 1; 6 | MakeDefault := 1; 7 | ParmsFromVfl := 0; 8 | PrefixDroppedParmLabel := 0; 9 | PrefixDroppedParmName := 0; 10 | SaveCachedCode := 0; 11 | SaveIcon := 1; 12 | SaveSpareParms := 0; 13 | UnlockOnCreate := 0; 14 | UseDSParms := 1; 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/TypePropertiesOptions: -------------------------------------------------------------------------------- 1 | CheckExternal := 1; 2 | ContentsCompressionType := 1; 3 | ForbidOutsideParms := 1; 4 | GzipContents := 1; 5 | LockContents := 1; 6 | MakeDefault := 1; 7 | ParmsFromVfl := 0; 8 | PrefixDroppedParmLabel := 0; 9 | PrefixDroppedParmName := 0; 10 | SaveCachedCode := 0; 11 | SaveIcon := 1; 12 | SaveSpareParms := 0; 13 | UnlockOnCreate := 0; 14 | UseDSParms := 1; 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/TypePropertiesOptions: -------------------------------------------------------------------------------- 1 | CheckExternal := 1; 2 | ContentsCompressionType := 1; 3 | ForbidOutsideParms := 1; 4 | GzipContents := 1; 5 | LockContents := 1; 6 | MakeDefault := 1; 7 | ParmsFromVfl := 0; 8 | PrefixDroppedParmLabel := 0; 9 | PrefixDroppedParmName := 0; 10 | SaveCachedCode := 0; 11 | SaveIcon := 1; 12 | SaveSpareParms := 0; 13 | UnlockOnCreate := 0; 14 | UseDSParms := 1; 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/TypePropertiesOptions: -------------------------------------------------------------------------------- 1 | CheckExternal := 1; 2 | ContentsCompressionType := 1; 3 | ForbidOutsideParms := 1; 4 | GzipContents := 1; 5 | LockContents := 1; 6 | MakeDefault := 1; 7 | ParmsFromVfl := 0; 8 | PrefixDroppedParmLabel := 0; 9 | PrefixDroppedParmName := 0; 10 | SaveCachedCode := 0; 11 | SaveIcon := 1; 12 | SaveSpareParms := 0; 13 | UnlockOnCreate := 0; 14 | UseDSParms := 1; 15 | -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/alicevision/python/3/lifeblood_alicevision_modules/base_node.py: -------------------------------------------------------------------------------- 1 | from lifeblood.node_plugin_base import BaseNodeWithTaskRequirements 2 | import shutil 3 | from pathlib import Path 4 | 5 | 6 | class AlicevisionBaseNode(BaseNodeWithTaskRequirements): 7 | def __init__(self, name): 8 | super(AlicevisionBaseNode, self).__init__(name) 9 | ui = self.get_ui() 10 | with ui.initializing_interface_lock(): 11 | ui.color_scheme().set_main_color(0.15, 0.15, 0.6) 12 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/TypePropertiesOptions: -------------------------------------------------------------------------------- 1 | CheckExternal := 1; 2 | ContentsCompressionType := 1; 3 | ForbidOutsideParms := 1; 4 | GzipContents := 1; 5 | LockContents := 1; 6 | MakeDefault := 1; 7 | ParmsFromVfl := 0; 8 | PrefixDroppedParmLabel := 0; 9 | PrefixDroppedParmName := 0; 10 | SaveCachedCode := 0; 11 | SaveIcon := 1; 12 | SaveSpareParms := 0; 13 | UnlockOnCreate := 0; 14 | UseDSParms := 1; 15 | -------------------------------------------------------------------------------- /rcc/dark/checkbox_indeterminate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rcc/light/checkbox_indeterminate.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/CreateScript: -------------------------------------------------------------------------------- 1 | # Automatically generated script 2 | \set noalias = 1 3 | # 4 | # Creation script for lifeblood::lifeblood_submitter::1.0.0 operator 5 | # 6 | 7 | if ( "$arg1" == "" ) then 8 | echo This script is intended as a creation script 9 | exit 10 | endif 11 | 12 | # Node $arg1 (lifeblood::Driver/lifeblood_submitter::1.0.0) 13 | opexprlanguage -s hscript $arg1 14 | opuserdata -n '___Version___' -v '' $arg1 15 | -------------------------------------------------------------------------------- /rcc/dark/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/checkbox_indeterminate-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rcc/light/close.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/requests/__version__.py: -------------------------------------------------------------------------------- 1 | # .-. .-. .-. . . .-. .-. .-. .-. 2 | # |( |- |.| | | |- `-. | `-. 3 | # ' ' `-' `-`.`-' `-' `-' ' `-' 4 | 5 | __title__ = 'requests' 6 | __description__ = 'Python HTTP for Humans.' 7 | __url__ = 'https://requests.readthedocs.io' 8 | __version__ = '2.26.0' 9 | __build__ = 0x022600 10 | __author__ = 'Kenneth Reitz' 11 | __author_email__ = 'me@kennethreitz.org' 12 | __license__ = 'Apache 2.0' 13 | __copyright__ = 'Copyright 2020 Kenneth Reitz' 14 | __cake__ = u'\u2728 \U0001f370 \u2728' 15 | -------------------------------------------------------------------------------- /rcc/dark/checkbox_indeterminate_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rcc/dark/close-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/dark/close-pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/checkbox_indeterminate_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rcc/light/close-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/close-pressed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/CreateScript: -------------------------------------------------------------------------------- 1 | # Automatically generated script 2 | \set noalias = 1 3 | # 4 | # Creation script for lifeblood::lifeblood_cache_submitter::1.0 operator 5 | # 6 | 7 | if ( "$arg1" == "" ) then 8 | echo This script is intended as a creation script 9 | exit 10 | endif 11 | 12 | # Node $arg1 (lifeblood::Driver/lifeblood_cache_submitter::1.0) 13 | opexprlanguage -s hscript $arg1 14 | opuserdata -n '___Version___' -v '' $arg1 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/CreateScript: -------------------------------------------------------------------------------- 1 | # Automatically generated script 2 | \set noalias = 1 3 | # 4 | # Creation script for lifeblood::lifeblood_karma_submitter::1.0 operator 5 | # 6 | 7 | if ( "$arg1" == "" ) then 8 | echo This script is intended as a creation script 9 | exit 10 | endif 11 | 12 | # Node $arg1 (lifeblood::Driver/lifeblood_karma_submitter::1.0) 13 | opexprlanguage -s hscript $arg1 14 | opuserdata -n '___Version___' -v '' $arg1 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/ExtraFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "PythonModule/Cursor":{ 3 | "type":"intarray", 4 | "value":[3,24] 5 | }, 6 | "PythonModule/IsExpr":{ 7 | "type":"bool", 8 | "value":false 9 | }, 10 | "PythonModule/IsPython":{ 11 | "type":"bool", 12 | "value":true 13 | }, 14 | "PythonModule/IsScript":{ 15 | "type":"bool", 16 | "value":true 17 | }, 18 | "PythonModule/Source":{ 19 | "type":"string", 20 | "value":"" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/CreateScript: -------------------------------------------------------------------------------- 1 | # Automatically generated script 2 | \set noalias = 1 3 | # 4 | # Creation script for lifeblood::lifeblood_wedge_submitter::1.0 operator 5 | # 6 | 7 | if ( "$arg1" == "" ) then 8 | echo This script is intended as a creation script 9 | exit 10 | endif 11 | 12 | # Node $arg1 (lifeblood::Driver/lifeblood_wedge_submitter::1.0) 13 | opexprlanguage -s hscript $arg1 14 | opuserdata -n '___Version___' -v '' $arg1 15 | -------------------------------------------------------------------------------- /docs/source/nodes/core/killer.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/killer: 2 | 3 | ====== 4 | Killer 5 | ====== 6 | 7 | Kills incoming tasks 8 | 9 | :ref:`"Dead" tasks` - are a special state of tasks that are excluded from any processing by Lifeblood, yet kept for keeping all invocaions and other references valid. 10 | 11 | Dead tasks can also be easily filtered in the viewer 12 | 13 | This should be the logical end point of any task processing 14 | 15 | Parameters 16 | ========== 17 | 18 | None 19 | 20 | Attributes Set 21 | ============== 22 | 23 | None 24 | -------------------------------------------------------------------------------- /rcc/dark/up_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/ExtraFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "PythonModule/Cursor":{ 3 | "type":"intarray", 4 | "value":[29,47] 5 | }, 6 | "PythonModule/IsExpr":{ 7 | "type":"bool", 8 | "value":false 9 | }, 10 | "PythonModule/IsPython":{ 11 | "type":"bool", 12 | "value":true 13 | }, 14 | "PythonModule/IsScript":{ 15 | "type":"bool", 16 | "value":true 17 | }, 18 | "PythonModule/Source":{ 19 | "type":"string", 20 | "value":"" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/CreateScript: -------------------------------------------------------------------------------- 1 | # Automatically generated script 2 | \set noalias = 1 3 | # 4 | # Creation script for lifeblood::lifeblood_mantra_submitter::1.0 operator 5 | # 6 | 7 | if ( "$arg1" == "" ) then 8 | echo This script is intended as a creation script 9 | exit 10 | endif 11 | 12 | # Node $arg1 (lifeblood::Driver/lifeblood_mantra_submitter::1.0) 13 | opexprlanguage -s hscript $arg1 14 | opuserdata -n '___Version___' -v '' $arg1 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/ExtraFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "PythonModule/Cursor":{ 3 | "type":"intarray", 4 | "value":[18,48] 5 | }, 6 | "PythonModule/IsExpr":{ 7 | "type":"bool", 8 | "value":false 9 | }, 10 | "PythonModule/IsPython":{ 11 | "type":"bool", 12 | "value":true 13 | }, 14 | "PythonModule/IsScript":{ 15 | "type":"bool", 16 | "value":true 17 | }, 18 | "PythonModule/Source":{ 19 | "type":"string", 20 | "value":"" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/ExtraFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "PythonModule/Cursor":{ 3 | "type":"intarray", 4 | "value":[13,15] 5 | }, 6 | "PythonModule/IsExpr":{ 7 | "type":"bool", 8 | "value":false 9 | }, 10 | "PythonModule/IsPython":{ 11 | "type":"bool", 12 | "value":true 13 | }, 14 | "PythonModule/IsScript":{ 15 | "type":"bool", 16 | "value":true 17 | }, 18 | "PythonModule/Source":{ 19 | "type":"string", 20 | "value":"" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /rcc/light/up_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/dark/down_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/dark/up_arrow-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/dark/up_arrow_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/up_arrow-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/lifeblood/node_visualization_classes.py: -------------------------------------------------------------------------------- 1 | 2 | class NodeColorScheme: 3 | def __init__(self): 4 | self.__main_color = (0, 0, 0) 5 | self.__secondary_color = None 6 | 7 | def set_main_color(self, r: float, g: float, b: float): 8 | self.__main_color = (r, g, b) 9 | 10 | def set_secondary_color(self, r: float, g: float, b: float): 11 | self.__secondary_color = (r, g, b) 12 | 13 | def main_color(self): 14 | return self.__main_color 15 | 16 | def secondary_color(self): 17 | return self.__secondary_color -------------------------------------------------------------------------------- /stock_tools/matrix_client/requests/certs.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | """ 5 | requests.certs 6 | ~~~~~~~~~~~~~~ 7 | 8 | This module returns the preferred default CA certificate bundle. There is 9 | only one — the one from the certifi package. 10 | 11 | If you are packaging Requests, e.g., for a Linux distribution or a managed 12 | environment, you can change the definition of where() to return a separately 13 | packaged CA bundle. 14 | """ 15 | from certifi import where 16 | 17 | if __name__ == '__main__': 18 | print(where()) 19 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/CreateScript: -------------------------------------------------------------------------------- 1 | # Automatically generated script 2 | \set noalias = 1 3 | # 4 | # Creation script for lifeblood::lifeblood_redshift_submitter::1.0 operator 5 | # 6 | 7 | if ( "$arg1" == "" ) then 8 | echo This script is intended as a creation script 9 | exit 10 | endif 11 | 12 | # Node $arg1 (lifeblood::Driver/lifeblood_redshift_submitter::1.0) 13 | opexprlanguage -s hscript $arg1 14 | opuserdata -n '___Version___' -v '' $arg1 15 | -------------------------------------------------------------------------------- /rcc/dark/left_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/down_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/left_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/right_arrow.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/up_arrow_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/dark/down_arrow-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/dark/down_arrow_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/down_arrow-hover.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/ExtraFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "PythonModule/Cursor":{ 3 | "type":"intarray", 4 | "value":[26,19] 5 | }, 6 | "PythonModule/IsExpr":{ 7 | "type":"bool", 8 | "value":false 9 | }, 10 | "PythonModule/IsPython":{ 11 | "type":"bool", 12 | "value":true 13 | }, 14 | "PythonModule/IsScript":{ 15 | "type":"bool", 16 | "value":true 17 | }, 18 | "PythonModule/Source":{ 19 | "type":"string", 20 | "value":"" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /rcc/dark/left_arrow_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/down_arrow_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /rcc/light/left_arrow_disabled.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/CreateScript: -------------------------------------------------------------------------------- 1 | # Automatically generated script 2 | \set noalias = 1 3 | # 4 | # Creation script for lifeblood::lifeblood_distributed_flip_submitter::1.0 operator 5 | # 6 | 7 | if ( "$arg1" == "" ) then 8 | echo This script is intended as a creation script 9 | exit 10 | endif 11 | 12 | # Node $arg1 (lifeblood::Driver/lifeblood_distributed_flip_submitter::1.0) 13 | opexprlanguage -s hscript $arg1 14 | opuserdata -n '___Version___' -v '' $arg1 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/INDEX__SECTION: -------------------------------------------------------------------------------- 1 | Operator: lifeblood::lifeblood_submitter::1.0.0 2 | Label: Lifeblood Generic Submitter 3 | Path: oplib:/lifeblood::Driver/lifeblood_submitter::1.0.0?lifeblood::Driver/lifeblood_submitter::1.0.0 4 | Icon: opdef:/lifeblood::Driver/lifeblood_submitter::1.0.0?IconSVG 5 | Table: Driver 6 | License: 7 | Extra: 8 | User: 9 | Inputs: 0 to 0 10 | Subnet: true 11 | Python: false 12 | Empty: false 13 | Modified: Tue Apr 19 01:55:06 2022 14 | 15 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_scene_viewing_widget.py: -------------------------------------------------------------------------------- 1 | from .graphics_items import NetworkItem 2 | 3 | 4 | class GraphicsSceneViewingWidgetBase: 5 | def __init__(self, **kwargs): 6 | # explicit constructor needed to work with pyside6 and multiple inheritance 7 | super().__init__() 8 | 9 | def request_ui_focus(self, item: NetworkItem): 10 | raise NotImplementedError() 11 | 12 | def release_ui_focus(self, item: NetworkItem): 13 | raise NotImplementedError() 14 | 15 | def item_requests_context_menu(self, item): 16 | raise NotImplementedError() 17 | -------------------------------------------------------------------------------- /lifeblood.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | python311Packages, 4 | }: 5 | python311Packages.buildPythonPackage { 6 | name = "lifeblood"; 7 | pyproject = true; 8 | src = ./.; 9 | 10 | patchPhase = '' 11 | cp ./pkg_lifeblood/{MANIFEST.in,pyproject.toml,setup.cfg} . 12 | ''; 13 | 14 | build-system = with python311Packages; [ setuptools ]; 15 | 16 | pythonImportsCheck = [ "lifeblood" ]; 17 | propagatedBuildInputs = with python311Packages; [ 18 | aiofiles 19 | aiosqlite 20 | aiorwlock 21 | lz4 22 | psutil 23 | semantic-version 24 | toml 25 | watchdog 26 | ]; 27 | } 28 | -------------------------------------------------------------------------------- /rcc/dark/vsepartoolbars.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /rcc/light/vsepartoolbars.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/INDEX__SECTION: -------------------------------------------------------------------------------- 1 | Operator: lifeblood::lifeblood_cache_submitter::1.0 2 | Label: Lifeblood Cache Submitter 3 | Path: oplib:/lifeblood::Driver/lifeblood_cache_submitter::1.0?lifeblood::Driver/lifeblood_cache_submitter::1.0 4 | Icon: opdef:/lifeblood::Driver/lifeblood_submitter::1.0.0?IconSVG 5 | Table: Driver 6 | License: 7 | Extra: 8 | User: 9 | Inputs: 0 to 1 10 | Subnet: true 11 | Python: false 12 | Empty: false 13 | Modified: Tue Nov 5 18:04:25 2024 14 | 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/INDEX__SECTION: -------------------------------------------------------------------------------- 1 | Operator: lifeblood::lifeblood_karma_submitter::1.0 2 | Label: Lifeblood Karma Submitter 3 | Path: oplib:/lifeblood::Driver/lifeblood_karma_submitter::1.0?lifeblood::Driver/lifeblood_karma_submitter::1.0 4 | Icon: opdef:/lifeblood::Driver/lifeblood_submitter::1.0.0?IconSVG 5 | Table: Driver 6 | License: 7 | Extra: 8 | User: 9 | Inputs: 0 to 1 10 | Subnet: true 11 | Python: false 12 | Empty: false 13 | Modified: Tue Nov 5 16:20:01 2024 14 | 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/INDEX__SECTION: -------------------------------------------------------------------------------- 1 | Operator: lifeblood::lifeblood_wedge_submitter::1.0 2 | Label: Lifeblood Wedge Submitter 3 | Path: oplib:/lifeblood::Driver/lifeblood_wedge_submitter::1.0?lifeblood::Driver/lifeblood_wedge_submitter::1.0 4 | Icon: opdef:/lifeblood::Driver/lifeblood_submitter::1.0.0?IconSVG 5 | Table: Driver 6 | License: 7 | Extra: 8 | User: 9 | Inputs: 0 to 1 10 | Subnet: true 11 | Python: false 12 | Empty: false 13 | Modified: Tue Nov 5 19:12:09 2024 14 | 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/INDEX__SECTION: -------------------------------------------------------------------------------- 1 | Operator: lifeblood::lifeblood_mantra_submitter::1.0 2 | Label: Lifeblood Mantra Submitter 3 | Path: oplib:/lifeblood::Driver/lifeblood_mantra_submitter::1.0?lifeblood::Driver/lifeblood_mantra_submitter::1.0 4 | Icon: opdef:/lifeblood::Driver/lifeblood_submitter::1.0.0?IconSVG 5 | Table: Driver 6 | License: 7 | Extra: 8 | User: 9 | Inputs: 0 to 1 10 | Subnet: true 11 | Python: false 12 | Empty: false 13 | Modified: Tue Nov 5 19:08:56 2024 14 | 15 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/INDEX__SECTION: -------------------------------------------------------------------------------- 1 | Operator: lifeblood::lifeblood_redshift_submitter::1.0 2 | Label: Lifeblood Redshift Submitter 3 | Path: oplib:/lifeblood::Driver/lifeblood_redshift_submitter::1.0?lifeblood::Driver/lifeblood_redshift_submitter::1.0 4 | Icon: opdef:/lifeblood::Driver/lifeblood_submitter::1.0.0?IconSVG 5 | Table: Driver 6 | License: 7 | Extra: 8 | User: 9 | Inputs: 0 to 1 10 | Subnet: true 11 | Python: false 12 | Empty: false 13 | Modified: Tue Nov 5 19:08:56 2024 14 | 15 | -------------------------------------------------------------------------------- /flake.nix: -------------------------------------------------------------------------------- 1 | { 2 | description = "Lifeblood!"; 3 | 4 | inputs = { 5 | nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-25.05"; 6 | }; 7 | 8 | outputs = { self, nixpkgs }: 9 | let 10 | pkgs = nixpkgs.legacyPackages.x86_64-linux; 11 | in { 12 | 13 | packages.x86_64-linux = rec { 14 | lifeblood = pkgs.callPackage ./lifeblood.nix {}; 15 | lifeblood-viewer = pkgs.callPackage ./lifeblood-viewer.nix { inherit lifeblood; }; 16 | tests = import ./lifeblood-integration-tests.nix { pkgs = nixpkgs.legacyPackages.x86_64-linux.extend (final: prev: { inherit lifeblood; }); }; 17 | }; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /src/lifeblood/nodegraph_holder_base.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from typing import Optional 3 | 4 | 5 | class NodeGraphHolderBase: 6 | async def get_node_input_connections(self, node_id: int, input_name: Optional[str] = None): 7 | raise NotImplementedError() 8 | 9 | async def get_node_output_connections(self, node_id: int, output_name: Optional[str] = None): 10 | raise NotImplementedError() 11 | 12 | async def node_reports_changes_needs_saving(self, node_id): 13 | raise NotImplementedError() 14 | 15 | def get_event_loop(self) -> asyncio.AbstractEventLoop: 16 | raise NotImplementedError() 17 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/urllib3/util/queue.py: -------------------------------------------------------------------------------- 1 | import collections 2 | 3 | from ..packages import six 4 | from ..packages.six.moves import queue 5 | 6 | if six.PY2: 7 | # Queue is imported for side effects on MS Windows. See issue #229. 8 | import Queue as _unused_module_Queue # noqa: F401 9 | 10 | 11 | class LifoQueue(queue.Queue): 12 | def _init(self, _): 13 | self.queue = collections.deque() 14 | 15 | def _qsize(self, len=len): 16 | return len(self.queue) 17 | 18 | def _put(self, item): 19 | self.queue.append(item) 20 | 21 | def _get(self): 22 | return self.queue.pop() 23 | -------------------------------------------------------------------------------- /stock_tools/telegram_client/compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | pushd $(dirname "$0") 3 | 4 | if [ -d urllib3 ]; then 5 | echo "cleanup" 6 | rm -rf urllib3 7 | fi 8 | if [ -d certifi ]; then 9 | echo "cleanup" 10 | rm -rf certifi 11 | fi 12 | pip download "urllib3>=2,<3" 13 | pip download "certifi" 14 | unzip urllib3*.whl 15 | rm urllib3*.whl 16 | unzip certifi*.whl 17 | rm certifi*.whl 18 | rm -rf urllib3*.dist-info 19 | rm -rf certifi*.dist-info 20 | zip -r telegram_client.pyz __main__.py telebot.py urllib3/ certifi/ 21 | mv telegram_client.pyz ../../src/lifeblood/stock_nodes/telegram_client/data/. 22 | printf "all done\n" 23 | 24 | popd 25 | -------------------------------------------------------------------------------- /src/lifeblood/buffer_serializable.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | from io import BufferedIOBase, BytesIO 3 | from .buffered_connection import BufferedReader 4 | 5 | 6 | class IBufferSerializable: 7 | def serialize(self, stream: BufferedIOBase): 8 | raise NotImplementedError() 9 | 10 | @classmethod 11 | def deserialize(cls, stream: BufferedReader): 12 | raise NotImplementedError() 13 | 14 | async def serialize_to_streamwriter(self, stream: asyncio.StreamWriter): 15 | buff = BytesIO() 16 | await asyncio.get_event_loop().run_in_executor(None, self.serialize, buff) 17 | stream.write(buff.getbuffer()) 18 | -------------------------------------------------------------------------------- /docs/source/nodes/stock/houdini/mantra.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/stock/houdini/mantra: 2 | 3 | ====== 4 | Mantra 5 | ====== 6 | 7 | Renders given IFD file with mantra renderer (part of houdini) 8 | 9 | Parameters 10 | ========== 11 | 12 | :Ifd file path: 13 | path to the ifd file to be rendered 14 | :Image path: 15 | path where to save beauty pass 16 | :Skip if result already exists: 17 | if set - if ``output image file path`` file already exists - render will be skipped 18 | 19 | Attributes Set 20 | ============== 21 | 22 | When render is done, the following attributes are set: 23 | 24 | :file: 25 | set to path of the rendered beauty pass image 26 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/INDEX__SECTION: -------------------------------------------------------------------------------- 1 | Operator: lifeblood::lifeblood_distributed_flip_submitter::1.0 2 | Label: Lifeblood Distributed Flip Submitter 3 | Path: oplib:/lifeblood::Driver/lifeblood_distributed_flip_submitter::1.0?lifeblood::Driver/lifeblood_distributed_flip_submitter::1.0 4 | Icon: opdef:/lifeblood::Driver/lifeblood_submitter::1.0.0?IconSVG 5 | Table: Driver 6 | License: 7 | Extra: 8 | User: 9 | Inputs: 0 to 1 10 | Subnet: true 11 | Python: false 12 | Empty: false 13 | Modified: Tue Nov 5 19:33:55 2024 14 | 15 | -------------------------------------------------------------------------------- /src/lifeblood/net_messages/connections.py: -------------------------------------------------------------------------------- 1 | # import asyncio 2 | # from .stream_wrappers import MessageStream 3 | # from .address import split_address 4 | # 5 | # from typing import Tuple, Union 6 | # 7 | # 8 | # async def open_sending_stream(address: Union[str, Tuple[Tuple[str, int], ...]], reply_address: Tuple[str, int]): 9 | # """ 10 | # address is expected to be in form of "1.2.3.4:1313|2.3.4.5:2424"... 11 | # """ 12 | # if isinstance(address, str): 13 | # address = split_address(address) 14 | # reader, writer = await asyncio.open_connection(address[0][0], address[0][1]) 15 | # 16 | # return MessageStream(reader, writer, reply_address) 17 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/scene_item_factory_base.py: -------------------------------------------------------------------------------- 1 | from .graphics_items import Node, Task, NodeConnection, GraphicsSceneBase 2 | from lifeblood.ui_protocol_data import TaskData 3 | 4 | 5 | class SceneItemFactoryBase: 6 | def make_task(self, scene: GraphicsSceneBase, task_data: TaskData) -> Task: 7 | raise NotImplementedError() 8 | 9 | def make_node(self, scene: GraphicsSceneBase, id: int, type: str, name: str) -> Node: 10 | raise NotImplementedError() 11 | 12 | def make_node_connection(self, scene: GraphicsSceneBase, id: int, nodeout: Node, nodein: Node, outname: str, inname: str) -> NodeConnection: 13 | raise NotImplementedError() 14 | -------------------------------------------------------------------------------- /src/lifeblood_client/attribute_serialization.py: -------------------------------------------------------------------------------- 1 | # NOTE: this file is a simplified standalone version of lifeblood.attribute_serialization 2 | # And therefore this file should be kept up to date with the original 3 | # 4 | # note as well: this is still kept py2-3 compatible 5 | import json 6 | 7 | from .common_serialization import AttribSerializer, AttribDeserializer 8 | 9 | 10 | def serialize_attributes_core(attributes): # type: (dict) -> str 11 | return json.dumps(attributes, cls=AttribSerializer) 12 | 13 | 14 | def deserialize_attributes_core(attributes_serialized): # type: (str) -> dict 15 | return json.loads(attributes_serialized, cls=AttribDeserializer) 16 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/build_blender.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e -o pipefail 3 | OUT=../dcc_plugins/blender 4 | 5 | pushd $(dirname $0) 6 | 7 | mkdir -p $OUT 8 | 9 | # zip blender addon 10 | rsync -arhv --exclude=__pycache__ --exclude="*.pyc" blender/blender_path $OUT 11 | rsync -arhv --exclude=__pycache__ --exclude="*.pyc" ../src/lifeblood_client $OUT/blender_path/addons/scripts 12 | rsync -arhv --exclude=__pycache__ --exclude="*.pyc" ../src/lifeblood_client $OUT/blender_path/addons/lifeblood_plugin 13 | pushd ../dcc_plugins/blender/blender_path/addons 14 | zip -r ../../../blender_lifeblood_addon.zip lifeblood_plugin --exclude "*__pycache__/" --exclude "*.pyc" 15 | popd 16 | 17 | popd -------------------------------------------------------------------------------- /flake.lock: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": { 3 | "nixpkgs": { 4 | "locked": { 5 | "lastModified": 1763049705, 6 | "narHash": "sha256-A5LS0AJZ1yDPTa2fHxufZN++n8MCmtgrJDtxFxrH4S8=", 7 | "owner": "nixos", 8 | "repo": "nixpkgs", 9 | "rev": "3acb677ea67d4c6218f33de0db0955f116b7588c", 10 | "type": "github" 11 | }, 12 | "original": { 13 | "owner": "nixos", 14 | "ref": "nixos-25.05", 15 | "repo": "nixpkgs", 16 | "type": "github" 17 | } 18 | }, 19 | "root": { 20 | "inputs": { 21 | "nixpkgs": "nixpkgs" 22 | } 23 | } 24 | }, 25 | "root": "root", 26 | "version": 7 27 | } 28 | -------------------------------------------------------------------------------- /rcc/dark/vmovetoolbar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /rcc/light/vmovetoolbar.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /tests/nodes/test_husk.py: -------------------------------------------------------------------------------- 1 | import os 2 | from pathlib import Path 3 | 4 | from lifeblood.invocationjob import Environment 5 | from lifeblood.environment_resolver import EnvironmentResolverArguments 6 | 7 | from lifeblood_testing_common.nodes_common import TestCaseBase 8 | 9 | 10 | # TODO: tests are currently very shallow !! 11 | 12 | class HuskTestCase(TestCaseBase): 13 | async def test_husk_node(self): 14 | await self._helper_test_render_node('houdini_husk', 'usd', 'husk', Path(__file__).parent / 'data' / 'mock_houdini') 15 | 16 | async def test_karma_node(self): 17 | await self._helper_test_render_node('karma', 'usd', 'husk', Path(__file__).parent / 'data' / 'mock_houdini') 18 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/PreFirstCreate: -------------------------------------------------------------------------------- 1 | import hou 2 | import subprocess 3 | import re 4 | import sys 5 | 6 | 7 | CREATE_NO_WINDOW = 0x08000000 8 | flags = 0 9 | if sys.platform == 'win32': 10 | flags = CREATE_NO_WINDOW 11 | out, _ = subprocess.Popen(['redshiftCmdLine'], stdout=subprocess.PIPE, creationflags=flags).communicate() 12 | 13 | node_type = kwargs['type'] 14 | for line in out.splitlines(): 15 | m = re.search(r'version (\d+)\.(\d+)(?:\.(\d+))', line.decode()) 16 | if m: 17 | hou.session._lifeblood__rs_ver_str = f'{m.group(1)}.{m.group(2)}.{m.group(3) or 0}' 18 | break -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = source 9 | BUILDDIR = build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/pretty_items/node_decorator_base.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QGraphicsItem 2 | from .drawable_node import DrawableNode 3 | 4 | 5 | class NodeDecorator(QGraphicsItem): 6 | def __init__(self, node: DrawableNode): 7 | super().__init__() 8 | self.__node = node 9 | self.setZValue(-2) # draw behind everything 10 | 11 | def node(self) -> DrawableNode: 12 | return self.__node 13 | 14 | def node_updated(self): 15 | """ 16 | called by the owning node when it's data changes 17 | """ 18 | pass 19 | 20 | 21 | class NodeDecoratorFactoryBase: 22 | def make_decorator(self, node: DrawableNode) -> NodeDecorator: 23 | raise NotImplementedError() 24 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/matrix_client/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Copyright 2015 OpenMarket Ltd 3 | # Copyright 2018 Adam Beckmeyer 4 | # 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | __version__ = "0.4.0" 17 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/nodeeditor_windows/ui_parameters_window.py: -------------------------------------------------------------------------------- 1 | from lifeblood_viewer.nodeeditor import NodeEditor 2 | from lifeblood_viewer.ui_scene_elements import ImguiViewWindow 3 | from ..graphics_items import NetworkItemWithUI 4 | 5 | 6 | class ParametersWindow(ImguiViewWindow): 7 | def __init__(self, editor_widget: NodeEditor): 8 | super().__init__(editor_widget, 'Parameters') 9 | 10 | def draw_window_elements(self): 11 | iitem = self.scene().get_inspected_item() 12 | if iitem and isinstance(iitem, NetworkItemWithUI): 13 | iitem.draw_imgui_elements(self.editor_widget()) 14 | 15 | def initial_geometry(self): 16 | return 1065, 48, 561, 697 17 | 18 | def shortcut_context_id(self): 19 | return None -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/README.md: -------------------------------------------------------------------------------- 1 | # Houdini plugin for lifeblood 2 | 3 | Check latest `tools` releases for the houdini plugin. 4 | 5 | * The zip file's contents may be extracted directly into your houdini's home dir 6 | (smth like `~/houdini20.0` or `C:\Users\user\Documents\houdini20.0`) 7 | 8 | * Alternatively the zip file's content may go somewhere separate, but then 9 | you need to ensure to add the path to that location to `HOUDINI_PATH` 10 | One way you can do it is through `houdini.env` file 11 | I will not give examples here because it highly depends on what else is 12 | there in your `houdini.env` file. 13 | The point is just be sure that path to this directory is in the list, and that 14 | there is exactly one `&` in the very end on the `HOUDINI_PATH` value -------------------------------------------------------------------------------- /src/lifeblood/stock_nodes/webserver/data/index.html: -------------------------------------------------------------------------------- 1 | 2 | {header_title} 3 | 4 | 5 | 6 |
7 | 8 |

{title}

9 | 10 |
11 | 12 | 13 |
14 |
Great, your files are selected. Keep on.
15 |
Please select some files
16 |
17 |
18 | 19 |
20 | 21 |
22 | 23 |
-------------------------------------------------------------------------------- /src/lifeblood/net_messages/message_handler.py: -------------------------------------------------------------------------------- 1 | from .messages import Message 2 | from .client import MessageClient 3 | 4 | 5 | class MessageHandlerBase: 6 | async def process_message(self, message: Message, client: MessageClient) -> bool: 7 | """ 8 | should return True if message was processed. 9 | if message is not expected by this handler - the function should return False 10 | """ 11 | raise NotImplementedError() 12 | 13 | async def clear_internal_state(self): 14 | """ 15 | If a message handler implementation has an internal state - 16 | this function must clean it. 17 | This might be called when handler is de-initialized, 18 | or when some other clear slate reset is required 19 | """ 20 | return 21 | -------------------------------------------------------------------------------- /src/lifeblood/net_messages/address_routing.py: -------------------------------------------------------------------------------- 1 | from .address import DirectAddress, AddressChain 2 | from .exceptions import MessageTransferError 3 | from typing import Iterable, Optional 4 | 5 | 6 | class RoutingImpossible(MessageTransferError): 7 | def __init__(self, sources: Iterable[DirectAddress], destination: AddressChain, *, wrapped_exception: Optional[Exception] = None): 8 | self.sources = list(sources) 9 | self.destination = destination 10 | super().__init__(f'failed to find suitable address to reach {self.destination} from {self.sources}', wrapped_exception=wrapped_exception) 11 | 12 | 13 | class AddressRouter: 14 | def select_source_for(self, possible_sources: Iterable[DirectAddress], destination: AddressChain) -> DirectAddress: 15 | raise NotImplementedError() 16 | -------------------------------------------------------------------------------- /src/lifeblood/attribute_serialization.py: -------------------------------------------------------------------------------- 1 | import asyncio 2 | import json 3 | 4 | from .common_serialization import AttribSerializer, AttribDeserializer 5 | 6 | 7 | async def serialize_attributes(attributes: dict) -> str: 8 | return await asyncio.get_event_loop().run_in_executor(None, serialize_attributes_core, attributes) 9 | 10 | 11 | async def deserialize_attributes(attributes_serialized: str) -> dict: 12 | return await asyncio.get_event_loop().run_in_executor(None, deserialize_attributes_core, attributes_serialized) 13 | 14 | 15 | def serialize_attributes_core(attributes: dict) -> str: 16 | return json.dumps(attributes, cls=AttribSerializer) 17 | 18 | 19 | def deserialize_attributes_core(attributes_serialized: str) -> dict: 20 | return json.loads(attributes_serialized, cls=AttribDeserializer) 21 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/qextended_graphics_item.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QGraphicsItem, QGraphicsSceneMouseEvent 2 | 3 | 4 | class QGraphicsItemExtended(QGraphicsItem): 5 | def __init__(self): 6 | super().__init__() 7 | 8 | # the bug the cheat below is working around seem to have been fixed in pyside 6.8 (maybe earlier) 9 | # # cheat cuz Shiboken.Object does not respect mro 10 | # mro = self.__class__.mro() 11 | # cur_mro_i = mro.index(QGraphicsItemExtended) 12 | # if len(mro) > cur_mro_i + 2: 13 | # super(mro[cur_mro_i + 2], self).__init__() 14 | 15 | def post_mousePressEvent(self, event: QGraphicsSceneMouseEvent): 16 | """ 17 | special "event" when mousePressEvent uses candidates 18 | """ 19 | pass 20 | -------------------------------------------------------------------------------- /docs/source/nodes/core/spawn_children.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/spawn_children: 2 | 3 | ============== 4 | Spawn Children 5 | ============== 6 | 7 | Spawn children for incoming task. 8 | 9 | Tasks' :ref:`parent-children hierarchy` is a core concept of Lifeblood. 10 | 11 | Children will be going out from the second output. 12 | 13 | Parameters 14 | ========== 15 | 16 | :Spawn This Many Children: 17 | Number of children to spawn 18 | :Child Number Attribute To Create: 19 | Create attribute with this name, containing the number of child created by this node 20 | :Children Base Name: 21 | Base name for children tasks 22 | :Attribute Pattern To Inherit: 23 | pattern of attributes to inherit by children from the original task 24 | 25 | 26 | Attributes Set 27 | ============== 28 | 29 | Incoming task is unmodified. -------------------------------------------------------------------------------- /src/lifeblood_viewer/db_misc.py: -------------------------------------------------------------------------------- 1 | sql_init_script = ''' 2 | BEGIN TRANSACTION; 3 | CREATE TABLE IF NOT EXISTS "widgets" ( 4 | "name" TEXT NOT NULL, 5 | "posx" INTEGER, 6 | "posy" INTEGER, 7 | "width" INTEGER, 8 | "height" INTEGER, 9 | "scene_x" REAL, 10 | "scene_y" REAL, 11 | "scene_h" REAL, 12 | "scene_w" REAL, 13 | PRIMARY KEY("name") 14 | ); 15 | CREATE TABLE IF NOT EXISTS "nodes" ( 16 | "id" INTEGER NOT NULL, 17 | "posx" REAL, 18 | "posy" REAL, 19 | PRIMARY KEY("id") 20 | ); 21 | COMMIT; 22 | 23 | ''' 24 | 25 | sql_init_script_nodes = ''' 26 | BEGIN TRANSACTION; 27 | CREATE TABLE IF NOT EXISTS "nodes_{db_uid}" ( 28 | "id" INTEGER NOT NULL, 29 | "posx" REAL, 30 | "posy" REAL, 31 | PRIMARY KEY("id") 32 | ); 33 | COMMIT; 34 | ''' -------------------------------------------------------------------------------- /docs/source/nodes/stock/houdini/common_devices.rst: -------------------------------------------------------------------------------- 1 | :gpu: 2 | 3 | Treated as GPU OpenCL device 4 | 5 | tags used: 6 | 7 | - ``opencl_dev`` - has format ``::`` 8 | 9 | - ```` - value identifying this device through houdini's ``HOUDINI_OCL_DEVICETYPE`` variable 10 | - ```` - value identifying this device through houdini's ``HOUDINI_OCL_VENDOR`` variable 11 | - ```` - value identifying this device through houdini's ``HOUDINI_OCL_DEVICENUMBER`` variable 12 | 13 | Each value can be empty, in that case corresponding houdini's environment variable is not set, it's up to the user to 14 | configure this value correctly. 15 | 16 | Example values: ``"GPU::0"``, ``"GPU:Intel(R) Corporation"``, ``GPU:NVIDIA Corporation:0`` 17 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/OnCreated: -------------------------------------------------------------------------------- 1 | # set up some defaults unsettable other ways 2 | node = kwargs['node'] 3 | 4 | node.setParms({'attr_name_0': 'hipfile', 5 | 'attr_type_0': 'str', 6 | 'val_str_0': '$HIPFILE' 7 | }) 8 | 9 | node.parm('env_arg_name_0').setExpression('"user"', language=hou.exprLanguage.Python) 10 | node.parm('env_arg_val_0').setExpression('import getpass\nreturn getpass.getuser()', language=hou.exprLanguage.Python) 11 | node.parm('env_arg_name_1').setExpression('import sys\nreturn "package.houdini.py%d_%d" % (sys.version_info.major, sys.version_info.minor)', language=hou.exprLanguage.Python) 12 | node.parm('env_arg_val_1').setExpression('"~=" + hou.applicationVersionString()', language=hou.exprLanguage.Python) 13 | -------------------------------------------------------------------------------- /docs/source/components/logging.rst: -------------------------------------------------------------------------------- 1 | Logging 2 | ======= 3 | 4 | | All Lifeblood components log to stdout, as well as to a log file. 5 | | Log files location is: 6 | 7 | * ``/home//.local/share/lifeblood/log`` (or ``$XDG_DATA_HOME`` if defined) (linux) 8 | * ``C:\Users\\AppData\Local\lifeblood\log`` (based on ``%LOCALAPPDATA%``) (windows) 9 | * ``/Users//Library/Application Support/lifeblood/log`` (mac) 10 | 11 | By default all components of Lifeblood are set to log only "important" messages (like warnings and errors), 12 | but to figure out what's happening sometimes you would need a bit more information. 13 | 14 | | All of Lifeblood's components can accept ``--loglevel`` parameter before command to specify minimum log level to, well, log. 15 | | for example ``lifeblood scheduler --loglevel DEBUG`` will set default log level to DEBUG and you will see all the 16 | crap printed out into stdout 17 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/requests/hooks.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | """ 4 | requests.hooks 5 | ~~~~~~~~~~~~~~ 6 | 7 | This module provides the capabilities for the Requests hooks system. 8 | 9 | Available hooks: 10 | 11 | ``response``: 12 | The response generated from a Request. 13 | """ 14 | HOOKS = ['response'] 15 | 16 | 17 | def default_hooks(): 18 | return {event: [] for event in HOOKS} 19 | 20 | # TODO: response is the only one 21 | 22 | 23 | def dispatch_hook(key, hooks, hook_data, **kwargs): 24 | """Dispatches a hook dictionary on a given piece of data.""" 25 | hooks = hooks or {} 26 | hooks = hooks.get(key) 27 | if hooks: 28 | if hasattr(hooks, '__call__'): 29 | hooks = [hooks] 30 | for hook in hooks: 31 | _hook_data = hook(hook_data, **kwargs) 32 | if _hook_data is not None: 33 | hook_data = _hook_data 34 | return hook_data 35 | -------------------------------------------------------------------------------- /src/lifeblood/core_nodes/kill.py: -------------------------------------------------------------------------------- 1 | from lifeblood.node_plugin_base import BaseNode 2 | from lifeblood.nodethings import ProcessingResult 3 | 4 | from typing import Iterable 5 | 6 | 7 | def node_class(): 8 | return KillNode 9 | 10 | 11 | class KillNode(BaseNode): 12 | @classmethod 13 | def label(cls) -> str: 14 | return 'killer' 15 | 16 | @classmethod 17 | def tags(cls) -> Iterable[str]: 18 | return 'kill', 'die', 'core' 19 | 20 | @classmethod 21 | def type_name(cls) -> str: 22 | return 'killer' 23 | 24 | def __init__(self, name: str): 25 | super(KillNode, self).__init__(name) 26 | ui = self.get_ui() 27 | with ui.initializing_interface_lock(): 28 | ui.color_scheme().set_main_color(0.1, 0.1, 0.1) 29 | 30 | def process_task(self, context) -> ProcessingResult: 31 | res = ProcessingResult() 32 | res.kill_task() 33 | return res 34 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=source 11 | set BUILDDIR=build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /src/lifeblood_client/nethelpers.py: -------------------------------------------------------------------------------- 1 | import struct 2 | import socket 3 | 4 | 5 | def recv_exactly(sock, numbytes): # type: (socket.socket, int) -> bytes 6 | patches = [] 7 | got_bytes = 0 8 | while got_bytes != numbytes: 9 | patches.append(sock.recv(numbytes - got_bytes)) 10 | got_bytes += len(patches[-1]) 11 | if len(patches[-1]) == 0: 12 | raise ConnectionResetError() 13 | 14 | if len(patches) == 1: 15 | return patches[0] 16 | elif len(patches) == 0: 17 | return b'' 18 | return b''.join(patches) 19 | 20 | 21 | def send_string(sock, text): # type: (socket.socket, str) -> None 22 | bts = text.encode('UTF-8') 23 | sock.sendall(struct.pack('>Q', len(bts))) 24 | sock.sendall(bts) 25 | 26 | 27 | def recv_string(sock): # type: (socket.socket) -> str 28 | btlen = struct.unpack('>Q', recv_exactly(sock, 8))[0] 29 | return recv_exactly(sock, btlen).decode('UTF-8') 30 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/PythonModule: -------------------------------------------------------------------------------- 1 | import hou 2 | 3 | 4 | def submit_btn_callback(node): 5 | # validate 6 | ropnode = node.parm('roppath').evalAsNode() 7 | if ropnode is None: 8 | hou.ui.displayMessage( 9 | 'Mantra node is not selected', 10 | severity=hou.severityType.Error, 11 | title='you forgot to select node to render' 12 | ) 13 | return 14 | if (rop_type_name := ropnode.type().nameComponents()[2]) != 'ifd': 15 | hou.ui.displayMessage( 16 | f'Specify a Mantra node to render. instead I see "{rop_type_name}"', 17 | severity=hou.severityType.Error, 18 | title='Invalid node type to render' 19 | ) 20 | return 21 | 22 | # submit 23 | inner = node.node('lifeblood_submitter') 24 | inner.hdaModule().submit_button_callback(inner) -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/Tools.shelf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | ROP 11 | 12 | 13 | $HDA_TABLE_AND_NAME 14 | 15 | Lifeblood 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_cache_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__cache__submitter_8_81.0/Tools.shelf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | ROP 11 | 12 | 13 | $HDA_TABLE_AND_NAME 14 | 15 | Lifeblood 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/Tools.shelf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | ROP 11 | 12 | 13 | $HDA_TABLE_AND_NAME 14 | 15 | Lifeblood 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/ExtraFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "PreFirstCreate/Cursor":{ 3 | "type":"intarray", 4 | "value":[10,1] 5 | }, 6 | "PreFirstCreate/IsExpr":{ 7 | "type":"bool", 8 | "value":false 9 | }, 10 | "PreFirstCreate/IsPython":{ 11 | "type":"bool", 12 | "value":true 13 | }, 14 | "PreFirstCreate/IsScript":{ 15 | "type":"bool", 16 | "value":true 17 | }, 18 | "PreFirstCreate/Source":{ 19 | "type":"string", 20 | "value":"" 21 | }, 22 | "PythonModule/Cursor":{ 23 | "type":"intarray", 24 | "value":[18,1] 25 | }, 26 | "PythonModule/IsExpr":{ 27 | "type":"bool", 28 | "value":false 29 | }, 30 | "PythonModule/IsPython":{ 31 | "type":"bool", 32 | "value":true 33 | }, 34 | "PythonModule/IsScript":{ 35 | "type":"bool", 36 | "value":true 37 | }, 38 | "PythonModule/Source":{ 39 | "type":"string", 40 | "value":"" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_wedge_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__wedge__submitter_8_81.0/Tools.shelf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | ROP 11 | 12 | 13 | $HDA_TABLE_AND_NAME 14 | 15 | Lifeblood 16 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/pretty_items/decorated_node.py: -------------------------------------------------------------------------------- 1 | from .node_decorator_base import NodeDecorator, NodeDecoratorFactoryBase 2 | from .drawable_node_with_snap_points import DrawableNodeWithSnapPoints 3 | 4 | from ..graphics_scene_base import GraphicsSceneBase 5 | 6 | from typing import Iterable, List 7 | 8 | 9 | class DecoratedNode(DrawableNodeWithSnapPoints): 10 | def __init__(self, scene: GraphicsSceneBase, id: int, type: str, name: str, node_decorator_factories: Iterable[NodeDecoratorFactoryBase] = ()): 11 | super().__init__(scene, id, type, name) 12 | 13 | # decorators 14 | self.__decorators: List[NodeDecorator] = [fac.make_decorator(self) for fac in node_decorator_factories] 15 | for decorator in self.__decorators: 16 | decorator.setParentItem(self) 17 | 18 | def item_updated(self): 19 | super().item_updated() 20 | for decorator in self.__decorators: 21 | decorator.node_updated() 22 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/PythonModule: -------------------------------------------------------------------------------- 1 | import hou 2 | 3 | 4 | def submit_btn_callback(node): 5 | # validate 6 | ropnode = node.parm('roppath').evalAsNode() 7 | if ropnode is None: 8 | hou.ui.displayMessage( 9 | 'Redshift node is not selected', 10 | severity=hou.severityType.Error, 11 | title='you forgot to select node to render' 12 | ) 13 | return 14 | if (rop_type_name := ropnode.type().nameComponents()[2]) != 'Redshift_ROP': 15 | hou.ui.displayMessage( 16 | f'Specify a Redshift node to render. instead I see "{rop_type_name}"', 17 | severity=hou.severityType.Error, 18 | title='Invalid node type to render' 19 | ) 20 | return 21 | 22 | # submit 23 | inner = node.node('lifeblood_submitter') 24 | inner.hdaModule().submit_button_callback(inner) -------------------------------------------------------------------------------- /src/lifeblood_viewer/nodeeditor_windows/ui_longop_window.py: -------------------------------------------------------------------------------- 1 | import imgui 2 | from lifeblood_viewer.nodeeditor import NodeEditor 3 | from lifeblood_viewer.ui_scene_elements import ImguiViewWindow 4 | 5 | 6 | class LongOpWindow(ImguiViewWindow): 7 | def __init__(self, editor_widget: NodeEditor): 8 | super().__init__(editor_widget, 'Operations') 9 | 10 | def draw_window_elements(self): 11 | ops, queues = self.scene().long_operation_statuses() 12 | for opid, (fraction, status) in ops: 13 | imgui.progress_bar(fraction or 1.0, overlay=f'{opid}:{status or ""}') 14 | imgui.separator() 15 | imgui.text('queues:') 16 | if queues: 17 | for qname, qval in queues.items(): 18 | imgui.text(f' {qval}: {qname}') 19 | else: 20 | imgui.text('none') 21 | 22 | def initial_geometry(self): 23 | return 32, 548, 256, 150 24 | 25 | def shortcut_context_id(self): 26 | return None 27 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/nodeeditor_windows/ui_undo_window.py: -------------------------------------------------------------------------------- 1 | import imgui 2 | from lifeblood_viewer.nodeeditor import NodeEditor 3 | from lifeblood_viewer.ui_scene_elements import ImguiViewWindow 4 | 5 | 6 | class UndoWindow(ImguiViewWindow): 7 | def __init__(self, editor_widget: NodeEditor): 8 | super().__init__(editor_widget, 'Undo History') 9 | 10 | def draw_window_elements(self): 11 | something_was_visible = False 12 | for name in reversed(self.scene().undo_stack_names()): 13 | if len(name) > 40: 14 | name = name[:40] + '...' 15 | imgui.bullet_text(name) 16 | if not something_was_visible and imgui.is_item_visible(): 17 | something_was_visible = True 18 | elif something_was_visible and not imgui.is_item_visible(): 19 | break 20 | 21 | def initial_geometry(self): 22 | return 32, 48, 256, 300 23 | 24 | def shortcut_context_id(self): 25 | return None -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_karma_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__karma__submitter_8_81.0/PythonModule: -------------------------------------------------------------------------------- 1 | import hou 2 | 3 | 4 | def submit_btn_callback(node): 5 | # validate 6 | ropnode = node.parm('roppath').evalAsNode() 7 | if ropnode is None: 8 | hou.ui.displayMessage( 9 | 'USDRender node is not selected', 10 | severity=hou.severityType.Error, 11 | title='you forgot to select node to render' 12 | ) 13 | return 14 | if (rop_type_name := ropnode.type().nameComponents()[2]) not in ('usdrender_rop', 'karma'): 15 | hou.ui.displayMessage( 16 | f'Specify a USDRender node to render. instead I see "{rop_type_name}"', 17 | severity=hou.severityType.Error, 18 | title='Invalid node type to render' 19 | ) 20 | return 21 | 22 | # submit 23 | inner = node.node('lifeblood_submitter') 24 | inner.hdaModule().submit_button_callback(inner) -------------------------------------------------------------------------------- /src/lifeblood/core_nodes/null.py: -------------------------------------------------------------------------------- 1 | from lifeblood.node_plugin_base import BaseNode 2 | from lifeblood.nodethings import ProcessingResult 3 | 4 | from typing import Iterable 5 | 6 | 7 | def node_class(): 8 | return NullNode 9 | 10 | 11 | class NullNode(BaseNode): 12 | @classmethod 13 | def label(cls) -> str: 14 | return 'null' 15 | 16 | @classmethod 17 | def tags(cls) -> Iterable[str]: 18 | return 'null', 'passthrough', 'core' 19 | 20 | @classmethod 21 | def type_name(cls) -> str: 22 | return 'null' 23 | 24 | def __init__(self, name: str): 25 | super(NullNode, self).__init__(name) 26 | ui = self.get_ui() 27 | with ui.initializing_interface_lock(): 28 | ui.color_scheme().set_main_color(0.22, 0.24, 0.22) 29 | 30 | def process_task(self, context) -> ProcessingResult: 31 | return ProcessingResult() 32 | 33 | def postprocess_task(self, context) -> ProcessingResult: 34 | return ProcessingResult() 35 | -------------------------------------------------------------------------------- /docs/source/nodes.rst: -------------------------------------------------------------------------------- 1 | .. _nodes_index: 2 | 3 | ===== 4 | Nodes 5 | ===== 6 | 7 | .. toctree:: 8 | :maxdepth: 1 9 | :caption: Core Nodes: 10 | 11 | nodes/core/attribute_splitter 12 | nodes/core/delete_attrib 13 | nodes/core/environment_resolver_arguments_setter 14 | nodes/core/killer 15 | nodes/core/mod_attrib 16 | nodes/core/null 17 | nodes/core/parent_children_waiter 18 | nodes/core/python 19 | nodes/core/rename_attrib 20 | nodes/core/set_attrib 21 | nodes/core/spawn_children 22 | nodes/core/split_waiter 23 | nodes/core/switch 24 | nodes/core/wait_for_task_value 25 | nodes/core/wedge 26 | 27 | .. toctree:: 28 | :maxdepth: 1 29 | :caption: Stock Nodes: 30 | 31 | nodes/stock/houdini/hip_driver_renderer 32 | nodes/stock/houdini/karma 33 | nodes/stock/houdini/mantra 34 | nodes/stock/matrixnotifier 35 | nodes/stock/telegram_client/telegram_notifier 36 | nodes/stock/redshift/redshift 37 | nodes/stock/redshift/hip_rs_generator 38 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/pretty_items/node_connection_snap_point.py: -------------------------------------------------------------------------------- 1 | from .drawable_node import DrawableNode 2 | from PySide6.QtCore import QPointF 3 | 4 | 5 | class SnapPoint: 6 | def pos(self) -> QPointF: 7 | raise NotImplementedError() 8 | 9 | 10 | class NodeConnSnapPoint(SnapPoint): 11 | def __init__(self, node: DrawableNode, connection_name: str, connection_is_input: bool): 12 | super().__init__() 13 | self.__node = node 14 | self.__conn_name = connection_name 15 | self.__isinput = connection_is_input 16 | 17 | def node(self) -> DrawableNode: 18 | return self.__node 19 | 20 | def connection_name(self) -> str: 21 | return self.__conn_name 22 | 23 | def connection_is_input(self) -> bool: 24 | return self.__isinput 25 | 26 | def pos(self) -> QPointF: 27 | if self.__isinput: 28 | return self.__node.get_input_position(self.__conn_name) 29 | return self.__node.get_output_position(self.__conn_name) 30 | -------------------------------------------------------------------------------- /docs/source/index.rst: -------------------------------------------------------------------------------- 1 | Welcome to Lifeblood documentation! 2 | ==================================== 3 | 4 | .. image:: images/lifeblood.svg 5 | 6 | **Lifeblood** is a task management software tuned to CG industry. 7 | 8 | **Lifeblood** solves the same problem as Deadline, Tractor and other farm managers, 9 | but Lifeblood does much more on top of that. 10 | 11 | **Lifeblood** allows you do define task processing workflows in terms of a node graph, 12 | where tasks that travel from node to node and may produce workload to be executed by a swarm of workers. 13 | 14 | .. toctree:: 15 | :maxdepth: 2 16 | 17 | news/index 18 | 19 | .. toctree:: 20 | :maxdepth: 2 21 | :caption: Contents: 22 | 23 | components/index 24 | overview 25 | concepts 26 | installation 27 | usage 28 | resource_control 29 | network_config 30 | tutorials 31 | nodes 32 | 33 | Indices and tables 34 | ================== 35 | 36 | * :ref:`genindex` 37 | * :ref:`modindex` 38 | * :ref:`search` 39 | 40 | .. 41 | * :ref:`api` 42 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_mantra_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__mantra__submitter_8_81.0/Tools.shelf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | ROP 11 | 12 | 13 | $HDA_TABLE_AND_NAME 14 | 15 | Lifeblood 16 | 19 | 20 | Mantra 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_redshift_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__redshift__submitter_8_81.0/Tools.shelf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | ROP 11 | 12 | 13 | $HDA_TABLE_AND_NAME 14 | 15 | Lifeblood 16 | 19 | 20 | Redshift 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /lifeblood-viewer.nix: -------------------------------------------------------------------------------- 1 | 2 | { 3 | lib, 4 | fetchPypi, 5 | python310Packages, 6 | python311Packages, 7 | lifeblood, 8 | }: 9 | let 10 | imgui = python311Packages.buildPythonPackage { 11 | name = "imgui"; 12 | pythonImportsCheck = [ "imgui" ]; 13 | src = fetchPypi { 14 | pname = "imgui"; 15 | version = "2.0.0"; 16 | hash = "sha256-L7247tO429fqmK+eTBxlgrC8TalColjeFjM9jGU9Z+E="; 17 | }; 18 | nativeBuildInputs = with python311Packages; [ 19 | cython_0 20 | ]; 21 | }; 22 | in python311Packages.buildPythonPackage { 23 | name = "lifeblood-viewer"; 24 | pyproject = true; 25 | src = ./.; 26 | 27 | patchPhase = '' 28 | cp ./pkg_lifeblood_viewer/{pyproject.toml,setup.cfg} . 29 | ''; 30 | 31 | build-system = with python311Packages; [ setuptools ]; 32 | 33 | pythonImportsCheck = [ "lifeblood" ]; 34 | propagatedBuildInputs = with python311Packages; [ 35 | glfw 36 | pyopengl 37 | pyside6 38 | lz4 39 | grandalf 40 | numpy_1 41 | ] ++ [ 42 | imgui 43 | lifeblood 44 | ]; 45 | } 46 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/requests/packages.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | try: 4 | import chardet 5 | except ImportError: 6 | import charset_normalizer as chardet 7 | import warnings 8 | 9 | warnings.filterwarnings('ignore', 'Trying to detect', module='charset_normalizer') 10 | 11 | # This code exists for backwards compatibility reasons. 12 | # I don't like it either. Just look the other way. :) 13 | 14 | for package in ('urllib3', 'idna'): 15 | locals()[package] = __import__(package) 16 | # This traversal is apparently necessary such that the identities are 17 | # preserved (requests.packages.urllib3.* is urllib3.*) 18 | for mod in list(sys.modules): 19 | if mod == package or mod.startswith(package + '.'): 20 | sys.modules['requests.packages.' + mod] = sys.modules[mod] 21 | 22 | target = chardet.__name__ 23 | for mod in list(sys.modules): 24 | if mod == target or mod.startswith(target + '.'): 25 | sys.modules['requests.packages.' + target.replace(target, 'chardet')] = sys.modules[mod] 26 | # Kinda cool, though, right? 27 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_distributed_flip_submitter-1.0.hda/lifeblood_8_8Driver_1lifeblood__distributed__flip__submitter_8_81.0/Tools.shelf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 10 | ROP 11 | 12 | 13 | $HDA_TABLE_AND_NAME 14 | 15 | Lifeblood 16 | 19 | 20 | RenderMan 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/urllib3/packages/ssl_match_hostname/__init__.py: -------------------------------------------------------------------------------- 1 | import sys 2 | 3 | try: 4 | # Our match_hostname function is the same as 3.10's, so we only want to 5 | # import the match_hostname function if it's at least that good. 6 | # We also fallback on Python 3.10+ because our code doesn't emit 7 | # deprecation warnings and is the same as Python 3.10 otherwise. 8 | if sys.version_info < (3, 5) or sys.version_info >= (3, 10): 9 | raise ImportError("Fallback to vendored code") 10 | 11 | from ssl import CertificateError, match_hostname 12 | except ImportError: 13 | try: 14 | # Backport of the function from a pypi module 15 | from backports.ssl_match_hostname import ( # type: ignore 16 | CertificateError, 17 | match_hostname, 18 | ) 19 | except ImportError: 20 | # Our vendored copy 21 | from ._implementation import CertificateError, match_hostname # type: ignore 22 | 23 | # Not needed, but documenting what we provide. 24 | __all__ = ("CertificateError", "match_hostname") 25 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/build_houdini.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e -o pipefail 3 | 4 | OUT=../dcc_plugins/houdini 5 | 6 | pushd $(dirname $0) 7 | 8 | mkdir -p $OUT/otls 9 | 10 | # assume houdini environment is initialized 11 | for fname in houdini/otls/*.hda; do 12 | hotl -l "${fname}" "$OUT/otls/${fname##*/}" 13 | done; 14 | 15 | rsync -arhv houdini/presets $OUT 16 | 17 | # copy client module 18 | rsync -arhv --exclude=__pycache__ --exclude="*.pyc" ../src/lifeblood_client $OUT/python2.7libs 19 | rsync -arhv --exclude=__pycache__ --exclude="*.pyc" ../src/lifeblood_client $OUT/python3.7libs 20 | rsync -arhv --exclude=__pycache__ --exclude="*.pyc" ../src/lifeblood_client $OUT/python3.9libs 21 | rsync -arhv --exclude=__pycache__ --exclude="*.pyc" ../src/lifeblood_client $OUT/python3.10libs 22 | rsync -arhv --exclude=__pycache__ --exclude="*.pyc" ../src/lifeblood_client $OUT/python3.11libs 23 | 24 | pushd $OUT 25 | if [ -f ../houdini.zip ]; then 26 | rm ../houdini.zip 27 | fi 28 | zip -r ../houdini.zip . --exclude "*__pycache__/" --exclude "*.pyc" --exclude "*.md" 29 | popd 30 | 31 | popd -------------------------------------------------------------------------------- /src/lifeblood/net_messages/interfaces.py: -------------------------------------------------------------------------------- 1 | from .messages import Message 2 | from .message_stream import MessageSendStreamBase 3 | from .address import DirectAddress 4 | 5 | from typing import Callable, Awaitable 6 | 7 | 8 | class MessageReceiverFactory: 9 | async def create_receiver(self, address: DirectAddress, message_callback: Callable[[Message], Awaitable[bool]]) -> "MessageReceiver": 10 | raise NotImplementedError() 11 | 12 | 13 | class MessageReceiver: 14 | def __init__(self, this_address: DirectAddress): 15 | self.__this_address = this_address 16 | 17 | def this_address(self) -> DirectAddress: 18 | return self.__this_address 19 | 20 | def stop(self): 21 | """ 22 | stop running receiver async task 23 | """ 24 | raise NotImplementedError() 25 | 26 | async def wait_till_stopped(self): 27 | raise NotImplementedError() 28 | 29 | 30 | class MessageStreamFactory: 31 | async def open_sending_stream(self, destination: DirectAddress, source: DirectAddress) -> MessageSendStreamBase: 32 | raise NotImplementedError() 33 | -------------------------------------------------------------------------------- /docs/source/nodes/core/split_waiter.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/split_waiter: 2 | 3 | ============ 4 | Split Waiter 5 | ============ 6 | 7 | Core task synchronization node. 8 | 9 | :ref:`Split concept` is one of the core Lifeblood's task concepts. 10 | 11 | A Task will be held here until all tasks from the same split this task belongs to have arrived at this task. 12 | So tasks in a split will be synchronized in this node. 13 | 14 | When all tasks of a split are in the node, the original task that was split is teleported to this node, attributes from split tasks 15 | may be promoted to the original, and then original task is let through. Split tasks are killed after that. 16 | 17 | Parameters 18 | ========== 19 | 20 | Transfer Attributes 21 | 22 | :Attribute: 23 | name of an attribute to promote from children to parent 24 | :As: 25 | set promoted value to attribute of this name on parent 26 | :Sort By: 27 | how to sort children task before gathering values for promotion 28 | :Reversed: 29 | reverse the sort 30 | 31 | Attributes Set 32 | ============== 33 | 34 | Promoted attributes are set to the parent task 35 | -------------------------------------------------------------------------------- /src/lifeblood/net_messages/impl/tcp_message_receiver_factory.py: -------------------------------------------------------------------------------- 1 | from ..interfaces import MessageReceiverFactory 2 | from ..messages import Message 3 | from ..address import DirectAddress 4 | from ..exceptions import AddressTypeNotSupportedError 5 | from .tcp_message_receiver import TcpMessageReceiver 6 | 7 | from typing import Callable, Awaitable 8 | 9 | 10 | class TcpMessageReceiverFactory(MessageReceiverFactory): 11 | def __init__(self, backlog=4096): 12 | self.__backlog = backlog 13 | 14 | async def create_receiver(self, address: DirectAddress, message_callback: Callable[[Message], Awaitable[bool]]) -> TcpMessageReceiver: 15 | if address.count(':') != 1: 16 | raise AddressTypeNotSupportedError(f'address "{address}" is not of ":" format') 17 | host, sport = address.split(':') 18 | if host == '0.0.0.0': 19 | raise ValueError('catch-all listening address 0.0.0.0 is not supported for now') 20 | receiver = TcpMessageReceiver((host, int(sport)), message_callback, socket_backlog=self.__backlog) 21 | await receiver.start() 22 | return receiver 23 | -------------------------------------------------------------------------------- /docs/source/concepts.rst: -------------------------------------------------------------------------------- 1 | .. _concepts: 2 | 3 | ============= 4 | Main Concepts 5 | ============= 6 | 7 | .. toctree:: 8 | :hidden: 9 | 10 | invocation_comm_feature 11 | 12 | To be done 13 | 14 | Main Terms 15 | ========== 16 | 17 | .. _invocation: 18 | 19 | Invocation 20 | ---------- 21 | 22 | Addressing 23 | ========== 24 | 25 | .. _addresschain: 26 | 27 | Address Chain 28 | ------------- 29 | 30 | .. _environment_resolver_concept: 31 | 32 | Environment Resolver 33 | -------------------- 34 | 35 | see :ref:`environment_resolver` 36 | 37 | Task Processing 38 | =============== 39 | 40 | .. _stage_processing: 41 | 42 | Processing stage 43 | ---------------- 44 | 45 | .. _dead_tasks: 46 | 47 | Dead Tasks 48 | ---------- 49 | 50 | Task Relations 51 | ============== 52 | 53 | .. _task_parent_hierarchy: 54 | 55 | Task Parent Hierarchy 56 | --------------------- 57 | 58 | .. _concept_split: 59 | 60 | Task Split 61 | ---------- 62 | 63 | Invocation Runtime 64 | ================== 65 | 66 | Invocation communication 67 | ------------------------ 68 | 69 | read detailed description here :ref:`invocation comm feature` 70 | 71 | -------------------------------------------------------------------------------- /pkg_lifeblood_viewer/setup.cfg: -------------------------------------------------------------------------------- 1 | [metadata] 2 | 3 | name = lifeblood-viewer 4 | version = 0.3.0 5 | author = XAPKOHHEH 6 | description = view the LIFEBLOOD !! 7 | long_description = file: README.md 8 | long_description_content_type = text/markdown 9 | url = https://github.com/pedohorse/lifeblood 10 | project_urls = 11 | Bug Tracker = https://github.com/pedohorse/lifeblood/issues 12 | classifiers = 13 | Programming Language :: Python :: 3 14 | License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+) 15 | Operating System :: OS Independent 16 | 17 | [options] 18 | package_dir = 19 | = src 20 | packages = find: 21 | python_requires = >=3.9, <3.12 22 | install_requires = 23 | imgui~=2.0 24 | glfw~=2.5 25 | PyOpenGL~=3.1 26 | PySide6>=6.8,<6.10 27 | lz4~=4.0 28 | lifeblood~=0.1 29 | grandalf~=0.7 30 | numpy~=1.21 31 | 32 | [options.packages.find] 33 | where = src 34 | include = lifeblood_viewer* 35 | 36 | [options.package_data] 37 | lifeblood_viewer = icons/* 38 | 39 | [options.entry_points] 40 | console_scripts = 41 | lifeblood_viewer = lifeblood_viewer.launch:console_entry_point 42 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/urllib3/contrib/_appengine_environ.py: -------------------------------------------------------------------------------- 1 | """ 2 | This module provides means to detect the App Engine environment. 3 | """ 4 | 5 | import os 6 | 7 | 8 | def is_appengine(): 9 | return is_local_appengine() or is_prod_appengine() 10 | 11 | 12 | def is_appengine_sandbox(): 13 | """Reports if the app is running in the first generation sandbox. 14 | 15 | The second generation runtimes are technically still in a sandbox, but it 16 | is much less restrictive, so generally you shouldn't need to check for it. 17 | see https://cloud.google.com/appengine/docs/standard/runtimes 18 | """ 19 | return is_appengine() and os.environ["APPENGINE_RUNTIME"] == "python27" 20 | 21 | 22 | def is_local_appengine(): 23 | return "APPENGINE_RUNTIME" in os.environ and os.environ.get( 24 | "SERVER_SOFTWARE", "" 25 | ).startswith("Development/") 26 | 27 | 28 | def is_prod_appengine(): 29 | return "APPENGINE_RUNTIME" in os.environ and os.environ.get( 30 | "SERVER_SOFTWARE", "" 31 | ).startswith("Google App Engine/") 32 | 33 | 34 | def is_prod_appengine_mvms(): 35 | """Deprecated.""" 36 | return False 37 | -------------------------------------------------------------------------------- /install/README.md: -------------------------------------------------------------------------------- 1 | # Installation scripts 2 | 3 | > [!WARNING] 4 | > These scripts are **outdated**, please use [Lifeblood-Manager](https://github.com/pedohorse/lifeblood-manager/releases) 5 | > instead! 6 | 7 | 8 | There are multiple way of installing lifeblood, you can easily do it with pip, 9 | but here you can find even simpler "one-click" solutions 10 | 11 | see [documentation](https://pedohorse.github.io/lifeblood/installation.html) 12 | 13 | ### Linux/MacOs (never tested on macos) 14 | 15 | * `install.sh` - just copy install.sh to an empty directory where you want **Lifeblood** 16 | to be installed and run it from the terminal. 17 | 18 | ### Windows 19 | 20 | * `install.ps1` - just copy install.ps1 to an empty directory where you want **Lifeblood** 21 | to be installed and run it from the terminal. 22 | 23 | Unlike `pip` method, this will bring the freshest from github. 24 | By default it will bring the latest master branch, but you can specify another branch to it. 25 | You can also use the same script for updating lifeblood. 26 | different lifeblood versions will be installed in different subdirectories, 27 | with `current` (symlink) pointing at the latest installed -------------------------------------------------------------------------------- /docs/source/nodes/core/environment_resolver_arguments_setter.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/environment_resolver_arguments_setter: 2 | 3 | ===================================== 4 | Modify Environment Resolver Arguments 5 | ===================================== 6 | 7 | Modifies Environment Resolver information of the task. 8 | 9 | :ref:`Environment Resolver` is one of core concepts related to invocation running. 10 | 11 | Parameters 12 | ========== 13 | 14 | :Mode: 15 | * Set - sets/resets environment resolver information 16 | * Modify - modifies existing environment resolver information 17 | :Resolver: 18 | Environment Resolver type name to set 19 | :Arguments To Set: 20 | Environment Resolver arguments to set. 21 | 22 | For default Lifeblood's environment resolvers, here you most likely want to set such arguments as 23 | package names in form of ``package.`` to value that can be iterpreted as version specification by Semantic Versioning standard, 24 | for example ``~=1.2.3`` 25 | :Arguments To Delete: 26 | In Modify mode - list of environment resolver arguments to delete 27 | 28 | Attributes Set 29 | ============== 30 | 31 | None 32 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: lint 2 | 3 | on: 4 | push: 5 | 6 | jobs: 7 | # pylint: 8 | # runs-on: ubuntu-latest 9 | # 10 | # steps: 11 | # - uses: actions/checkout@v4 12 | # - name: Set up Python 3.11 13 | # uses: actions/setup-python@v5 14 | # with: 15 | # python-version: '3.11' 16 | # - name: Install dependencies 17 | # run: | 18 | # python -m pip install --upgrade pip 19 | # pip install pylint 20 | # - name: Analysing the code with pylint 21 | # run: | 22 | # pylint `ls -R|grep .py$|xargs` 23 | 24 | flake8: 25 | runs-on: ubuntu-latest 26 | 27 | steps: 28 | - uses: actions/checkout@v4 29 | - name: Set up Python 3.11 30 | uses: actions/setup-python@v5 31 | with: 32 | python-version: '3.11' 33 | - name: Install dependencies 34 | run: | 35 | python -m pip install --upgrade pip 36 | pip install flake8 37 | - name: Analysing the code with flake8 38 | run: | 39 | flake8 ./src --count --exit-zero --max-complexity=10 --max-line-length=256 --statistics --format='::warning file=%(path)s,line=%(row)d,col=%(col)d::%(code)s %(text)s' 40 | -------------------------------------------------------------------------------- /docs/source/nodes/core/wedge.rst: -------------------------------------------------------------------------------- 1 | .. _nodes/core/wedge: 2 | 3 | ================ 4 | Wedge Attributes 5 | ================ 6 | 7 | Split incoming task into some number of split tasks, where each of split tasks will hold a variation of an attribute 8 | 9 | :ref:`Split concept` is one of the core Lifeblood's task concepts. 10 | 11 | Parameters 12 | ========== 13 | 14 | :Wedge Type: 15 | Create split tasks based on: 16 | 17 | * by count 18 | create a set number of split tasks 19 | * by inc 20 | create number of split tasks based on a range of values 21 | 22 | :Attribute: 23 | Name of the attribute to hold the wedged value 24 | :From: 25 | Starting value for wedges 26 | :To: 27 | For type "by count": ending value for wedges 28 | :Count: 29 | For type "by count": number of values to split from-to range into 30 | :Max: 31 | For type "by inc": the maximum value of the range 32 | :Inc: 33 | For type "by inc": the increment. starting from value "from" a split task will be created 34 | adding "inc" to it until value is higher than "max" 35 | 36 | 37 | Attributes Set 38 | ============== 39 | 40 | Attributes being wedged will be set on task splits 41 | -------------------------------------------------------------------------------- /src/lifeblood/rwlock.py: -------------------------------------------------------------------------------- 1 | from threading import Lock 2 | from contextlib import contextmanager 3 | 4 | 5 | class RWLock: 6 | def __init__(self): 7 | self.__helper_lock = Lock() 8 | self.__wlock = Lock() 9 | self.__num_readers = 0 10 | 11 | def acquire_reader(self): 12 | with self.__helper_lock: 13 | if self.__num_readers == 0: 14 | self.__wlock.acquire() 15 | self.__num_readers += 1 16 | 17 | def release_reader(self): 18 | with self.__helper_lock: 19 | self.__num_readers -= 1 20 | if self.__num_readers == 0: 21 | self.__wlock.release() 22 | 23 | def acquire_writer(self): 24 | self.__wlock.acquire() 25 | 26 | def release_writer(self): 27 | self.__wlock.release() 28 | 29 | @contextmanager 30 | def reader_lock(self): 31 | try: 32 | self.acquire_reader() 33 | yield 34 | finally: 35 | self.release_reader() 36 | 37 | @contextmanager 38 | def writer_lock(self): 39 | try: 40 | self.acquire_writer() 41 | yield 42 | finally: 43 | self.release_writer() 44 | -------------------------------------------------------------------------------- /src/lifeblood/worker_pool_message_processor_client.py: -------------------------------------------------------------------------------- 1 | from contextlib import contextmanager 2 | from .enums import WorkerState 3 | from .net_messages.impl.tcp_simple_command_message_processor import TcpCommandMessageProcessor 4 | from .net_messages.impl.clients import CommandJsonMessageClient 5 | from .net_messages.address import AddressChain 6 | 7 | 8 | class WorkerPoolControlClient: 9 | def __init__(self, client: CommandJsonMessageClient): 10 | self.__client = client 11 | 12 | @classmethod 13 | @contextmanager 14 | def get_worker_pool_control_client(cls, scheduler_address: AddressChain, processor: TcpCommandMessageProcessor) -> "WorkerPoolControlClient": 15 | with processor.message_client(scheduler_address) as message_client: 16 | yield WorkerPoolControlClient(message_client) 17 | 18 | async def report_state(self, worker_id: int, state: WorkerState): 19 | await self.__client.send_command('worker.state_report', { 20 | 'worker_id': worker_id, 21 | 'state': state.value 22 | }) 23 | reply = await self.__client.receive_message() 24 | assert (await reply.message_body_as_json()).get('ok', False), 'something is not ok' 25 | -------------------------------------------------------------------------------- /src/lifeblood/main_workerpool.py: -------------------------------------------------------------------------------- 1 | import sys 2 | import argparse 3 | 4 | from . import simple_worker_pool_main 5 | 6 | 7 | def main(argv): 8 | parser = argparse.ArgumentParser('lifeblood pool') 9 | mut = parser.add_mutually_exclusive_group() 10 | mut.add_argument('--list', action='store_true', help='list availabele pool types') 11 | mut.add_argument('type', nargs='?', help='worker pool type to start') 12 | 13 | # a bit cheaty, but here we always have fixed amount of args 14 | opts = parser.parse_args(argv[:1]) 15 | remaining_args = argv[1:] 16 | 17 | known_types = {'simple': simple_worker_pool_main} 18 | if opts.list: 19 | print('known pool types:\n' + '\n'.join(f'\t{x}' for x in known_types)) 20 | return 21 | 22 | # for now it's hardcoded logic, in future TODO: make worker pools extendable as plugins 23 | if opts.type is None: 24 | print('no pool type provided!') 25 | parser.print_help() 26 | return 2 27 | if opts.type not in known_types: 28 | print(f'unknown pool type "{opts.type}"\nuse --list flag to list known pool types', file=sys.stderr) 29 | return 2 30 | 31 | known_types[opts.type].main(remaining_args) 32 | -------------------------------------------------------------------------------- /stock_tools/matrix_client/matrix_client/checks.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | # Copyright 2015 OpenMarket Ltd 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | 17 | def check_room_id(room_id): 18 | if not room_id.startswith("!"): 19 | raise ValueError("RoomIDs start with !") 20 | 21 | if ":" not in room_id: 22 | raise ValueError("RoomIDs must have a domain component, seperated by a :") 23 | 24 | 25 | def check_user_id(user_id): 26 | if not user_id.startswith("@"): 27 | raise ValueError("UserIDs start with @") 28 | 29 | if ":" not in user_id: 30 | raise ValueError("UserIDs must have a domain component, seperated by a :") 31 | -------------------------------------------------------------------------------- /dcc_plugins_workspace/houdini/otls/Driver-lifeblood_submitter-1.0.0.hda/lifeblood_8_8Driver_1lifeblood__submitter_8_81.0.0/ExtraFileOptions: -------------------------------------------------------------------------------- 1 | { 2 | "OnCreated/Cursor":{ 3 | "type":"intarray", 4 | "value":[9,85] 5 | }, 6 | "OnCreated/IsExpr":{ 7 | "type":"bool", 8 | "value":false 9 | }, 10 | "OnCreated/IsPython":{ 11 | "type":"bool", 12 | "value":true 13 | }, 14 | "OnCreated/IsScript":{ 15 | "type":"bool", 16 | "value":true 17 | }, 18 | "OnCreated/Source":{ 19 | "type":"string", 20 | "value":"" 21 | }, 22 | "PythonModule/Cursor":{ 23 | "type":"intarray", 24 | "value":[30,64] 25 | }, 26 | "PythonModule/IsExpr":{ 27 | "type":"bool", 28 | "value":false 29 | }, 30 | "PythonModule/IsPython":{ 31 | "type":"bool", 32 | "value":true 33 | }, 34 | "PythonModule/IsScript":{ 35 | "type":"bool", 36 | "value":true 37 | }, 38 | "PythonModule/Source":{ 39 | "type":"string", 40 | "value":"" 41 | }, 42 | "ViewerStateModule/CodeGenInput":{ 43 | "type":"string", 44 | "value":"{\n\t\"state_name\":\"\",\n\t\"state_label\":\"\",\n\t\"state_descr\":\"\",\n\t\"state_icon\":\"$HH/config/Icons\",\n\t\"state_debug_menu\":0,\n\t\"state_sample\":0,\n\t\"state_handler_indices\":[]\n}\n" 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/lifeblood/net_messages/address.py: -------------------------------------------------------------------------------- 1 | import re 2 | from typing import Tuple, Iterable, Union 3 | 4 | 5 | class AddressChain(str): 6 | _validity_re = re.compile(r'^[^|]+(?:\|[^|]+)*$|^$') # empty string is a valid invalid address 7 | 8 | def __new__(cls, source_str): 9 | if not cls._validity_re.match(source_str): 10 | raise ValueError(f'"{source_str}" is not a valid {cls.__name__}') 11 | return str.__new__(cls, source_str) 12 | 13 | def split_address(self) -> Tuple["DirectAddress", ...]: # TODO: move this to special module 14 | parts = self.strip().split('|') 15 | 16 | return tuple(DirectAddress(part) for part in parts) 17 | 18 | @classmethod 19 | def join_address(cls, address: Iterable["AddressChain"]) -> "AddressChain": 20 | # return '|'.join(':'.join(str(x) for x in part) for part in address) 21 | return cls('|'.join(address)) 22 | 23 | @classmethod 24 | def from_host_port(cls, host: str, port: int): 25 | return cls(f'{host}:{port}') 26 | 27 | 28 | class DirectAddress(AddressChain): 29 | _validity_re = re.compile(r'^[^|]+$|^$') # empty string is a valid invalid address 30 | 31 | 32 | AddressAny = Union[DirectAddress, AddressChain] 33 | 34 | 35 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/graphics_items/pretty_items/drawable_node_with_snap_points.py: -------------------------------------------------------------------------------- 1 | from .drawable_node import DrawableNode 2 | from .node_connection_snap_point import NodeConnSnapPoint 3 | from ..graphics_scene_base import GraphicsSceneBase 4 | 5 | from typing import List 6 | 7 | 8 | class DrawableNodeWithSnapPoints(DrawableNode): 9 | def __init__(self, scene: GraphicsSceneBase, id: int, type: str, name: str): 10 | super().__init__(scene, id, type, name) 11 | 12 | def input_snap_points(self) -> List[NodeConnSnapPoint]: 13 | # TODO: cache snap points, don't recalc them every time 14 | if self.get_nodeui() is None: 15 | return [] 16 | inputs = [] 17 | for input_name in self.get_nodeui().inputs_names(): 18 | inputs.append(NodeConnSnapPoint(self, input_name, True)) 19 | return inputs 20 | 21 | def output_snap_points(self) -> List[NodeConnSnapPoint]: 22 | # TODO: cache snap points, don't recalc them every time 23 | if self.get_nodeui() is None: 24 | return [] 25 | outputs = [] 26 | for output_name in self.get_nodeui().outputs_names(): 27 | outputs.append(NodeConnSnapPoint(self, output_name, False)) 28 | return outputs 29 | -------------------------------------------------------------------------------- /src/lifeblood_viewer/widgets/dialogs/message_dialog.py: -------------------------------------------------------------------------------- 1 | from PySide6.QtWidgets import QDialog, QHBoxLayout, QVBoxLayout, QTextEdit, QPushButton 2 | from PySide6.QtCore import QSize 3 | 4 | 5 | class MessageWithSelectableText(QDialog): 6 | """ 7 | dialog with a read-only text edit field 8 | good to preview long texts with ability to select-copy parts of it 9 | """ 10 | def __init__(self, text, parent=None): 11 | super(MessageWithSelectableText, self).__init__(parent) 12 | 13 | self.__main_layout = QVBoxLayout(self) 14 | self.__btn_layout = QHBoxLayout() 15 | 16 | self.__btn_ok = QPushButton('Ok') 17 | self.__edit_field = QTextEdit() 18 | self.__edit_field.setReadOnly(True) 19 | 20 | self.__btn_layout.addStretch() 21 | self.__btn_layout.addWidget(self.__btn_ok) 22 | 23 | self.__main_layout.addWidget(self.__edit_field) 24 | self.__main_layout.addLayout(self.__btn_layout) 25 | 26 | # connect 27 | self.__btn_ok.pressed.connect(self.accept) 28 | 29 | # postconnec 30 | self.set_text(text) 31 | 32 | def set_text(self, text: str): 33 | self.__edit_field.setText(text) 34 | 35 | def sizeHint(self): 36 | return QSize(800, 600) 37 | -------------------------------------------------------------------------------- /tests/nodes/test_split_waiter_integration.py: -------------------------------------------------------------------------------- 1 | from lifeblood_testing_common.integration_common import FullIntegrationTestCase 2 | 3 | from typing import Iterable 4 | 5 | 6 | class SplitWaiterIntegrationTest(FullIntegrationTestCase): 7 | __test__ = True 8 | 9 | @classmethod 10 | def _initial_db_file(cls) -> str: 11 | return 'data/test_splitint.db' 12 | 13 | async def _create_test_tasks(self) -> Iterable[int]: 14 | tasks = [ 15 | *await self._create_task(node_name='TEST IN', attributes={'froimes': list(range(11, 211))}), 16 | ] 17 | return tasks 18 | 19 | def _expected_task_attributes(self): 20 | return { 21 | 0: {'farmes': list(range(22, 422, 2))}, 22 | } 23 | 24 | async def _additional_checks_on_finish(self, task_attributes): 25 | stat = await self.scheduler.data_access.invocations_statistics() 26 | self.assertEqual(50, stat.total) 27 | self.assertEqual(50, stat.finished_good) 28 | self.assertEqual(0, stat.finished_bad) 29 | 30 | def _minimal_idle_to_ensure(self) -> int: 31 | return 2 32 | 33 | def _minimal_total_to_ensure(self) -> int: 34 | return 4 35 | 36 | def _timeout(self) -> float: 37 | return 90.0 38 | -------------------------------------------------------------------------------- /src/lifeblood/timestamp.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime, timezone 2 | 3 | from typing import Union 4 | 5 | def global_timestamp_int() -> int: 6 | """ 7 | tz/location independent global timestamp 8 | with persistent origin point 9 | """ 10 | return int(datetime.utcnow().timestamp()) 11 | 12 | 13 | def global_timestamp_float() -> float: 14 | """ 15 | tz/location independent global timestamp 16 | with persistent origin point 17 | """ 18 | return datetime.utcnow().timestamp() 19 | 20 | 21 | def global_timestamp_datetime() -> datetime: 22 | """ 23 | tz/location independent global timestamp 24 | with persistent origin point 25 | """ 26 | return datetime.utcnow() 27 | 28 | 29 | def global_timestamp_to_local_datetime(timestamp: Union[int, float, datetime]) -> datetime: 30 | """ 31 | convert global (utc) timestamp to local time datetime 32 | """ 33 | if isinstance(timestamp, (int, float)): 34 | ts = datetime.fromtimestamp(timestamp) 35 | ts = ts.replace(tzinfo=timezone.utc) 36 | elif isinstance(timestamp, datetime): 37 | ts = timestamp.replace(tzinfo=timezone.utc) 38 | else: 39 | raise ValueError(f'wrong timestamp type {type(timestamp)}: {repr(timestamp)}') 40 | 41 | return ts.astimezone() 42 | --------------------------------------------------------------------------------