Commit graph

266 commits

Author SHA1 Message Date
Yann Lanthony
7eab289d30 [core] Graph: initial refactoring of graph loading API and logic
* API
Instead of having a single `load` function that exposes in its API
some elements only applicable to initializing a graph from a templates,
split it into 2 distinct functions: `load` and `initFromTemplate`.
Apply those changes to users of the API (UI, CLI), and simplify Graph
wrapper classes to better align with those concepts.

* Deserialization
Reduce the cognitive complexity of the deserizalization process
by splitting it into more atomic functions, while maintaining the
current behavior.
2025-02-06 16:46:04 +01:00
Yann Lanthony
c883c53397 [core] Refactor nodeFactory function
Rewrite `nodeFactory` to reduce cognitive complexity,
while preserving the current behavior.
2025-02-06 16:46:04 +01:00
Yann Lanthony
025e0e3322 [core] Move nodeFactory to its own module 2025-02-06 16:46:04 +01:00
waaake
3f47c54595 [ui] Application: Changing the current project refreshes the NodeEditor to reset the current Tab index 2024-12-31 09:56:48 +05:30
waaake
535f2f06b3 [core] Graph: Introduced 'isSaving' flag
The 'isSaving' flag is a way to identify if the project is currently being saved and serves as a way to correctly distinguish whether the current filepath change is due to a save or a new scene or a load operation
2024-12-30 10:25:56 +05:30
Yann Lanthony
a0398c45c0
[core] Graph: fix Graph.load missing return value
Add missing return statement for the load function, used by the UI to determine whether the load was successful.
2024-12-11 14:10:43 +01:00
Yann Lanthony
b0808f9040
[core] Fix errorneous docstring
Co-authored-by: Vivek <vivek_ve@outlook.com>
2024-11-18 10:07:02 +01:00
Yann Lanthony
61d35904ba [core] Discard attribute callbacks during graph loading 2024-11-14 19:11:08 +01:00
Yann Lanthony
c09a0d2327 [core] Add 'strictCompatibility' mode for loadGraph function
Provide a way to control how to handle node compatibility issues
when loading a Graph with the `strictCompatibility` parameter.
Introduce a new error type, GraphCompatibilityError, to be raised
when loading a Graph with compatibility issues with strictCompatibility enabled.
2024-11-14 19:11:08 +01:00
Aurore LAFAURIE
b6df2852e7 [ui] Recompute and Re-submit not allowed with Compatibility Nodes
Renaming of canCompute to canComputeTopologically to understand the static aspect of the function
2024-09-13 18:32:46 +02:00
Candice Bentéjac
41e885d9ff Linting: Clean-up files 2024-09-12 10:50:13 +02:00
Candice Bentéjac
b726387534 [core] Graph: Support loading files with previous UID system
The file version is updated and support for files with an older version
is added: upon detecting that the file version is old, the old UID
keys will be detected and reformatted with new ones so the file can
be properly loaded.
2024-09-12 10:41:53 +02:00
Candice Bentéjac
9973298746 [core] Simplify invalidation status for all the attributes
The UID system based on a UID index is removed and replaced by a single
UID per node.

Attributes will be included in the UID computation if the `invalidate`
is set to `True` in their description. This replaces the `uid=[]` /
`uid=[0]` element of the description.
2024-09-12 10:41:53 +02:00
Aurore LAFAURIE
5b92df328f Implementation of Homepage 2024-08-26 16:21:26 +02:00
Candice Bentéjac
5b07f9a393 [core] Exclude edges from InputNode nodes in dfsToProcess
If the edges of a node to submit include an `InputNode` (which cannot
be computed), then that node should be excluded from the list of edges
to process as if that node had already been computed.

