shinestacker 1.0.1__tar.gz → 1.0.2__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 shinestacker might be problematic. Click here for more details.

Files changed (136) hide show
  1. {shinestacker-1.0.1 → shinestacker-1.0.2}/CHANGELOG.md +24 -0
  2. {shinestacker-1.0.1/src/shinestacker.egg-info → shinestacker-1.0.2}/PKG-INFO +1 -1
  3. shinestacker-1.0.2/src/shinestacker/_version.py +1 -0
  4. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/gui_run.py +2 -2
  5. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/main_window.py +7 -4
  6. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/project_controller.py +2 -1
  7. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/io_gui_handler.py +21 -17
  8. {shinestacker-1.0.1 → shinestacker-1.0.2/src/shinestacker.egg-info}/PKG-INFO +1 -1
  9. shinestacker-1.0.1/src/shinestacker/_version.py +0 -1
  10. {shinestacker-1.0.1 → shinestacker-1.0.2}/.coveragerc +0 -0
  11. {shinestacker-1.0.1 → shinestacker-1.0.2}/.flake8 +0 -0
  12. {shinestacker-1.0.1 → shinestacker-1.0.2}/.github/workflows/ci-multiplatform.yml +0 -0
  13. {shinestacker-1.0.1 → shinestacker-1.0.2}/.github/workflows/pylint.yml +0 -0
  14. {shinestacker-1.0.1 → shinestacker-1.0.2}/.github/workflows/pypi-publish.yml +0 -0
  15. {shinestacker-1.0.1 → shinestacker-1.0.2}/.github/workflows/release.yml +0 -0
  16. {shinestacker-1.0.1 → shinestacker-1.0.2}/.gitignore +0 -0
  17. {shinestacker-1.0.1 → shinestacker-1.0.2}/.pylintrc +0 -0
  18. {shinestacker-1.0.1 → shinestacker-1.0.2}/.readthedocs.yaml +0 -0
  19. {shinestacker-1.0.1 → shinestacker-1.0.2}/LICENSE +0 -0
  20. {shinestacker-1.0.1 → shinestacker-1.0.2}/MANIFEST.in +0 -0
  21. {shinestacker-1.0.1 → shinestacker-1.0.2}/README.md +0 -0
  22. {shinestacker-1.0.1 → shinestacker-1.0.2}/THIRD_PARTY_LICENSES.txt +0 -0
  23. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/alignment.md +0 -0
  24. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/api.md +0 -0
  25. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/balancing.md +0 -0
  26. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/conf.py +0 -0
  27. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/focus_stacking.md +0 -0
  28. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/gui.md +0 -0
  29. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/index.md +0 -0
  30. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/job.md +0 -0
  31. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/main.md +0 -0
  32. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/multilayer.md +0 -0
  33. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/noise.md +0 -0
  34. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/requirements.txt +0 -0
  35. {shinestacker-1.0.1 → shinestacker-1.0.2}/docs/vignetting.md +0 -0
  36. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/coffee.gif +0 -0
  37. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/coffee_stack.jpg +0 -0
  38. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/extreme-vignetting.jpg +0 -0
  39. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/flies.gif +0 -0
  40. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/flies_stack.jpg +0 -0
  41. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/flow-diagram.png +0 -0
  42. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/gui-finder.png +0 -0
  43. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/gui-project-new.png +0 -0
  44. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/gui-project-run.png +0 -0
  45. {shinestacker-1.0.1 → shinestacker-1.0.2}/img/gui-retouch.png +0 -0
  46. {shinestacker-1.0.1 → shinestacker-1.0.2}/pyproject.toml +0 -0
  47. {shinestacker-1.0.1 → shinestacker-1.0.2}/requirements.txt +0 -0
  48. {shinestacker-1.0.1 → shinestacker-1.0.2}/scripts/build_release.py +0 -0
  49. {shinestacker-1.0.1 → shinestacker-1.0.2}/scripts/git-rev-list.sh +0 -0
  50. {shinestacker-1.0.1 → shinestacker-1.0.2}/scripts/validate-tomli.py +0 -0
  51. {shinestacker-1.0.1 → shinestacker-1.0.2}/setup.cfg +0 -0
  52. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/__init__.py +0 -0
  53. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/__init__.py +0 -0
  54. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/align.py +0 -0
  55. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/balance.py +0 -0
  56. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/base_stack_algo.py +0 -0
  57. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/denoise.py +0 -0
  58. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/depth_map.py +0 -0
  59. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/exif.py +0 -0
  60. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/multilayer.py +0 -0
  61. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/noise_detection.py +0 -0
  62. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/pyramid.py +0 -0
  63. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/sharpen.py +0 -0
  64. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/stack.py +0 -0
  65. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/stack_framework.py +0 -0
  66. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/utils.py +0 -0
  67. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/vignetting.py +0 -0
  68. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/algorithms/white_balance.py +0 -0
  69. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/app/__init__.py +0 -0
  70. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/app/about_dialog.py +0 -0
  71. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/app/gui_utils.py +0 -0
  72. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/app/help_menu.py +0 -0
  73. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/app/main.py +0 -0
  74. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/app/open_frames.py +0 -0
  75. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/app/project.py +0 -0
  76. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/app/retouch.py +0 -0
  77. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/config/__init__.py +0 -0
  78. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/config/config.py +0 -0
  79. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/config/constants.py +0 -0
  80. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/config/gui_constants.py +0 -0
  81. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/core/__init__.py +0 -0
  82. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/core/colors.py +0 -0
  83. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/core/core_utils.py +0 -0
  84. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/core/exceptions.py +0 -0
  85. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/core/framework.py +0 -0
  86. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/core/logging.py +0 -0
  87. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/__init__.py +0 -0
  88. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/action_config.py +0 -0
  89. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/action_config_dialog.py +0 -0
  90. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/base_form_dialog.py +0 -0
  91. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/colors.py +0 -0
  92. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/gui_images.py +0 -0
  93. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/gui_logging.py +0 -0
  94. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/ico/focus_stack_bkg.png +0 -0
  95. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/ico/shinestacker.icns +0 -0
  96. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/ico/shinestacker.ico +0 -0
  97. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/ico/shinestacker.png +0 -0
  98. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/ico/shinestacker.svg +0 -0
  99. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/img/close-round-line-icon.png +0 -0
  100. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/img/forward-button-icon.png +0 -0
  101. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/img/play-button-round-icon.png +0 -0
  102. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/img/plus-round-line-icon.png +0 -0
  103. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/menu_manager.py +0 -0
  104. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/new_project.py +0 -0
  105. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/project_converter.py +0 -0
  106. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/project_editor.py +0 -0
  107. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/project_model.py +0 -0
  108. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/select_path_widget.py +0 -0
  109. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/tab_widget.py +0 -0
  110. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/gui/time_progress_bar.py +0 -0
  111. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/__init__.py +0 -0
  112. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/base_filter.py +0 -0
  113. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/brush.py +0 -0
  114. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/brush_gradient.py +0 -0
  115. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/brush_preview.py +0 -0
  116. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/brush_tool.py +0 -0
  117. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/denoise_filter.py +0 -0
  118. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/display_manager.py +0 -0
  119. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/exif_data.py +0 -0
  120. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/file_loader.py +0 -0
  121. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/filter_manager.py +0 -0
  122. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/icon_container.py +0 -0
  123. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/image_editor_ui.py +0 -0
  124. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/image_viewer.py +0 -0
  125. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/io_manager.py +0 -0
  126. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/layer_collection.py +0 -0
  127. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/shortcuts_help.py +0 -0
  128. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/undo_manager.py +0 -0
  129. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/unsharp_mask_filter.py +0 -0
  130. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/vignetting_filter.py +0 -0
  131. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker/retouch/white_balance_filter.py +0 -0
  132. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker.egg-info/SOURCES.txt +0 -0
  133. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker.egg-info/dependency_links.txt +0 -0
  134. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker.egg-info/entry_points.txt +0 -0
  135. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker.egg-info/requires.txt +0 -0
  136. {shinestacker-1.0.1 → shinestacker-1.0.2}/src/shinestacker.egg-info/top_level.txt +0 -0
