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.
- ibridgesgui-0.2.1/.github/workflows/pypi_release.yml +39 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/PKG-INFO +6 -7
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/README.md +5 -6
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/docs/getting-started.qmd +3 -3
- ibridgesgui-0.2.1/docs/screenshots/add_check_config.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/add_new_config.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/browser.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/delete.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/login.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/metadata.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/permissions.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/replicas.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/search.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/start_ibridges.png +0 -0
- ibridgesgui-0.2.1/docs/screenshots/sync.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/docs/userdoc.qmd +1 -1
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/__main__.py +10 -5
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/_version.py +2 -2
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/browser.py +2 -1
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/gui_utils.py +3 -1
- ibridgesgui-0.2.1/ibridgesgui/icons/logo.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/popup_widgets.py +2 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/sync.py +4 -2
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/threads.py +2 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/MainMenu.py +17 -13
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/MainMenu.ui +29 -12
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/configCheck.py +39 -27
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/configCheck.ui +28 -8
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/createCollection.py +42 -36
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/createCollection.ui +25 -28
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/irodsLogin.py +41 -52
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/irodsLogin.ui +25 -17
- ibridgesgui-0.2.1/ibridgesgui/ui_files/renameItem.py +94 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/renameItem.ui +24 -7
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabBrowser.py +104 -145
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabBrowser.ui +53 -46
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabInfo.py +40 -57
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabInfo.ui +15 -10
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabSearch.py +46 -67
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabSearch.ui +18 -17
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabSync.py +30 -15
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/tabSync.ui +29 -14
- ibridgesgui-0.2.1/ibridgesgui/ui_files/welcome.py +48 -0
- ibridgesgui-0.2.1/ibridgesgui/ui_files/welcome.ui +47 -0
- ibridgesgui-0.2.1/ibridgesgui/welcome.py +42 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/PKG-INFO +6 -7
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/SOURCES.txt +5 -4
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/pyproject.toml +1 -2
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/requirements.txt +1 -1
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/requirements_dev.txt +2 -2
- ibridgesgui-0.2.0/docs/screenshots/add_check_config.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/add_new_config.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/browser.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/delete.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/login.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/metadata.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/permissions.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/replicas.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/search.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/start_ibridges.png +0 -0
- ibridgesgui-0.2.0/docs/screenshots/sync.png +0 -0
- ibridgesgui-0.2.0/ibridgesgui/ui_files/dataTransferState.py +0 -114
- ibridgesgui-0.2.0/ibridgesgui/ui_files/dataTransferState.ui +0 -187
- ibridgesgui-0.2.0/ibridgesgui/ui_files/renameItem.py +0 -77
- ibridgesgui-0.2.0/ibridgesgui/ui_files/tabUpDownload.py +0 -303
- ibridgesgui-0.2.0/ibridgesgui/ui_files/tabUpDownload.ui +0 -460
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.flake8 +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/dependabot.yml +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/workflows/linter.yml +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.github/workflows/publish.yml +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/.gitignore +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/LICENSE +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/_quarto.yml +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/docs/info.qmd +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/__init__.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/config.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/arrow-left.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/arrow-right.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/arrow-up.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/home.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/iBridges.ico +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/loading_circle.gif +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/nosync.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/refresh.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/icons/syncing.png +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/info.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/irods_tree_model.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/login.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/search.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/ExampleTab.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/ExampleTab.ui +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui/ui_files/__init__.py +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/dependency_links.txt +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/entry_points.txt +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/requires.txt +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/ibridgesgui.egg-info/top_level.txt +0 -0
- {ibridgesgui-0.2.0 → ibridgesgui-0.2.1}/index.qmd +0 -0
- {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.
|
|
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
|
-
[](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml)
|
|
706
|
-
[](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
|
+
[](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml)
|
|
714
|
+
[](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
|
|
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
|
-
[](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml)
|
|
4
|
-
[](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
|
+
[](https://github.com/chStaiger/iBridges-Gui/actions/workflows/linter.yml)
|
|
12
|
+
[](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
|
|
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
|
-
{width=
|
|
23
|
+
{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
|
-
{width=
|
|
31
|
+
{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
|
-
{width=
|
|
41
|
+
{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
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -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
|
|
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.
|
|
16
|
-
__version_tuple__ = version_tuple = (0,
|
|
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)))
|
|
Binary file
|
|
@@ -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 =
|
|
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.
|
|
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(
|
|
20
|
-
"
|
|
21
|
-
" selection-background-color: rgb(
|
|
22
|
-
"
|
|
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
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
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
|
-
"
|
|
33
|
-
"
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
32
|
-
|
|
33
|
-
|
|
37
|
+
QLabel
|
|
38
|
+
{
|
|
39
|
+
background-color: rgb(211,211,211);
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
QLabel#error_label
|
|
37
43
|
{
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
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
|
-
|
|
26
|
+
QLabel#error_label
|
|
25
27
|
{
|
|
26
|
-
|
|
28
|
+
color: rgb(220, 130, 30);
|
|
27
29
|
}
|
|
28
30
|
|
|
29
|
-
|
|
31
|
+
QLineEdit, QTextEdit, QTableWidget
|
|
30
32
|
{
|
|
31
|
-
|
|
32
|
-
}
|
|
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>
|