ibridgesgui 0.2.0__tar.gz → 0.2.1__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.
Files changed (101) hide show
  1. ibridgesgui-0.2.1/.github/workflows/pypi_release.yml +39 -0
  2. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/PKG-INFO +6 -7
  3. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/README.md +5 -6
  4. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/docs/getting-started.qmd +3 -3
  5. ibridgesgui-0.2.1/docs/screenshots/add_check_config.png +0 -0
  6. ibridgesgui-0.2.1/docs/screenshots/add_new_config.png +0 -0
  7. ibridgesgui-0.2.1/docs/screenshots/browser.png +0 -0
  8. ibridgesgui-0.2.1/docs/screenshots/delete.png +0 -0
  9. ibridgesgui-0.2.1/docs/screenshots/login.png +0 -0
  10. ibridgesgui-0.2.1/docs/screenshots/metadata.png +0 -0
  11. ibridgesgui-0.2.1/docs/screenshots/permissions.png +0 -0
  12. ibridgesgui-0.2.1/docs/screenshots/replicas.png +0 -0
  13. ibridgesgui-0.2.1/docs/screenshots/search.png +0 -0
  14. ibridgesgui-0.2.1/docs/screenshots/start_ibridges.png +0 -0
  15. ibridgesgui-0.2.1/docs/screenshots/sync.png +0 -0
  16. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/docs/userdoc.qmd +1 -1
  17. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/__main__.py +10 -5
  18. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/_version.py +2 -2
  19. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/browser.py +2 -1
  20. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/gui_utils.py +3 -1
  21. ibridgesgui-0.2.1/ibridgesgui/icons/logo.png +0 -0
  22. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/popup_widgets.py +2 -0
  23. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/sync.py +4 -2
  24. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/threads.py +2 -0
  25. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/MainMenu.py +17 -13
  26. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/MainMenu.ui +29 -12
  27. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/configCheck.py +39 -27
  28. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/configCheck.ui +28 -8
  29. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/createCollection.py +42 -36
  30. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/createCollection.ui +25 -28
  31. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/irodsLogin.py +41 -52
  32. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/irodsLogin.ui +25 -17
  33. ibridgesgui-0.2.1/ibridgesgui/ui_files/renameItem.py +94 -0
  34. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/renameItem.ui +24 -7
  35. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabBrowser.py +104 -145
  36. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabBrowser.ui +53 -46
  37. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabInfo.py +40 -57
  38. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabInfo.ui +15 -10
  39. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabSearch.py +46 -67
  40. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabSearch.ui +18 -17
  41. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabSync.py +30 -15
  42. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabSync.ui +29 -14
  43. ibridgesgui-0.2.1/ibridgesgui/ui_files/welcome.py +48 -0
  44. ibridgesgui-0.2.1/ibridgesgui/ui_files/welcome.ui +47 -0
  45. ibridgesgui-0.2.1/ibridgesgui/welcome.py +42 -0
  46. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/PKG-INFO +6 -7
  47. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/SOURCES.txt +5 -4
  48. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/pyproject.toml +1 -2
  49. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/requirements.txt +1 -1
  50. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/requirements_dev.txt +2 -2
  51. ibridgesgui-0.2.0/docs/screenshots/add_check_config.png +0 -0
  52. ibridgesgui-0.2.0/docs/screenshots/add_new_config.png +0 -0
  53. ibridgesgui-0.2.0/docs/screenshots/browser.png +0 -0
  54. ibridgesgui-0.2.0/docs/screenshots/delete.png +0 -0
  55. ibridgesgui-0.2.0/docs/screenshots/login.png +0 -0
  56. ibridgesgui-0.2.0/docs/screenshots/metadata.png +0 -0
  57. ibridgesgui-0.2.0/docs/screenshots/permissions.png +0 -0
  58. ibridgesgui-0.2.0/docs/screenshots/replicas.png +0 -0
  59. ibridgesgui-0.2.0/docs/screenshots/search.png +0 -0
  60. ibridgesgui-0.2.0/docs/screenshots/start_ibridges.png +0 -0
  61. ibridgesgui-0.2.0/docs/screenshots/sync.png +0 -0
  62. ibridgesgui-0.2.0/ibridgesgui/ui_files/dataTransferState.py +0 -114
  63. ibridgesgui-0.2.0/ibridgesgui/ui_files/dataTransferState.ui +0 -187
  64. ibridgesgui-0.2.0/ibridgesgui/ui_files/renameItem.py +0 -77
  65. ibridgesgui-0.2.0/ibridgesgui/ui_files/tabUpDownload.py +0 -303
  66. ibridgesgui-0.2.0/ibridgesgui/ui_files/tabUpDownload.ui +0 -460
  67. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.flake8 +0 -0
  68. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  69. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  70. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/dependabot.yml +0 -0
  71. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/workflows/linter.yml +0 -0
  72. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/workflows/publish.yml +0 -0
  73. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.gitignore +0 -0
  74. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/LICENSE +0 -0
  75. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/_quarto.yml +0 -0
  76. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/docs/info.qmd +0 -0
  77. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/__init__.py +0 -0
  78. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/config.py +0 -0
  79. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/arrow-left.png +0 -0
  80. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/arrow-right.png +0 -0
  81. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/arrow-up.png +0 -0
  82. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/home.png +0 -0
  83. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/iBridges.ico +0 -0
  84. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/loading_circle.gif +0 -0
  85. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/nosync.png +0 -0
  86. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/refresh.png +0 -0
  87. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/syncing.png +0 -0
  88. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/info.py +0 -0
  89. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/irods_tree_model.py +0 -0
  90. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/login.py +0 -0
  91. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/search.py +0 -0
  92. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/.py +0 -0
  93. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/ExampleTab.py +0 -0
  94. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/ExampleTab.ui +0 -0
  95. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/__init__.py +0 -0
  96. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/dependency_links.txt +0 -0
  97. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/entry_points.txt +0 -0
  98. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/requires.txt +0 -0
  99. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/top_level.txt +0 -0
  100. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/index.qmd +0 -0
  101. {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/setup.cfg +0 -0
@@ -0,0 +1,39 @@
1
+ # This workflow will upload a Python Package using Twine when a release is created
2
+ # For more information see: https://help.github.com/en/actions/language-and-framework-guides/using-python-with-github-actions#publishing-to-package-registries
3
+
4
+ # This workflow uses actions that are not certified by GitHub.
5
+ # They are provided by a third-party and are governed by
6
+ # separate terms of service, privacy policy, and support
7
+ # documentation.
8
+
9
+ name: Upload Python Package
10
+
11
+ on:
12
+ release:
13
+ types: [published]
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ deploy:
20
+
21
+ runs-on: ubuntu-latest
22
+
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - name: Set up Python
26
+ uses: actions/setup-python@v4
27
+ with:
28
+ python-version: '3.x'
29
+ - name: Install dependencies
30
+ run: |
31
+ python -m pip install --upgrade pip
32
+ pip install build
33
+ - name: Build package
34
+ run: python -m build
35
+ - name: Publish package
36
+ uses: pypa/gh-action-pypi-publish@7eb3b701d11256e583f5b49899c5e7203deab573
37
+ with:
38
+ user: __token__
39
+ password: ${{ secrets.PYPI_API_TOKEN }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ibridgesgui
3
- Version: 0.2.0
3
+ Version: 0.2.1
4
4
  Summary: Graphical user interface for accessing data and metadata on iRODS servers.
5
5
  Author-email: Christine Staiger <c.staiger@uu.nl>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -700,10 +700,7 @@ Requires-Dist: pytest-cov; extra == "test"
700
700
  Requires-Dist: ruff; extra == "test"
701
701
  Requires-Dist: mypy; extra == "test"
702
702
 
703
- # iBridges
704
-
705
- [![Python package](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml/badge.svg)](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml)
706
- [![Quarto Publish](https://github.com/chStaiger/iBridges-Gui/actions/workflows/publish.yml/badge.svg)](https://github.com/chStaiger/iBridges-Gui/actions/workflows/publish.yml)
703
+ # iBridges <img src="ibridgesgui/icons/logo.png" width="150" align="right">
707
704
 
708
705
  <p align="center">
709
706
  <p align="center">
@@ -713,6 +710,9 @@ Requires-Dist: mypy; extra == "test"
713
710
  </p>
714
711
  </p>
715
712
 
713
+ [![Python package](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml/badge.svg)](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml)
714
+ [![Quarto Publish](https://github.com/chStaiger/iBridges-Gui/actions/workflows/publish.yml/badge.svg)](https://github.com/chStaiger/iBridges-Gui/actions/workflows/publish.yml)
715
+
716
716
  ## About
717
717
 
718
718
  The git repository contains a generic *iRODS* graphical user interface. The iRODS functionality is based on [ibridges](https://github.com/UtrechtUniversity/iBridges) and works with any *iRODS* instance.
@@ -735,8 +735,7 @@ The git repository contains a generic *iRODS* graphical user interface. The iRO
735
735
  - As python package
736
736
 
737
737
  ```bash
738
- pip install ibridges
739
- pip install git+https://github.com/chStaiger/iBridges-Gui.git@main
738
+ pip install ibridgesgui
740
739
  ```
741
740
  - Locally from code (for developers)
742
741
 
@@ -1,7 +1,4 @@
1
- # iBridges
2
-
3
- [![Python package](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml/badge.svg)](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml)
4
- [![Quarto Publish](https://github.com/chStaiger/iBridges-Gui/actions/workflows/publish.yml/badge.svg)](https://github.com/chStaiger/iBridges-Gui/actions/workflows/publish.yml)
1
+ # iBridges <img src="ibridgesgui/icons/logo.png" width="150" align="right">
5
2
 
6
3
  <p align="center">
7
4
  <p align="center">
@@ -11,6 +8,9 @@
11
8
  </p>
12
9
  </p>
13
10
 
11
+ [![Python package](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml/badge.svg)](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml)
12
+ [![Quarto Publish](https://github.com/chStaiger/iBridges-Gui/actions/workflows/publish.yml/badge.svg)](https://github.com/chStaiger/iBridges-Gui/actions/workflows/publish.yml)
13
+
14
14
  ## About
15
15
 
16
16
  The git repository contains a generic *iRODS* graphical user interface. The iRODS functionality is based on [ibridges](https://github.com/UtrechtUniversity/iBridges) and works with any *iRODS* instance.
@@ -33,8 +33,7 @@ The git repository contains a generic *iRODS* graphical user interface. The iRO
33
33
  - As python package
34
34
 
35
35
  ```bash
36
- pip install ibridges
37
- pip install git+https://github.com/chStaiger/iBridges-Gui.git@main
36
+ pip install ibridgesgui
38
37
  ```
39
38
  - Locally from code (for developers)
40
39
 
@@ -20,7 +20,7 @@ When you start iBridges you will find in the upper drop-down menu `Connect` and
20
20
 
21
21
  Before we start iBridges for the first time let us check and create a valid configuration file; Click on `Configure -> Add Configuration`.
22
22
 
23
- ![](screenshots/add_check_config.png){width=50% fig-align="center"}
23
+ ![](screenshots/add_check_config.png){width=75% fig-align="center"}
24
24
 
25
25
  If you already stored an `irods_environment.json` in the directory `~/.irods` (Windows `C:\Users\<username>\.irods`) then you can use the drop-down menu (little downward arrow) to load the configuration.
26
26
 
@@ -28,7 +28,7 @@ If you do not have an iRODS configuration yet, click on the button `New Config`.
28
28
 
29
29
  You should see now something like:
30
30
 
31
- ![](screenshots/add_new_config.png){width=50% fig-align="center"}
31
+ ![](screenshots/add_new_config.png){width=75% fig-align="center"}
32
32
 
33
33
  Click the `Check` button to find out whether you can make a connection to the iRODS server. If you get error messages, adjust the contents accordingly. If you are unsure, please contact your iRODS service provider.
34
34
 
@@ -38,7 +38,7 @@ Once the check runs through fine click the `Save` or `Save as` button. This will
38
38
 
39
39
  To start working with data in iRODS select `Connect -> Connect to iRODS`. This will open the pop-up window
40
40
 
41
- ![](screenshots/login.png){width=50% fig-align="center"}
41
+ ![](screenshots/login.png){width=75% fig-align="center"}
42
42
 
43
43
  Select the file we edited above from the drop-down menu and provide your password. If you already logged into iRODS with this or another iRODS client your password might still be cached. This is indicated by the `******`. Hit `<Enter>` or press the `Connect` button.
44
44
 
@@ -110,7 +110,7 @@ In the case you want to download a large collection from iRODS, create the desti
110
110
 
111
111
  **Note that the wild card is `%`**!
112
112
 
113
- In the example search we are looking for data in a collection called *my_books* which can be located anywhere in the iRODS tree. This is denoted by `%/` and we specify that we want to retrieve data which carries the metadata key *author* where the value ends with *Carroll*.
113
+ In the example search we are looking for data in a collection called *my_books* which can be located anywhere in the iRODS tree. This is denoted by `%` and we specify that we want to retrieve data which carries the metadata key *author* where the value ends with *Carroll*.
114
114
 
115
115
  *Single click* on items in the list and click the `Download` button to open a dialog to select the destination for the data and start the download
116
116
 
@@ -5,6 +5,7 @@ import logging
5
5
  import sys
6
6
  from pathlib import Path
7
7
 
8
+ import PyQt6.QtGui
8
9
  import PyQt6.QtWidgets
9
10
  import PyQt6.uic
10
11
  import setproctitle
@@ -18,6 +19,7 @@ from ibridgesgui.popup_widgets import CheckConfig
18
19
  from ibridgesgui.search import Search
19
20
  from ibridgesgui.sync import Sync
20
21
  from ibridgesgui.ui_files.MainMenu import Ui_MainWindow
22
+ from ibridgesgui.welcome import Welcome
21
23
 
22
24
  # Global constants
23
25
  THIS_APPLICATION = "ibridges-gui"
@@ -38,18 +40,15 @@ class MainMenu(PyQt6.QtWidgets.QMainWindow, Ui_MainWindow):
38
40
  PyQt6.uic.loadUi(UI_FILE_DIR / "MainMenu.ui", self)
39
41
 
40
42
  self.logger = logging.getLogger(app_name)
43
+
41
44
  self.irods_path = Path("~", ".irods").expanduser()
42
45
  self.app_name = app_name
46
+ self.welcome_tab()
43
47
  self.ui_tabs_lookup = {
44
48
  "tabBrowser": self.init_browser_tab,
45
49
  "tabSync": self.init_sync_tab,
46
50
  "tabSearch": self.init_search_tab,
47
- #'tabDataBundle': self.setupTabDataBundle,
48
- #'tabCreateTicket': self.setupTabCreateTicket,
49
- #'tabELNData': self.setupTabELNData,
50
- #'tabAmberWorkflow': self.setupTabAmberWorkflow,
51
51
  "tabInfo": self.init_info_tab,
52
- #'tabExample': self.setupTabExample,
53
52
  }
54
53
 
55
54
  self.session = None
@@ -71,6 +70,7 @@ class MainMenu(PyQt6.QtWidgets.QMainWindow, Ui_MainWindow):
71
70
  self.session = None
72
71
  self.session_dict.clear()
73
72
  self.tab_widget.clear()
73
+ self.welcome_tab()
74
74
 
75
75
  def connect(self):
76
76
  """Create iRODS session."""
@@ -112,6 +112,11 @@ class MainMenu(PyQt6.QtWidgets.QMainWindow, Ui_MainWindow):
112
112
  tab_fun()
113
113
  # self.ui_tabs_lookup[tab_name]()
114
114
 
115
+ def welcome_tab(self):
116
+ """Create first tab."""
117
+ welcome = Welcome()
118
+ self.tab_widget.addTab(welcome, "iBridges")
119
+
115
120
  def init_info_tab(self):
116
121
  """Create info."""
117
122
  irods_info = Info(self.session)
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.0.2a1.dev45+gb6f238a.d20240612'
16
- __version_tuple__ = version_tuple = (0, 0, 2, 'dev45', 'gb6f238a.d20240612')
15
+ __version__ = version = '0.2.1'
16
+ __version_tuple__ = version_tuple = (0, 2, 1)
@@ -231,7 +231,6 @@ class Browser(PyQt6.QtWidgets.QWidget, Ui_tabBrowser):
231
231
  len(coll.data_objects) + len(coll.subcollections),
232
232
  coll_data + obj_data,
233
233
  )
234
- self.browser_table.resizeColumnsToContents()
235
234
  except Exception:
236
235
  self.browser_table.setRowCount(0)
237
236
  self.logger.exception("Cannot load browser.")
@@ -523,6 +522,8 @@ class Browser(PyQt6.QtWidgets.QWidget, Ui_tabBrowser):
523
522
  ]
524
523
  else:
525
524
  content = [f"No Preview for: {irods_path}"]
525
+ else:
526
+ content = [f"No Preview for: {irods_path}"]
526
527
  populate_textfield(self.preview_browser, content)
527
528
 
528
529
  def _get_item_path(self, row):
@@ -16,12 +16,14 @@ except ImportError:
16
16
 
17
17
 
18
18
  UI_FILE_DIR = files(__package__) / "ui_files"
19
-
19
+ LOGO_DIR = files(__package__) / "icons"
20
20
 
21
21
  # Widget utils
22
22
  def populate_table(table_widget, rows: int, data_by_row: list):
23
23
  """Populate a table-like pyqt widget with data."""
24
+ table_widget.setRowCount(0)
24
25
  table_widget.setRowCount(rows)
26
+
25
27
  for row, data in enumerate(data_by_row):
26
28
  for col, item in enumerate(data):
27
29
  table_widget.setItem(row, col, PyQt6.QtWidgets.QTableWidgetItem(str(item)))
@@ -79,6 +79,8 @@ class CreateDirectory(QDialog, Ui_createCollection):
79
79
  try:
80
80
  os.makedirs(new_dir_path)
81
81
  self.done(1)
82
+ except FileExistsError:
83
+ self.error_label.setText("ERROR: Folder already exists.")
82
84
  except Exception as error:
83
85
  if hasattr(error, "message"):
84
86
  self.error_label.setText(error.message)
@@ -276,8 +276,10 @@ class Sync(PyQt6.QtWidgets.QWidget, Ui_tabSync):
276
276
  return
277
277
 
278
278
  self.error_label.clear()
279
- table_data = thread_output["result"]["upload"] + thread_output["result"]["download"]
280
-
279
+ table_data = [(ipath, lpath, ipath.size)
280
+ for ipath, lpath in thread_output["result"]["download"]] + \
281
+ [(lpath, ipath, lpath.stat().st_size)
282
+ for lpath, ipath in thread_output["result"]["upload"]]
281
283
  populate_table(self.diff_table, len(table_data), table_data)
282
284
  if len(table_data) == 0:
283
285
  self.error_label.setText("Data is already synchronised.")
@@ -89,6 +89,7 @@ class TransferDataThread(QThread):
89
89
  transfer_out = {}
90
90
  transfer_out["error"] = ""
91
91
 
92
+ emit_string = "Create collections."
92
93
  for coll in self.diffs["create_collection"]:
93
94
  try:
94
95
  IrodsPath.create_collection(self.thread_session, coll)
@@ -101,6 +102,7 @@ class TransferDataThread(QThread):
101
102
  transfer_out["error"] + f"\nTransfer failed Cannot create {coll}: {repr(error)}"
102
103
  )
103
104
 
105
+ emit_string = "Create folders."
104
106
  for folder in self.diffs["create_dir"]:
105
107
  print(f"create {folder}")
106
108
  try:
@@ -1,6 +1,6 @@
1
1
  # Form implementation generated from reading ui file 'ibridgesgui/ui_files/MainMenu.ui'
2
2
  #
3
- # Created by: PyQt6 UI code generator 6.4.2
3
+ # Created by: PyQt6 UI code generator 6.6.1
4
4
  #
5
5
  # WARNING: Any manual changes made to this file will be lost when pyuic6 is
6
6
  # run again. Do not edit this file unless you know what you are doing.
@@ -16,22 +16,29 @@ class Ui_MainWindow(object):
16
16
  MainWindow.setMinimumSize(QtCore.QSize(1300, 850))
17
17
  MainWindow.setStyleSheet("QWidget\n"
18
18
  "{\n"
19
- " color: rgb(86, 184, 139);\n"
20
- " background-color: rgb(54, 54, 54);\n"
21
- " selection-background-color: rgb(58, 152, 112);\n"
22
- " font: 16pt;\n"
19
+ " background-color: rgb(211,211,211);\n"
20
+ " color: rgb(88, 88, 90);\n"
21
+ " selection-background-color: rgb(21, 165, 137);\n"
22
+ " selection-color: rgb(245, 244, 244);\n"
23
+ " \n"
24
+ " font: 16pt\n"
23
25
  "}\n"
24
26
  "\n"
25
- "QTabBar::tab:top:selected {\n"
26
- " background-color: rgb(58, 152, 112);\n"
27
- " color: rgb(54, 54, 54);\n"
27
+ "QLabel\n"
28
+ "{\n"
29
+ " background-color: rgb(211,211,211);\n"
28
30
  "}\n"
29
31
  "\n"
30
32
  "QLabel#error_label\n"
31
33
  "{\n"
32
- " color: rgb(217, 174, 23);\n"
33
- " font: 18pt;\n"
34
+ " color: rgb(220, 130, 30);\n"
35
+ "}\n"
36
+ "\n"
37
+ "QTabBar::tab:top:selected {\n"
38
+ " background-color: rgb(21, 165, 137);\n"
39
+ " color: rgb(88, 88, 90);\n"
34
40
  "}\n"
41
+ "\n"
35
42
  "")
36
43
  self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
37
44
  self.centralwidget.setStyleSheet("")
@@ -44,7 +51,6 @@ class Ui_MainWindow(object):
44
51
  font.setPointSize(16)
45
52
  font.setBold(False)
46
53
  font.setItalic(False)
47
- font.setWeight(50)
48
54
  self.tab_widget.setFont(font)
49
55
  self.tab_widget.setObjectName("tab_widget")
50
56
  self.verticalLayout.addWidget(self.tab_widget)
@@ -59,7 +65,6 @@ class Ui_MainWindow(object):
59
65
  font.setPointSize(16)
60
66
  font.setBold(False)
61
67
  font.setItalic(False)
62
- font.setWeight(50)
63
68
  self.menubar.setFont(font)
64
69
  self.menubar.setObjectName("menubar")
65
70
  self.main_menu = QtWidgets.QMenu(parent=self.menubar)
@@ -67,7 +72,6 @@ class Ui_MainWindow(object):
67
72
  font.setPointSize(16)
68
73
  font.setBold(False)
69
74
  font.setItalic(False)
70
- font.setWeight(50)
71
75
  self.main_menu.setFont(font)
72
76
  self.main_menu.setObjectName("main_menu")
73
77
  self.config_menu = QtWidgets.QMenu(parent=self.menubar)
@@ -19,27 +19,44 @@
19
19
  <property name="windowTitle">
20
20
  <string>MainWindow</string>
21
21
  </property>
22
+ <property name="windowIcon">
23
+ <iconset>
24
+ <normaloff>../icons/logo.png</normaloff>../icons/logo.png</iconset>
25
+ </property>
22
26
  <property name="styleSheet">
23
27
  <string notr="true">QWidget
24
28
  {
25
- color: rgb(86, 184, 139);
26
- background-color: rgb(54, 54, 54);
27
- selection-background-color: rgb(58, 152, 112);
28
- font: 16pt;
29
+ background-color: rgb(211,211,211);
30
+ color: rgb(88, 88, 90);
31
+ selection-background-color: rgb(21, 165, 137);
32
+ selection-color: rgb(245, 244, 244);
33
+
34
+ font: 16pt
29
35
  }
30
36
 
31
- QTabBar::tab:top:selected {
32
- background-color: rgb(58, 152, 112);
33
- color: rgb(54, 54, 54);
37
+ QLabel
38
+ {
39
+ background-color: rgb(211,211,211);
34
40
  }
35
41
 
36
42
  QLabel#error_label
37
43
  {
38
- color: rgb(217, 174, 23);
39
- font: 18pt;
44
+ color: rgb(220, 130, 30);
45
+ }
46
+
47
+ QTabBar::tab:top:selected {
48
+ background-color: rgb(21, 165, 137);
49
+ color: rgb(88, 88, 90);
40
50
  }
51
+
41
52
  </string>
42
53
  </property>
54
+ <property name="iconSize">
55
+ <size>
56
+ <width>400</width>
57
+ <height>400</height>
58
+ </size>
59
+ </property>
43
60
  <widget class="QWidget" name="centralwidget">
44
61
  <property name="styleSheet">
45
62
  <string notr="true"/>
@@ -56,7 +73,6 @@ QLabel#error_label
56
73
  <property name="font">
57
74
  <font>
58
75
  <pointsize>16</pointsize>
59
- <weight>50</weight>
60
76
  <italic>false</italic>
61
77
  <bold>false</bold>
62
78
  </font>
@@ -64,6 +80,9 @@ QLabel#error_label
64
80
  <property name="currentIndex">
65
81
  <number>-1</number>
66
82
  </property>
83
+ <property name="usesScrollButtons">
84
+ <bool>true</bool>
85
+ </property>
67
86
  </widget>
68
87
  </item>
69
88
  <item>
@@ -87,7 +106,6 @@ QLabel#error_label
87
106
  <property name="font">
88
107
  <font>
89
108
  <pointsize>16</pointsize>
90
- <weight>50</weight>
91
109
  <italic>false</italic>
92
110
  <bold>false</bold>
93
111
  </font>
@@ -96,7 +114,6 @@ QLabel#error_label
96
114
  <property name="font">
97
115
  <font>
98
116
  <pointsize>16</pointsize>
99
- <weight>50</weight>
100
117
  <italic>false</italic>
101
118
  <bold>false</bold>
102
119
  </font>
@@ -13,24 +13,42 @@ class Ui_configCheck(object):
13
13
  def setupUi(self, Dialog):
14
14
  Dialog.setObjectName("Dialog")
15
15
  Dialog.resize(1034, 429)
16
- Dialog.setStyleSheet(
17
- "QWidget\n"
18
- "{\n"
19
- " color: rgb(86, 184, 139);\n"
20
- " background-color: rgb(54, 54, 54);\n"
21
- " font: 14pt\n"
22
- "}\n"
23
- "\n"
24
- "QTextEdit\n"
25
- "{\n"
26
- " background-color: rgb(85, 87, 83);\n"
27
- "}\n"
28
- "\n"
29
- "QLabel#error_label\n"
30
- "{\n"
31
- " color: rgb(217, 174, 23);\n"
32
- "}"
33
- )
16
+ Dialog.setStyleSheet("QWidget\n"
17
+ "{\n"
18
+ " background-color: rgb(211,211,211);\n"
19
+ " color: rgb(88, 88, 90);\n"
20
+ " selection-background-color: rgb(21, 165, 137);\n"
21
+ " selection-color: rgb(245, 244, 244);\n"
22
+ " font: 16pt\n"
23
+ "}\n"
24
+ "\n"
25
+ "QLabel#error_label\n"
26
+ "{\n"
27
+ " color: rgb(220, 130, 30);\n"
28
+ "}\n"
29
+ "\n"
30
+ "QLineEdit, QTextEdit, QTableWidget\n"
31
+ "{\n"
32
+ " background-color: rgb(245, 244, 244)\n"
33
+ "}\n"
34
+ "\n"
35
+ "QPushButton\n"
36
+ "{\n"
37
+ " background-color: rgb(21, 165, 137);\n"
38
+ " color: rgb(245, 244, 244);\n"
39
+ "}\n"
40
+ "\n"
41
+ "QPushButton#home_button, QPushButton#parent_button, QPushButton#refresh_button\n"
42
+ "{\n"
43
+ " background-color: rgb(245, 244, 244);\n"
44
+ "}\n"
45
+ "\n"
46
+ "QTabWidget#info_tabs\n"
47
+ "{\n"
48
+ " background-color: background-color: rgb(211,211,211);\n"
49
+ "}\n"
50
+ "\n"
51
+ "")
34
52
  self.verticalLayout_2 = QtWidgets.QVBoxLayout(Dialog)
35
53
  self.verticalLayout_2.setObjectName("verticalLayout_2")
36
54
  self.horizontalLayout = QtWidgets.QHBoxLayout()
@@ -41,9 +59,7 @@ class Ui_configCheck(object):
41
59
  self.new_button = QtWidgets.QPushButton(parent=Dialog)
42
60
  self.new_button.setObjectName("new_button")
43
61
  self.horizontalLayout.addWidget(self.new_button)
44
- spacerItem = QtWidgets.QSpacerItem(
45
- 40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum
46
- )
62
+ spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
47
63
  self.horizontalLayout.addItem(spacerItem)
48
64
  self.verticalLayout_2.addLayout(self.horizontalLayout)
49
65
  self.verticalLayout = QtWidgets.QVBoxLayout()
@@ -56,9 +72,7 @@ class Ui_configCheck(object):
56
72
  self.check_button = QtWidgets.QPushButton(parent=Dialog)
57
73
  self.check_button.setObjectName("check_button")
58
74
  self.horizontalLayout_4.addWidget(self.check_button)
59
- spacerItem1 = QtWidgets.QSpacerItem(
60
- 40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum
61
- )
75
+ spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
62
76
  self.horizontalLayout_4.addItem(spacerItem1)
63
77
  self.error_label = QtWidgets.QLabel(parent=Dialog)
64
78
  self.error_label.setText("")
@@ -74,9 +88,7 @@ class Ui_configCheck(object):
74
88
  self.save_as_button = QtWidgets.QPushButton(parent=Dialog)
75
89
  self.save_as_button.setObjectName("save_as_button")
76
90
  self.horizontalLayout_2.addWidget(self.save_as_button)
77
- spacerItem2 = QtWidgets.QSpacerItem(
78
- 40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum
79
- )
91
+ spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
80
92
  self.horizontalLayout_2.addItem(spacerItem2)
81
93
  self.close_button = QtWidgets.QPushButton(parent=Dialog)
82
94
  self.close_button.setObjectName("close_button")
@@ -16,20 +16,40 @@
16
16
  <property name="styleSheet">
17
17
  <string notr="true">QWidget
18
18
  {
19
- color: rgb(86, 184, 139);
20
- background-color: rgb(54, 54, 54);
21
- font: 14pt
19
+ background-color: rgb(211,211,211);
20
+ color: rgb(88, 88, 90);
21
+ selection-background-color: rgb(21, 165, 137);
22
+ selection-color: rgb(245, 244, 244);
23
+ font: 16pt
22
24
  }
23
25
 
24
- QTextEdit
26
+ QLabel#error_label
25
27
  {
26
- background-color: rgb(85, 87, 83);
28
+ color: rgb(220, 130, 30);
27
29
  }
28
30
 
29
- QLabel#error_label
31
+ QLineEdit, QTextEdit, QTableWidget
30
32
  {
31
- color: rgb(217, 174, 23);
32
- }</string>
33
+ background-color: rgb(245, 244, 244)
34
+ }
35
+
36
+ QPushButton
37
+ {
38
+ background-color: rgb(21, 165, 137);
39
+ color: rgb(245, 244, 244);
40
+ }
41
+
42
+ QPushButton#home_button, QPushButton#parent_button, QPushButton#refresh_button
43
+ {
44
+ background-color: rgb(245, 244, 244);
45
+ }
46
+
47
+ QTabWidget#info_tabs
48
+ {
49
+ background-color: background-color: rgb(211,211,211);
50
+ }
51
+
52
+ </string>
33
53
  </property>
34
54
  <layout class="QVBoxLayout" name="verticalLayout_2">
35
55
  <item>