dataiku / dataiku/dataiku-api-client-python

get_graph() RecursionError: maximum recursion depth exceeded

Offen
#310 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Vorherrschende Sprache
Python
Sterne
44
Forks
29
Ø Merge
3 Std. 34 Min.
Gemergte PRs (30 T.)
2

Beschreibung

my conf:
ubuntu v 22. lts
Dataiku On Premise v 13.1.2

Exemple

The get_graph method in the DSSProjectFlow class does not support flows that have loops, causing a RecursionError when trying to get the flow graph for such projects.

function's reference : https://developer.dataiku.com/latest/api-reference/python/flow.html#dataikuapi.dss.flow.DSSProjectFlow.get_graph

Steps to Reproduce
  1. Create a project in Dataiku where a recipe has a dataset as output (last stage in the flow) but used as input of another recipe. Both input and output, forming a loop.
  2. Use the API to get the flow graph:
    import dataiku
    
    client = dataiku.api_client()
    project = client.get_project("YOUR_PROJECT_KEY")
    flow = project.get_flow()
    graph = flow.get_graph()  # This line causes the RecursionError below
    
    

DSSProjectFlowGraph.get_items_in_traversal_order..add_from(graph_node)
776 predecessor_node = self.nodes[predecessor_ref]
777 if not in_set(predecessor_node):
--> 778 add_from(predecessor_node)
780 # Then add ourselves
781 if not in_set(graph_node):

DSSProjectFlowGraph.get_items_in_traversal_order..add_from(graph_node)
775 for predecessor_ref in graph_node["predecessors"]:
776 predecessor_node = self.nodes[predecessor_ref]
--> 777 if not in_set(predecessor_node):
778 add_from(predecessor_node)
780 # Then add ourselves

DSSProjectFlowGraph.get_items_in_traversal_order..in_set(obj)
767 def in_set(obj):
768 for candidate in ret:
--> 769 if candidate["type"] == obj["type"] and candidate["ref"] == obj["ref"]:
770 return True
771 return False

RecursionError: maximum recursion depth exceeded in comparison

As a result, flows using data to rewrite the same directory become problematic only in certain cases
output dataset > used as intermediate dataset of a recipe upstream of this output dataset.
but not problematic in other cases, such as;
input folder > used as output folder at the end of the flow.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie bei DSSProjectFlow.get_graph und dem DSSProjectFlowGraph.get_items_in_traversal_order-Traceback und verwenden Sie dabei die bereitgestellte Reproduktion des Schleifenflusses. Überprüfen Sie, dass get_graph für ein Projekt abgeschlossen wird, dessen Ausgabedataset vorgelagert wiederverwendet wird, und fügen Sie eine Testabdeckung hinzu, die zeigt, dass die Schleife keinen RecursionError mehr verursacht.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
api
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.