This allows to submit any type of graph involving `InputNode` to the farm.
2024-07-02 12:18:35 +02:00
Candice Bentéjac
2bcf9d432c [core] Graph: Remove selectedViewpoint property
The information that this property conveys will be accessible at an upper
level and is thus redundant here.
2024-06-27 15:04:53 +02:00
Candice Bentéjac
d585b053a5 [core] Graph: Add a selectedViewpoint property
The `selectedViewpoint` property will store the attribute corresponding to
the actively selected viewpoint, if it exists. Otherwise, it will be set
to None.
2024-06-20 15:47:04 +02:00
Candice Bentéjac
154babbf5c
Merge pull request #2440 from alicevision/dev/sortToSave
File export ordering
2024-06-17 11:35:55 +02:00
Fabien Castan
8451f299ab Remove extra logging 2024-06-17 09:36:37 +02:00
Fabien Castan
620ba0c2cf [core] sort nodes by name in file export
Avoid randomness in the ordering during file export to facilitate
comparison of scene files.
2024-06-16 21:31:54 +02:00
Fabien Castan
3c4ebd9b25 [core] sort node types versions in file export 2024-06-16 21:29:23 +02:00
Fabien Castan
77571dca38 [core] init nodes uids from project file 2024-06-16 18:54:37 +02:00
Fabien Castan
d5e356c0aa [core] New dynamic output attributes 2024-06-15 19:47:29 +02:00
Fabien Castan
020dbecc68 [core] attribute: new initValue, independant from the resetToDefaultValue
Avoid to evaluate the default value if we don't need to.
2024-06-15 18:05:24 +02:00
Aurore LAFAURIE
0fc1c2f625 [core] Fix assign file date when saving file
When saving file we need to assign the new file date to prevent modified file popup
2024-06-03 15:28:23 +02:00
Fabien Castan
45fd86e51b
Merge pull request #2396 from alicevision/fix/getLatestSfMNode
[ui/core] Fix get latest SfM node for previz
2024-06-01 11:37:21 +02:00
Aurore LAFAURIE
e63c2df2a8 Compare last saved date before saving to prevent overwrite 2024-05-27 16:43:00 +02:00
Aurore LAFAURIE
663b6b66d4 [ui/core] Order last node of type according to node's depth and name 2024-05-17 10:27:32 +02:00
Aurore LAFAURIE
4e8c0c2cf8 [ui/core] Fix get latest SfM node for previz 2024-04-30 15:42:08 +02:00
Aurore LAFAURIE
5d70a51285 [core] Set internal attributes when copy/pasting nodes 2024-04-26 15:56:26 +02:00
Candice Bentéjac
e9ee9f2315 Update ListAttributes identically when removing edges or nodes
The behaviour regarding `ListAttributes` was different depending on
whether an edge or a node was removed:
- if an edge was removed, the `ListAttribute` that was the destination
of that edge had its corresponding element completely removed;
- if a node was removed, the `ListAttribute` that was the destination
of one of the node's edges had its corresponding element reset, but not
removed.

With this behaviour, a user had different UIDs depending on whether
a single edge or the whole node had been removed where the UID should
always be identical.
2024-02-02 15:23:44 +01:00
Candice Bentéjac
610ac36376 [core] Preserve edges by recreating all the nodes during UID evaluation
Up until this commit, compatibility nodes (which necessarily had a version
or description issue) were ignored during the evaluation of UID conflicts,
as they had no UID.

This however created a bug, where already existing compatibility nodes
with inputs from nodes that triggered UID conflicts were losing their
input connections: when the node with the UID conflict was replaced with
a new compatibility node (with a UID conflict issue), the link was broken
and could not be resolved anymore as it lost any mention of the input
node's name. This was also valid for nodes without any compatibility issue
which had UID conflicted-nodes as their inputs.

Processing all the nodes in addition to those with a UID conflict issue
prevents this from happening: edges are correctly preserved.

This also fixes an issue that occurred when opening a project file that
contained nodes whose type was not recognized. Instead of raising an
"unknown node type" compatibility issue, "attribute is already connected"
errors were raised for the unrecognized nodes.
2023-07-24 15:26:37 +02:00
Candice Bentéjac
cdf5c6746f [core] Graph: Detect UID conflicts when loading a graph
When loading the graph, once all the nodes have been created and the
links resolved, the computed nodes' UID can be compared with those
stored in the graph.

If a mismatch is detected, the node that presents the UID conflict is
removed from the graph and replaced with a CompatibilityNode, set with
`UidConflict`.

