django-to-galaxy 0.6.9.5__tar.gz → 0.6.9.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of django-to-galaxy might be problematic. Click here for more details.

Files changed (62) hide show
  1. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/PKG-INFO +2 -2
  2. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/workflow.py +10 -0
  3. django_to_galaxy-0.6.9.6/django_to_galaxy/migrations/0010_workflow__is_meta_workflow__step_jobs_count.py +23 -0
  4. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/models/invocation.py +3 -1
  5. django_to_galaxy-0.6.9.6/django_to_galaxy/models/workflow.py +104 -0
  6. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/version.py +1 -1
  7. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/pyproject.toml +1 -1
  8. django_to_galaxy-0.6.9.5/django_to_galaxy/models/workflow.py +0 -58
  9. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/LICENSE +0 -0
  10. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/__init__.py +0 -0
  11. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/__init__.py +0 -0
  12. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/galaxy_element.py +0 -0
  13. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/galaxy_instance.py +0 -0
  14. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/galaxy_output_file.py +0 -0
  15. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/galaxy_user.py +0 -0
  16. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/history.py +0 -0
  17. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/invocation.py +0 -0
  18. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/admin/tag.py +0 -0
  19. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/__init__.py +0 -0
  20. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/asymetricslugrelatedfield.py +0 -0
  21. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/galaxy_instance.py +0 -0
  22. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/galaxy_output_file.py +0 -0
  23. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/galaxy_user.py +0 -0
  24. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/history.py +0 -0
  25. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/invocation.py +0 -0
  26. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/invoke_workflow.py +0 -0
  27. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/upload_to_history.py +0 -0
  28. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/serializers/workflow.py +0 -0
  29. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/urls.py +0 -0
  30. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/create_history.py +0 -0
  31. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/galaxy_instance.py +0 -0
  32. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/galaxy_output_file.py +0 -0
  33. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/galaxy_user.py +0 -0
  34. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/history.py +0 -0
  35. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/invocation.py +0 -0
  36. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/invoke_workflow.py +0 -0
  37. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/upload_to_history.py +0 -0
  38. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/api/views/workflow.py +0 -0
  39. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/apps.py +0 -0
  40. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0001_new_initial.py +0 -0
  41. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0002_rename_state_history_galaxy_state_and_more.py +0 -0
  42. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0003_invocation_create_time.py +0 -0
  43. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0004_alter_galaxyuser_email_galaxyoutputfile.py +0 -0
  44. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0005_alter_galaxyoutputfile_invocation_and_more.py +0 -0
  45. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0006_tag_history_tags_workflow_tags.py +0 -0
  46. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0007_format_alter_history_tags_alter_workflow_tags_and_more.py +0 -0
  47. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0008_workflowinput_label.py +0 -0
  48. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/0009_galaxyoutputfile_unique_galaxy_id_per_invocation.py +0 -0
  49. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/migrations/__init__.py +0 -0
  50. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/models/__init__.py +0 -0
  51. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/models/accepted_input.py +0 -0
  52. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/models/galaxy_element.py +0 -0
  53. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/models/galaxy_instance.py +0 -0
  54. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/models/galaxy_output_file.py +0 -0
  55. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/models/galaxy_user.py +0 -0
  56. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/models/history.py +0 -0
  57. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/schemas/__init__.py +0 -0
  58. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/schemas/dataset.py +0 -0
  59. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/settings.py +0 -0
  60. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/templates/admin/import_workflows.html +0 -0
  61. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/urls.py +0 -0
  62. {django_to_galaxy-0.6.9.5 → django_to_galaxy-0.6.9.6}/django_to_galaxy/utils.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: django-to-galaxy
3
- Version: 0.6.9.5
3
+ Version: 0.6.9.6
4
4
  Summary: Django extension that eases communication with Galaxy instance to execute workflows.
5
5
  Author: Kenzo-Hugo Hillion
6
6
  Author-email: hillion.kenzo@posteo.net
@@ -13,6 +13,8 @@ class WorkflowAdmin(GalaxyElementAdmin):
13
13
  "name",
14
14
  "annotation",
15
15
  "galaxy_id",
16
+ "get_is_meta",
17
+ "get_step_jobs_count",
16
18
  "published",
17
19
  "galaxy_owner",
18
20
  "get_tags",
@@ -22,11 +24,19 @@ class WorkflowAdmin(GalaxyElementAdmin):
22
24
  "name",
23
25
  "annotation",
24
26
  "galaxy_id",
27
+ "get_is_meta",
28
+ "get_step_jobs_count",
25
29
  "published",
