From 3de3b00bfc9cba63ae006c0fc5fcb3928e5f655b Mon Sep 17 00:00:00 2001 From: Akriti Arora Date: Tue, 15 Apr 2025 01:55:42 +0000 Subject: [PATCH 1/4] (Intro task) version and announcement --- cybergis_compute_client/UI.py | 20 ++++++++++++++++---- cybergis_compute_client/__init__.py | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/cybergis_compute_client/UI.py b/cybergis_compute_client/UI.py index bd563de..ee15d39 100644 --- a/cybergis_compute_client/UI.py +++ b/cybergis_compute_client/UI.py @@ -4,6 +4,7 @@ from ipyfilechooser import FileChooser from IPython.display import Markdown, display, clear_output from .MarkdownTable import MarkdownTable # noqa +from cybergis_compute_client import __version__ class UI: @@ -85,6 +86,7 @@ def render(self): display(Markdown('A scalable middleware framework for enabling high-performance and data-intensive geospatial research and education on CyberGIS-Jupyter. [Click here for documentation.](https://cybergis.github.io/cybergis-compute-python-sdk/index.html)')) display(divider) display(Markdown('**Your CyberGIS-Compute Username:** ' + str(self.compute.username))) + display(Markdown('**Version:** ' + __version__)) self.renderAnnouncements() display(self.jobTemplate['output']) display(self.description['output']) @@ -178,10 +180,20 @@ def renderAnnouncements(self): if (len(announcement) > 0): display(Markdown('## Announcements')) for i in range(len(announcement)): - display(Markdown('### Message ' + str(i + 1) + ':')) - display(Markdown('Message: ' + announcement[i]["message"])) - display(Markdown('Posted by: ' + announcement[i]["poster"] + " at " + announcement[i]["time_stamp"])) - display(Markdown("***")) + message = f""" +**Announcement {i}** + +> **Message:** {announcement[i]["message"]} + +> **Posted by:** {announcement[i]["poster"]} +> **Time:** {announcement[i]["time_stamp"]} + +--- +""" + # display(Markdown('### Message ' + str(i + 1) + ':')) + # display(Markdown('Message: ' + announcement[i]["message"])) + # display(Markdown('Posted by: ' + announcement[i]["poster"] + " at " + announcement[i]["time_stamp"])) + display(Markdown(message)) except: pass diff --git a/cybergis_compute_client/__init__.py b/cybergis_compute_client/__init__.py index 87329ee..b1d121f 100644 --- a/cybergis_compute_client/__init__.py +++ b/cybergis_compute_client/__init__.py @@ -16,4 +16,6 @@ limitations under the License. """ +__version__ = "0.2.6" + from .CyberGISCompute import CyberGISCompute # noqa F401 \ No newline at end of file From 1a57cd5f1a6be3c51f73bf21815c098b3e6121ae Mon Sep 17 00:00:00 2001 From: Akriti Arora Date: Tue, 15 Apr 2025 17:01:40 +0000 Subject: [PATCH 2/4] (Intro task) Past Results search by name --- cybergis_compute_client/UI.py | 33 +++++++++++++++++++++++++++------ 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/cybergis_compute_client/UI.py b/cybergis_compute_client/UI.py index ee15d39..ef073fd 100644 --- a/cybergis_compute_client/UI.py +++ b/cybergis_compute_client/UI.py @@ -660,25 +660,37 @@ def renderFolders(self): with self.folders['output']: display(Markdown("We will do our best to keep this data for 90 days, but cannot guarantee it won’t be deleted sooner.")) display(Markdown("Please note that the renaming feature only allows for names made up of letters, numbers, and the characters ' . ' and ' _ '. Other characters will be removed from your input.")) + + searchInput = widgets.Text(placeholder='Search folders by name...', description='Search:', disabled=False) + searchButton = widgets.Button(description="Search") + searchWidgets = widgets.HBox([searchInput, searchButton]) + display(searchWidgets) + + searchTerm = getattr(self, 'folderSearchTerm', '').lower() + filteredFolders = folders["folder"] + if searchTerm: + filteredFolders = [folder for folder in folders["folder"] if folder['name'] and searchTerm in folder['name'].lower()] + display(Markdown(f"Found {len(filteredFolders)} results for '{searchTerm}'")) + pageNum = self.folderPage numFolders = self.foldersPerPage firstFolder = pageNum * numFolders lastFolder = firstFolder + numFolders - if (lastFolder >= len(folders["folder"])): - lastFolder = len(folders["folder"]) - display(Markdown('
**Showing folders ' + str(firstFolder + 1) + ' to ' + str(lastFolder) + ' of ' + str(len(folders["folder"])) + ' for ' + self.compute.username.split('@', 1)[0] + '**')) + if (lastFolder >= len(filteredFolders)): + lastFolder = len(filteredFolders) + display(Markdown('
**Showing folders ' + str(firstFolder + 1) + ' to ' + str(lastFolder) + ' of ' + str(len(filteredFolders)) + ' for ' + self.compute.username.split('@', 1)[0] + '**')) backButton = widgets.Button(description="Previous Page") nextButton = widgets.Button(description="Next Page") pageButtons = widgets.HBox([backButton, nextButton]) backButton.on_click(self.onPrevPageButton()) - nextButton.on_click(self.onNextPageButton(len(folders["folder"]))) + nextButton.on_click(self.onNextPageButton(len(filteredFolders))) display(pageButtons) listNames = [] for i in folders["folder"]: if i['name'] is not None: listNames.append(i['name']) listNames = [*set(listNames)] - for i in list(reversed(folders["folder"]))[firstFolder:lastFolder]: + for i in list(reversed(filteredFolders))[firstFolder:lastFolder]: headers = ['id', 'name', 'hpc', 'userId', 'isWritable', 'createdAt', 'updatedAt', 'deletedAt'] data = [[]] for j in headers: @@ -694,8 +706,17 @@ def renderFolders(self): renameButton.on_click(self.onRenameJobButton(i, nameSelect)) nameSelect.on_submit(self.onRenameJobButton(i, nameSelect)) display(renameWidgets) - display(Markdown('
**Showing folders ' + str(firstFolder + 1) + ' to ' + str(lastFolder) + ' of ' + str(len(folders["folder"])) + '**')) + display(Markdown('
**Showing folders ' + str(firstFolder + 1) + ' to ' + str(lastFolder) + ' of ' + str(len(filteredFolders)) + '**')) display(pageButtons) + + def on_search(b): + self.folderSearchTerm = searchInput.value + self.folderPage = 0 + self.folders['output'].clear_output() + self.renderFolders() + + searchButton.on_click(on_search) + searchInput.on_submit(on_search) def renderRecentlySubmittedJobs(self): """ From b361c8e2cf62839180b31f581276170d81f119af Mon Sep 17 00:00:00 2001 From: Akriti Arora Date: Sat, 19 Apr 2025 23:05:54 +0000 Subject: [PATCH 3/4] (Intro Tasks) Clear button in Past Results search --- cybergis_compute_client/UI.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/cybergis_compute_client/UI.py b/cybergis_compute_client/UI.py index ef073fd..51352d6 100644 --- a/cybergis_compute_client/UI.py +++ b/cybergis_compute_client/UI.py @@ -661,9 +661,11 @@ def renderFolders(self): display(Markdown("We will do our best to keep this data for 90 days, but cannot guarantee it won’t be deleted sooner.")) display(Markdown("Please note that the renaming feature only allows for names made up of letters, numbers, and the characters ' . ' and ' _ '. Other characters will be removed from your input.")) - searchInput = widgets.Text(placeholder='Search folders by name...', description='Search:', disabled=False) + searchInput = widgets.Text(placeholder='Search folders by name...', disabled=False) searchButton = widgets.Button(description="Search") - searchWidgets = widgets.HBox([searchInput, searchButton]) + clearButton = widgets.Button(description="Clear") + buttons = widgets.HBox([searchButton, clearButton]) + searchWidgets = widgets.VBox([searchInput, buttons]) display(searchWidgets) searchTerm = getattr(self, 'folderSearchTerm', '').lower() @@ -714,8 +716,16 @@ def on_search(b): self.folderPage = 0 self.folders['output'].clear_output() self.renderFolders() - + + def on_clear(b): + self.folderSearchTerm = '' + searchInput.value = '' + self.folderPage = 0 + self.folders['output'].clear_output() + self.renderFolders() + searchButton.on_click(on_search) + clearButton.on_click(on_clear) searchInput.on_submit(on_search) def renderRecentlySubmittedJobs(self): From 4aa8b2c78ee9f4352e58f539196d19e7940fb47b Mon Sep 17 00:00:00 2001 From: Akriti Arora Date: Wed, 30 Apr 2025 22:06:44 +0000 Subject: [PATCH 4/4] remove version harcoding --- cybergis_compute_client/UI.py | 4 ++-- cybergis_compute_client/__init__.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cybergis_compute_client/UI.py b/cybergis_compute_client/UI.py index 51352d6..ef784b1 100644 --- a/cybergis_compute_client/UI.py +++ b/cybergis_compute_client/UI.py @@ -4,7 +4,7 @@ from ipyfilechooser import FileChooser from IPython.display import Markdown, display, clear_output from .MarkdownTable import MarkdownTable # noqa -from cybergis_compute_client import __version__ +import importlib.metadata as importlib_metadata class UI: @@ -86,7 +86,7 @@ def render(self): display(Markdown('A scalable middleware framework for enabling high-performance and data-intensive geospatial research and education on CyberGIS-Jupyter. [Click here for documentation.](https://cybergis.github.io/cybergis-compute-python-sdk/index.html)')) display(divider) display(Markdown('**Your CyberGIS-Compute Username:** ' + str(self.compute.username))) - display(Markdown('**Version:** ' + __version__)) + display(Markdown('**Version:** ' + importlib_metadata.version("cybergis_compute_client"))) self.renderAnnouncements() display(self.jobTemplate['output']) display(self.description['output']) diff --git a/cybergis_compute_client/__init__.py b/cybergis_compute_client/__init__.py index b1d121f..80d5aed 100644 --- a/cybergis_compute_client/__init__.py +++ b/cybergis_compute_client/__init__.py @@ -16,6 +16,5 @@ limitations under the License. """ -__version__ = "0.2.6" from .CyberGISCompute import CyberGISCompute # noqa F401 \ No newline at end of file