Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 53 additions & 10 deletions cybergis_compute_client/UI.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from ipyfilechooser import FileChooser
from IPython.display import Markdown, display, clear_output
from .MarkdownTable import MarkdownTable # noqa
import importlib.metadata as importlib_metadata


class UI:
Expand Down Expand Up @@ -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:** ' + importlib_metadata.version("cybergis_compute_client")))
self.renderAnnouncements()
display(self.jobTemplate['output'])
display(self.description['output'])
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -648,25 +660,39 @@ 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...', disabled=False)
searchButton = widgets.Button(description="Search")
clearButton = widgets.Button(description="Clear")
buttons = widgets.HBox([searchButton, clearButton])
searchWidgets = widgets.VBox([searchInput, buttons])
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('<br> **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('<br> **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:
Expand All @@ -682,8 +708,25 @@ def renderFolders(self):
renameButton.on_click(self.onRenameJobButton(i, nameSelect))
nameSelect.on_submit(self.onRenameJobButton(i, nameSelect))
display(renameWidgets)
display(Markdown('<br> **Showing folders ' + str(firstFolder + 1) + ' to ' + str(lastFolder) + ' of ' + str(len(folders["folder"])) + '**'))
display(Markdown('<br> **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()

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):
"""
Expand Down
1 change: 1 addition & 0 deletions cybergis_compute_client/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,5 @@
limitations under the License.
"""


from .CyberGISCompute import CyberGISCompute # noqa F401