26
30
  "galaxy_owner",
27
31
  "get_tags",
28
32
  )
29
33
 
34
+ def get_is_meta(self, obj):
35
+ return obj.get_is_meta()
36
+
37
+ def get_step_jobs_count(self, obj):
38
+ return obj.get_step_jobs_count()
39
+
30
40
  def get_tags(self, obj):
31
41
  return ", ".join([p.label for p in obj.tags.all()])
32
42
 
@@ -0,0 +1,23 @@
1
+ # Generated by Django 4.1 on 2025-02-12 13:28
2
+
3
+ from django.db import migrations, models
4
+
5
+
6
+ class Migration(migrations.Migration):
7
+
8
+ dependencies = [
9
+ ("django_to_galaxy", "0009_galaxyoutputfile_unique_galaxy_id_per_invocation"),
10
+ ]
11
+
12
+ operations = [
13
+ migrations.AddField(
14
+ model_name="workflow",
15
+ name="_is_meta",
16
+ field=models.BooleanField(default=None, null=True),
17
+ ),
18
+ migrations.AddField(
19
+ model_name="workflow",
20
+ name="_step_jobs_count",
21
+ field=models.PositiveIntegerField(default=0),
22
+ ),
23
+ ]
@@ -103,7 +103,9 @@ class Invocation(models.Model):
103
103
  for key in step["states"].keys():
104
104
  count_states[key] += 1
105
105
  try:
106
- percentage_done = count_states.get("ok", 0) / len(self.step_jobs_summary)
106
+ percentage_done = (
107
+ count_states.get("ok", 0) / self.workflow.get_step_jobs_count()
108
+ )
107
109
  except ZeroDivisionError:
108
110
  percentage_done = 0
109
111
  if percentage_done == 1:
@@ -0,0 +1,104 @@
1
+ from bioblend.galaxy.objects import wrappers
2
+ from django.db import models
3
+
4
+ from .history import History
5
+ from .invocation import Invocation
6
+ from .galaxy_element import GalaxyElement
7
+
8
+ from django_to_galaxy.utils import load_galaxy_invocation_time_to_datetime
9
+
10
+
11
+ class Workflow(GalaxyElement):
12
+ """Table for Galaxy workflows."""
13
+
14
+ galaxy_owner = models.ForeignKey(
15
+ "GalaxyUser", null=False, on_delete=models.CASCADE, related_name="workflows"
16
+ )
17
+ """Galaxy user that owns the workflow."""
18
+ _step_jobs_count = models.PositiveIntegerField(default=0)
19
+ """Number of step jobs of the workflow."""
20
+ _is_meta = models.BooleanField(null=True, default=None, blank=True)
21
+ """Indicates whether the workflow is a meta (i.e., has sub-workflows) or not."""
22
+
23
+ @property
24
+ def galaxy_workflow(self) -> wrappers.Workflow:
25
+ """Galaxy object using bioblend."""
26
+ if getattr(self, "_galaxy_workflow", None) is None:
27
+ self._galaxy_workflow = self._get_galaxy_workflow()
28
+ return self._galaxy_workflow
29
+
30
+ def _get_galaxy_workflow(self) -> wrappers.Workflow:
31
+ """Get galaxy object using bioblend."""
32
+ return self.galaxy_owner.obj_gi.workflows.get(self.galaxy_id)
33
+
34
+ def get_is_meta(self):
35
+ """Sets / returns _is_meta value."""
36
+ if self._is_meta is None:
37
+ self._is_meta = False
38
+ for key, step_dict in self.galaxy_workflow.steps.items():
39
+ w = step_dict.wrapped
40
+ if "workflow_id" in w:
41
+ self._is_meta = True
42
+ break
43
+ self.save(update_fields=["_is_meta"])
44
+ return self._is_meta
45
+
46
+ def get_step_jobs_count(self):
47
+ """Sets / returns _step_jobs_count value."""
48
+ if self._step_jobs_count == 0:
49
+ galaxy_wf = self.galaxy_workflow
50
+ step_jobs_count = 0
51
+ if self.get_is_meta():
52
+ # Total step jobs count for a meta wf
53
+ galaxy_client = self.galaxy_owner.obj_gi.gi
54
+ for key, step_dict in galaxy_wf.steps.items():
55
+ w = step_dict.wrapped
56
+ if "workflow_id" in w:
57
+ sub_wf = galaxy_client.make_get_request(
58
+ galaxy_client.base_url
59
+ + f"/api/workflows/{w['workflow_id']}",
60
+ params={"instance": "true"},
61
+ ).json()
62
+ for j in range(len(sub_wf["steps"])):
63
+ step = sub_wf["steps"][str(j)]
64
+ if "input" not in step["type"]:
65
+ step_jobs_count += 1
66
+ else:
67
+ # Total step jobs count for a simple wf
68
+ for key, step_dict in galaxy_wf.steps.items():
69
+ w = step_dict.wrapped
70
+ if "input" not in w["type"]:
71
+ step_jobs_count += 1
72
+ self._step_jobs_count = step_jobs_count
73
+ self.save(update_fields=["_step_jobs_count"])
74
+ return self._step_jobs_count
75
+
76
+ def invoke(self, datamap: dict, history: History) -> wrappers.Invocation:
77
+ """
78
+ Invoke workflow using bioblend.
79
+
80
+ Args:
81
+ datamap: dictionnary to link dataset to workflow inputs
82
+ history: history obj the dataset(s) come from
83
+
84
+ Returns:
85
+ Invocation object from bioblend
86
+ """
87
+ galaxy_inv = self.galaxy_workflow.invoke(
88
+ datamap, history=history.galaxy_history
89
+ )
90
+ # Create invocations
91
+ invocation = Invocation(
92
+ galaxy_id=galaxy_inv.id,
93
+ galaxy_state=galaxy_inv.state,
94
+ workflow=self,
95
+ history=history,
96
+ create_time=load_galaxy_invocation_time_to_datetime(galaxy_inv),
97
+ )
98
+ invocation.save()
99
+ # Create output files
100
+ invocation.create_output_files()
101
+ return invocation
102
+
103
+ def __repr__(self):
104
+ return f"Workflow: {super().__str__()}"
@@ -1,3 +1,3 @@
1
1
  """Handle library versioning."""
2
- version_info = (0, 6, 9, 5)
2
+ version_info = (0, 6, 9, 6)
3
3
  __version__ = ".".join(str(c) for c in version_info)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "django-to-galaxy"
3
- version = "0.6.9.5"
3
+ version = "0.6.9.6"
4
4
  description = "Django extension that eases communication with Galaxy instance to execute workflows."
5
5
  authors = ["Kenzo-Hugo Hillion <hillion.kenzo@posteo.net>"]
6
6
 
@@ -1,58 +0,0 @@
1
- from bioblend.galaxy.objects import wrappers
2
- from django.db import models
3
-
4
- from .history import History
5
- from .invocation import Invocation
6
- from .galaxy_element import GalaxyElement
7
-
8
- from django_to_galaxy.utils import load_galaxy_invocation_time_to_datetime
9
-
10
-
11
- class Workflow(GalaxyElement):
12
- """Table for Galaxy workflows."""
13
-
14
- galaxy_owner = models.ForeignKey(
15
- "GalaxyUser", null=False, on_delete=models.CASCADE, related_name="workflows"
16
- )
17
- """Galaxy user that owns the workflow."""
18
-
19
- @property
20
- def galaxy_workflow(self) -> wrappers.Workflow:
21
- """Galaxy object using bioblend."""
22
- if getattr(self, "_galaxy_workflow", None) is None:
23
- self._galaxy_workflow = self._get_galaxy_workflow()
24
- return self._galaxy_workflow
25
-
26
- def _get_galaxy_workflow(self) -> wrappers.Workflow:
27
- """Get galaxy object using bioblend."""
28
- return self.galaxy_owner.obj_gi.workflows.get(self.galaxy_id)
29
-
30
- def invoke(self, datamap: dict, history: History) -> wrappers.Invocation:
31
- """
32
- Invoke workflow using bioblend.
33
-
34
- Args:
35
- datamap: dictionnary to link dataset to workflow inputs
36
- history: history obj the dataset(s) come from
37
-
38
- Returns:
39
- Invocation object from bioblend
40
- """
41
- galaxy_inv = self.galaxy_workflow.invoke(
42
- datamap, history=history.galaxy_history
43
- )
44
- # Create invocations
45
- invocation = Invocation(
46
- galaxy_id=galaxy_inv.id,
47
- galaxy_state=galaxy_inv.state,
48
- workflow=self,
49
- history=history,
50
- create_time=load_galaxy_invocation_time_to_datetime(galaxy_inv),
51
- )
52
- invocation.save()
53
- # Create output files
54
- invocation.create_output_files()
55
- return invocation
56
-
57
- def __repr__(self):
58
- return f"Workflow: {super().__str__()}"