Nodes that come from templates are ignored as no UID is stored in
templates. Similarly, nodes that are already Compatibility nodes are left
out as they do not have a UID.
2023-06-16 09:02:59 +02:00
Loïc Vital
750d2d9b34 [core] graph: propagate dependenciesOnly through flowEdges args 2023-06-15 02:10:18 -07:00
Loïc Vital
a30027bcf9 [core] use dependencies only for flow edges computation 2023-06-15 02:00:52 -07:00
Fabien Castan
ce2085faad
Merge pull request #1744 from alicevision/dev/internalAttributes
Add internal attributes in "Notes" tab
2023-03-05 13:46:47 +01:00
Candice Bentéjac
99b82e601f Ignore "Publish" nodes when loading a template unless specified otherwise
This commit adds an option to the "load" method, "publishOutputs", that
determines whether "Publish" nodes in a template project file should be
ignored during the graph's creation.

If "publishOutputs=True", then the "Publish" nodes from the template will
be added to the graph. "Publish" nodes in a project file that is not
a template will not be affected by this and will always be added to the
graph, as any other node.

This allows to have templates that are compatible with meshroom_batch,
which requires a "Publish" node when the --output option is specified,
while not having unneeded nodes in the UI or unneeded operations:
when --output is specified in meshroom_batch, "publishOutputs=True",
otherwise it will be set to False so that the "Publish" nodes are not
executed needlessly.
2023-02-27 18:34:51 +01:00
Candice Bentéjac
91db7657ac [core] Don't write "internalInputs" entry in templates if there are only default values
Non-default internal attributes need to be written in the templates,
but the "internalInputs" entry in the dictionary should not be written
at all if all the internal attributes are set to their default values.
2023-02-15 08:36:13 +00:00
Candice Bentéjac
fe3a0764b0 [core] Do not save default internal attributes in template mode 2023-02-15 08:36:11 +00:00
Candice Bentéjac
9bc9e2c129 Add "Notes" tab with "comment"/"invalid comment" attributes
Add two internal attributes, "Comment" and "Invalid comment", in
a specific "Notes" tab, which will contain any further internal
attribute. Internal attributes exist for all nodes.
2023-02-15 08:36:10 +00:00
Candice Bentéjac
635f85e7fd Remove all references to pyCompatibility
- "pyCompatibility.basestring" are replaced by standard Python3 "str"
- "Sequence" and "Iterable" from "collections" are now directly imported
with "collections.abc"
2022-12-05 17:16:21 +01:00
Fabien Castan
ffca9c68e3
Merge pull request #1824 from alicevision/dev/submitterJobTitles
[submitters] Add an option to update the job title on submitters
2022-12-05 16:22:33 +01:00
Candice Bentéjac
eac43c84c3 [submitters] Add an option to update the job title on submitters 2022-12-05 15:23:10 +01:00
Candice Bentéjac
b08f83552e [ui] Clear locally submitted nodes before loading a new graph
When loading a new graph while the opened one was locally computing nodes,
computations were automatically stopped to be able to load the new graph.
However, the computing chunks' status were not being updated before
the graphs were switched up. This meant that opening that previously
computing graph again would lead to a display in which nodes appeared to
be computing although there was no ongoing computations.
2022-11-28 10:06:57 +01:00
Candice Bentéjac
10844747f0 [core] Do not write outputs, internal folder and parallelization in templates
For every node, the only information that is kept when saving a
template are the non-default input attributes' values as well as the
node's position.

The unit test checking the templates' nodes is updated to stop taking
outputs into account.
2022-10-21 16:54:17 +02:00
Candice Bentéjac
371c8a2238 [core] Do not write nodes' UIDs when saving templates 2022-10-21 16:20:37 +02:00
Fabien Castan
243c278bcc
Merge pull request #1778 from alicevision/dev/lv/useLastPathForOpenSave
Use most recent project as base folder for file dialogs
2022-09-28 23:06:54 +02:00
Loïc Vital
d0fcb67d1c [ui] rename Import Scene to Import Project for coherent naming 2022-09-23 11:22:36 +02:00
Candice Bentéjac
aa728919c8 [core] Explicitly set "template" key to false when saving as a regular file 2022-09-23 09:20:44 +02:00
Fabien Castan
27faf9f77c
Merge pull request #1758 from alicevision/dev/copyPasteNode
Support copying/pasting a node in the Graph Editor
2022-09-08 17:42:12 +02:00