Ryven PyPI Package and ryvencore
This release brings mainly large architectural changes. Ryven is at this point more a platform than just an application. See also the new README for additional info about current state.
main changes
- Ryven is now a Python package on PyPI, the repository got restructured and cleaned accordingly (big thanks @mmorys)
- ryvencore is now a fully independent library and has its own repository here
- removed macros (see below)
removing native macro support for now
While the alpha release of Ryven 3 had native support for macros (/subgraphs/whatever you might call them), I decided to remove them, for the following reasons:
- Ryven should be thought of rather as a platform which you use to build frameworks of node packages on top. Natively supporting macros, however, significantly complicates the development of all nodes that perform slightly more involved (but not necessarily unreasonable) actions (like analysing the graph), while many node packages might not really require macro support at all.
- Furthermore, the concept or semantic specification of macros is not obvious, many different approaches might seem reasonable. For example: whenever a macro node instance received data on some input, should all data currently residing on inputs of that instance be propagated into the subgraph? In which order? How can this be done efficiently? How should data propagation work for macros with exec I/O? The answers to those questions strongly depend on the use case.
- Also, abstraction functionality like macros provided it can totally be implemented purely based on Ryven's nodes system (meaning you can build node packages implementing this functionality). It often makes much more sense to apply this functionality only in an environment (nodes package/s) where a general abstraction system is already defined (for example, a system generating a source code from a graph, see also this example), which will answer all questions including the above for that environment. Then, nodes in that environment can be built with the implemented macro mechanics in mind.
So, I'm not really 'removing' possibilities here, but I think it makes more sense to focus on the nodes for the particular use case and design the system on that level accordingly. I might publish macros with configuration options as nodes package at some point, but it doesn't need to be part of Ryven itself.
translating your v3.0-alpha
nodes and projects
To bring your v3.0-alpha
node packages to v3.1
- change
from NENV import ...
/from NWENV import ...
tofrom ryven.NENV import ...
/from ryven.NWENV import ...
- change the signature of
Node.set_state
fromdef set_state(self, data: dict):
todef set_state(self, data: dict, version):
- add static
version
fields with values like'v0.0.1'
to your nodes. theversion
parameter inset_state
will reflect the node version under which the loaded node was saved (None
if not set), so you can use it to provide backwards compatibility and translate older versions of nodes to new ones to ensure old projects can be loaded
- add static
To bring your v3.0-alpha
projects to v3.1
- load the project in Ryven 3.1 (it should then run a function on it that turns macro scripts into normal scripts and removes all macro nodes from flows) and save it again