@@ -2,6 +2,26 @@
2
2
 
3
3
  This page reports the main releases only and the main changes therein.
4
4
 
5
+ ## [v1.0.2] - 2025-08-25
6
+ **Bug fixes**
7
+
8
+ ### Changes
9
+
10
+ * fixed context menu
11
+ * fixed retouch callback for shiestacker-project app
12
+ * fixed double image loading
13
+
14
+ ---
15
+
16
+ ## [v1.0.1] - 2025-08-25
17
+ **First stable release**
18
+
19
+ ### Changes
20
+
21
+ * added source file missing by mistake in v1.0.0
22
+
23
+ ---
24
+
5
25
  ## [v1.0.0] - 2025-08-25
6
26
  **First stable release**
7
27
 
@@ -17,6 +37,10 @@ This page reports the main releases only and the main changes therein.
17
37
  * code refactoring and various cleanup
18
38
  * bug fixes
19
39
 
40
+ Note
41
+
42
+ A source file was missing in this tag, and was added in v1.0.1
43
+
20
44
  ---
21
45
 
22
46
  ## [v0.5.0] - 2025-08-20
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -0,0 +1 @@
1
+ __version__ = '1.0.2'
@@ -133,11 +133,11 @@ class RunWindow(QTextEditLogger):
133
133
  def find_parent(widget, class_name):
134
134
  current = widget
135
135
  while current is not None:
136
- if current.__class__.__name__ == class_name:
136
+ if current.objectName() == class_name:
137
137
  return current
138
138
  current = current.parent()
139
139
  return None
140
- parent = find_parent(self, "MainWindow")
140
+ parent = find_parent(self, "mainWindow")
141
141
  if parent:
142
142
  parent.retouch_callback(path[1])
143
143
  else:
@@ -52,6 +52,7 @@ class MainWindow(QMainWindow, LogManager):
52
52
  def __init__(self):
53
53
  QMainWindow.__init__(self)
54
54
  LogManager.__init__(self)
55
+ self.setObjectName("mainWindow")
55
56
  self.project_controller = ProjectController(self)
56
57
  self.project_editor = self.project_controller.project_editor
57
58
  actions = {
@@ -139,6 +140,8 @@ class MainWindow(QMainWindow, LogManager):
139
140
  self.project_controller.activate_window_requested.connect(self.activateWindow)
140
141
  self.project_controller.enable_save_actions_requested.connect(
141
142
  self.menu_manager.save_actions_set_enabled)
143
+ self.project_controller.enable_sub_actions_requested.connect(
144
+ self.menu_manager.set_enabled_sub_actions_gui)
142
145
 
143
146
  def modified(self):
144
147
  return self.project_editor.modified()
@@ -286,9 +289,9 @@ class MainWindow(QMainWindow, LogManager):
286
289
  if current_action:
287
290
  menu = QMenu(self)
288
291
  if current_action.enabled():
289
- menu.addAction(self.disable_action)
292
+ menu.addAction(self.menu_manager.disable_action)
290
293
  else:
291
- menu.addAction(self.enable_action)
294
+ menu.addAction(self.menu_manager.enable_action)
292
295
  edit_config_action = QAction("Edit configuration")
293
296
  edit_config_action.triggered.connect(self.edit_current_action)
294
297
  menu.addAction(edit_config_action)
@@ -332,8 +335,8 @@ class MainWindow(QMainWindow, LogManager):
332
335
  self.browse_output_path_action.triggered.connect(self.browse_output_path)
333
336
  menu.addAction(self.browse_output_path_action)
334
337
  menu.addSeparator()
335
- menu.addAction(self.run_job_action)
336
- menu.addAction(self.run_all_jobs_action)
338
+ menu.addAction(self.menu_manager.run_job_action)
339
+ menu.addAction(self.menu_manager.run_all_jobs_action)
337
340
  if current_action.type_name == constants.ACTION_JOB:
338
341
  retouch_path = self.get_retouch_path(current_action)
339
342
  if len(retouch_path) > 0:
@@ -19,6 +19,7 @@ class ProjectController(QObject):
19
19
  refresh_ui_requested = Signal(int, int)
20
20
  activate_window_requested = Signal()
21
21
  enable_save_actions_requested = Signal(bool)
22
+ enable_sub_actions_requested = Signal(bool)
22
23
 
23
24
  def __init__(self, parent):
24
25
  super().__init__(parent)
@@ -323,7 +324,7 @@ class ProjectController(QObject):
323
324
  current_action, is_sub_action = self.get_current_action_at(job, action_index)
324
325
  if current_action:
325
326
  if not is_sub_action:
326
- self.set_enabled_sub_actions_gui(
327
+ self.enable_sub_actions_requested.emit(
327
328
  current_action.type_name == constants.ACTION_COMBO)
328
329
  dialog = self.action_config_dialog(current_action)
329
330
  if dialog.exec() == QDialog.Accepted:
@@ -56,8 +56,9 @@ class IOGuiHandler(QObject, LayerCollectionHandler):
56
56
  self.set_master_layer(master_layer)
57
57
  self.undo_manager.reset()
58
58
  self.blank_layer = np.zeros(master_layer.shape[:2])
59
- self.finish_loading_setup(stack, None, master_layer,
60
- f"Loaded: {self.current_file_path()}")
59
+ self.finish_loading_setup(
60
+ stack, None, master_layer, False,
61
+ f"Loaded: {self.current_file_path()}")
61
62
 
62
63
  def on_file_error(self, error_msg):
63
64
  QApplication.restoreOverrideCursor()
@@ -136,23 +137,26 @@ class IOGuiHandler(QObject, LayerCollectionHandler):
136
137
  msg.setText(str(e))
137
138
  msg.exec()
138
139
  return
139
- self.finish_loading_setup(stack, labels, master, "Selected frames imported")
140
+ self.finish_loading_setup(
141
+ stack, labels, master, True,
142
+ "Selected frames imported")
140
143
 
141
- def finish_loading_setup(self, stack, labels, master, message):
142
- if self.layer_stack() is None and len(stack) > 0:
143
- self.set_layer_stack(np.array(stack))
144
- if labels is None:
145
- labels = self.layer_labels()
144
+ def finish_loading_setup(self, stack, labels, master, add_layers, message):
145
+ if add_layers:
146
+ if self.layer_stack() is None and len(stack) > 0:
147
+ self.set_layer_stack(np.array(stack))
148
+ if labels is None:
149
+ labels = self.layer_labels()
150
+ else:
151
+ self.set_layer_labels(labels)
152
+ self.set_master_layer(master)
153
+ self.blank_layer = np.zeros(master.shape[:2])
146
154
  else:
147
- self.set_layer_labels(labels)
148
- self.set_master_layer(master)
149
- self.blank_layer = np.zeros(master.shape[:2])
150
- else:
151
- if labels is None:
152
- labels = self.layer_labels()
153
- for img, label in zip(stack, labels):
154
- self.add_layer_label(label)
155
- self.add_layer(img)
155
+ if labels is None:
156
+ labels = self.layer_labels()
157
+ for img, label in zip(stack, labels):
158
+ self.add_layer_label(label)
159
+ self.add_layer(img)
156
160
  self.display_manager.update_thumbnails()
157
161
  self.mark_as_modified_requested.emit(True)
158
162
  self.change_layer_requested.emit(0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: shinestacker
3
- Version: 1.0.1
3
+ Version: 1.0.2
4
4
  Summary: ShineStacker
5
5
  Author-email: Luca Lista <luka.lista@gmail.com>
6
6
  License-Expression: LGPL-3.0
@@ -1 +0,0 @@
1
- __version__ = '1.0.1'
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes