Skip to content

task/WI-454 - DPM Merge into Main#1332

Draft
shayanaijaz wants to merge 423 commits into
mainfrom
task/WI-454-DPM-Merge
Draft

task/WI-454 - DPM Merge into Main#1332
shayanaijaz wants to merge 423 commits into
mainfrom
task/WI-454-DPM-Merge

Conversation

@shayanaijaz

Copy link
Copy Markdown
Contributor

Overview

DPM features and changes being brought to parity with core.

Related

Changes

  • Lots of changes and additions included. The goal for the changes was to keep them as portal agnostic as possible. There are minimal changes to how core portals operate. I have created a document which highlights the changes and additions that were made:

DPM Branch: Configuration and Customization Reference for Core Portal

Testing

  1. Test core portal functionality, there shouldn't be any changes to the UI and operations and everything should work same as before

UI

Notes

shayanaijaz and others added 30 commits November 12, 2024 12:09
- Added citation box and citation modal for publications
- Removed Last Modified column on publication listing
- Changed Created to Published Date
- Added data view modal to view related project information
van-go and others added 15 commits June 18, 2026 14:03
* WC-332
Add project admin group functionality and related client access checks

- Introduced `check_project_admin_group` and `get_project_client` functions to manage project admin access.
- Updated various views to utilize the new client access logic for project admins.
- Enhanced project metadata handling to include project admin group checks.
- Added unit tests for project admin group functionality and client retrieval.

* updates to project admin access

---------

Co-authored-by: Shayan Khan <skhan@tacc.utexas.edu>
This reverts commit 31349a9.
@codecov

codecov Bot commented Jul 7, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 22.54075% with 2756 lines in your changes missing coverage. Please review.
✅ Project coverage is 55.37%. Comparing base (4ca8af2) to head (a7bdc51).

Files with missing lines Patch % Lines
...anagement/commands/migrate_drp_project_metadata.py 0.00% 273 Missing ⚠️
...ts/workspace_operations/project_meta_operations.py 18.03% 200 Missing ⚠️
...workspace_operations/project_publish_operations.py 19.66% 192 Missing ⚠️
server/portal/apps/publications/views.py 19.65% 139 Missing ⚠️
server/portal/libs/files/file_processing.py 12.41% 127 Missing ⚠️
...s/management/commands/migrate_drp_project_files.py 0.00% 117 Missing ⚠️
...FilesProjectPublishWizardSteps/ProjectTreeView.jsx 1.69% 97 Missing and 19 partials ⚠️
.../projects/workspace_operations/graph_operations.py 16.54% 111 Missing ⚠️
...omponents/_common/Form/DynamicForm/DynamicForm.jsx 0.90% 97 Missing and 12 partials ⚠️
...PublishedDatasets/PublishedDatasetEntityDetail.jsx 2.67% 92 Missing and 17 partials ⚠️
... and 76 more
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #1332      +/-   ##
==========================================
- Coverage   64.10%   55.37%   -8.74%     
==========================================
  Files         463      512      +49     
  Lines       13828    17184    +3356     
  Branches     2759     3444     +685     
==========================================
+ Hits         8865     9516     +651     
- Misses       4609     7154    +2545     
- Partials      354      514     +160     
Flag Coverage Δ
javascript 59.40% <22.02%> (-7.72%) ⬇️
unittests 51.52% <22.87%> (-9.41%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...aFiles/CombinedBreadcrumbs/CombinedBreadcrumbs.jsx 100.00% <ø> (ø)
...iles/DataFilesBreadcrumbs/DataFilesBreadcrumbs.jsx 68.57% <100.00%> (+0.45%) ⬆️
...s/DataFiles/DataFilesModals/DataFilesCopyModal.jsx 78.84% <100.00%> (+0.84%) ⬆️
...ents/DataFiles/DataFilesModals/DataFilesModals.jsx 0.00% <ø> (ø)
...taFiles/DataFilesModals/DataFilesShowPathModal.jsx 91.89% <100.00%> (+0.98%) ⬆️
...ts/DataFiles/DataFilesSidebar/DataFilesSidebar.jsx 88.00% <100.00%> (+1.63%) ⬆️
...ts/DataFiles/fixtures/DataFiles.systems.fixture.js 100.00% <ø> (ø)
client/src/components/Submissions/Submissions.jsx 53.22% <ø> (ø)
client/src/components/Workbench/Workbench.jsx 90.47% <ø> (-0.44%) ⬇️
client/src/components/_common/Expand/Expand.jsx 87.50% <100.00%> (ø)
... and 109 more
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@wesleyboar wesleyboar left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is impressive. I am proud of your work to make this Core-mergable. The _custom/ dir gives Portal opportunity to allow custom code via Dockerfile.12

I worry only about long-term maintenance of CMSWrapper.jsx and cms_ui.html, but Core-Portal v4 likely introduces a change that can retire them.3

Update: I have stricken out my _custom dir thoughts, because another peer review's comment suggests it might be moved to become a standard component.

Footnotes

  1. Like how TUP-UI, APCD-CMS, and Texascale-CMS are Core-CMS with custom functionality. 2

  2. A Dockerfile is used add/change CMS files (example). @rstijerina, what do you think about a TACC/Core-Portal-Template (à la TACC/Core-CMS-Template)?

  3. Core-Portal v4 UI might be served via the Core-CMS1, so CMS assets and markup would already be present, so no need to load/toggle them ad hoc.

@wesleyboar wesleyboar Jul 8, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Explanation: This <CMSWrapper> and cms_ui.html toggle CMS CSS and swap footer HTML1 on the fly. They communicate through custom JavaScript event cms-styles-activated/cms-styles-deactivated. It exists because DPM has pages that mimic CMS UI.

Alternative was serving DPM (or the entire Portal) as app within CMS, which would be too big a scope change just to mimic CMS UI.

Footnotes

  1. The footer HTML swap is exactly like main's header HTML swap.

shouldTruncateValues ? 'value-truncated' : ''
}`;

const compareFn = (entry1, entry2) => {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we make this more descriptive - what it does and what it's for?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we add a docstring on how this is used?


.root.as-link {
font-size: inherit;
font-size: 0.75rem;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this have downstream effects?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, at least least one — it increases size of text on Move/Copy modal. This change (#986) did fix specific links that were too small (WP-50), but that fix can likely be done without downstream effects.

Why use inherit?

The inherit is meant to make any "button that should look like a link" have style, and font-size, of a link (because a link — an <a> — inherits font-size).

{label && hasAddon ? <FieldLabel /> : null}
<FormFieldWrapper type={wrapperType}>
{label && !hasAddon ? <FieldLabel /> : null}
{!hasAddon ? <FieldNote /> : null}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

moved for a particular reason?

<Button attr="submit" type="primary" onClick={onContinue}>
Continue
</Button>
{/* <Button attr="submit" type="secondary" onClick={onSkip}>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should the commented code in this file be removed? Or uncommented but disabled with flag?

adv_image = conf_tiff(file)
else:
adv_image = conf_raw(value, file)
except Exception as e:

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we add more explicit exceptions?

Comment on lines +271 to +272
except:
pass

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a large try/except, what are we trying to check against?

useTapisToken();
// Get the time remaining in the user's session and redirect to the homepage if their
// browser is open when it expires.
useRedirectOnSessionExpired({ location: '/' });

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

merge issue?

Comment thread client/package.json
"@emotion/react": "^11.13.3",
"@emotion/styled": "^11.13.0",
"@mui/material": "^6.1.1",
"@mui/x-tree-view": "^7.26.0",

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note as good candidate to replace with new core-components

Comment thread server/pyproject.toml
numpy = "<2.0"
matplotlib = "^3.10.0"
tifffile = "^2025.1.10"
mysqlclient = "^2.2.7"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need mysqlclient?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we want to keep all these files, since @jarosenb just added them in a PR a week ago

Comment thread client/src/styles/settings/font.css

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's likely that these projectfile directories are going to need a flag to turn them on and off, since I don't see a way to reconcile them with existing Shared Systems in Core.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we going to attempt to bring publications into other Core Portals as well? If so, this should also have a separate flag to turn on and off.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this still going to be necessary after a merge?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we'll want to decide which of these styles we want to go with, since it will change the portals across the board.

const sharedWorkspaces = systems.find((e) => e.scheme === 'projects');
const isPortalProject = scheme === 'projects';
const hideSearchBar = isPortalProject && sharedWorkspaces.hideSearchBar;
const hideSearchBar = isPortalProject && sharedWorkspaces?.hideSearchBar;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we have portals without shared workspaces in core?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For a public view, do we want to allow tapis operations?

@fnets fnets left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just went through this again to try and understand it a little more and flagged some questions/changes.

import { Link } from 'react-router-dom';

export default function CMSBreadcrumbs({ breadcrumbs = [] }) {
/* TODO: Move to …module.css OR into Core-Styles */

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like a good opportunity to knock this out.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Aye. Should move style to Core-Styles x-breadcrumbs.css1, specifically.

Detailed Steps
  1. Move style to Core-Styles x-breadcrumbs.css.1
  2. Release new Core-Styles.
  3. Delete from Core-CMS.
  4. Test on CMS.
  5. Release new Core-CMS.
  6. Delete from here.
  7. Test again here.

Wow… this smells like an architecture that is too coupled.
— you

Yes, I know. There is a plan to load Core-Styles better.
— me

Footnotes

  1. x- signifies a mixin. The x-breadcrumbs mixin is used by .s-breadcrumbs and tacc-docs.css and bootstrap3.breadcrumbs.css (for DesignSafe). 2

entry.comment.toLowerCase().includes('password') &&
entry.comment.toLowerCase().includes('change')
const passwordChanged = h.filter((entry) =>
entry.comment.includes('Password changed')

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not familiar with these functions, but it seems like they will find different sets of entries based on the parameters.

export async function fetchProjectsListing(queryString) {
export async function fetchProjectsListing(queryString, rootSystem) {
const q = queryStringParser.stringify({ query_string: queryString });
const url = rootSystem ? `api/projects/${rootSystem}` : `/api/projects/`;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are the portals with shared systems that don't have a root system?

Comment on lines +19 to +22
from portal.apps.projects.workspace_operations.project_meta_operations import (add_file_associations, create_file_obj, get_entity, get_file_obj, get_ordered_value, get_value, patch_entity_and_node,
patch_file_association, remove_file_obj_by_path)
from portal.apps.projects.schema_models import constants
from portal.apps.projects.workspace_operations.graph_operations import get_or_create_trash_entity, get_root_node, get_node_from_path

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
from portal.apps.projects.workspace_operations.project_meta_operations import (add_file_associations, create_file_obj, get_entity, get_file_obj, get_ordered_value, get_value, patch_entity_and_node,
patch_file_association, remove_file_obj_by_path)
from portal.apps.projects.schema_models import constants
from portal.apps.projects.workspace_operations.graph_operations import get_or_create_trash_entity, get_root_node, get_node_from_path
from portal.apps.projects.workspace_operations.project_meta_operations import (add_file_associations, create_file_obj, get_entity, get_file_obj, get_ordered_value, get_value, patch_entity_and_node, patch_file_association, remove_file_obj_by_path)
from portal.apps.projects.schema_models import constants
from portal.apps.projects.workspace_operations.graph_operations import get_or_create_trash_entity, get_root_node, get_node_from_path

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants