Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
370fe88
Migrate copy mako and controller to vue and fastapi
guerler Nov 7, 2025
5855fd0
Linting
guerler Nov 7, 2025
3eb7054
Replace axios calls with typed api calls
guerler Nov 7, 2025
1617bf0
Parse id and type of datasets as object instead of string
guerler Nov 7, 2025
03be34a
Fix model order
guerler Nov 7, 2025
63c6c6c
Update schema
guerler Nov 7, 2025
9df4dfc
Fix parameter name
guerler Nov 7, 2025
2635b99
Start improving the layout and appearance of the vue component
guerler Nov 7, 2025
4fa11af
Remove copy datasets link from operations, remove redundant label too
guerler Nov 7, 2025
8c63206
Add copy datasets to regular history operations
guerler Nov 7, 2025
f7cdd90
Add headers
guerler Nov 7, 2025
6b34fb6
Start using vue multiselect
guerler Nov 7, 2025
36591d0
Adjust layout
guerler Nov 7, 2025
e0593fb
Adjust misaligned placeholder
guerler Nov 7, 2025
820bb73
Adjust flow
guerler Nov 7, 2025
7ccb7d4
More refactoring, and adjustments of client component
guerler Nov 7, 2025
831675e
Fix selection mechanism
guerler Nov 7, 2025
e2512b0
Add loading span, ensure that only one of the options can be choosen
guerler Nov 7, 2025
b5c259a
Use copy icon
guerler Nov 7, 2025
49fb976
Add icon to button
guerler Nov 7, 2025
97d365c
Add unit test
guerler Nov 7, 2025
5c772e5
Adjust unit test
guerler Nov 7, 2025
f748ff7
Linting
guerler Nov 7, 2025
edf0169
Fix checkbox label handling, prep tests
guerler Nov 8, 2025
75594e8
Add new history name to success message
guerler Nov 8, 2025
ce7db58
Add link to new history
guerler Nov 8, 2025
2b1b67f
Add more tests, add link to success message
guerler Nov 8, 2025
a55c02f
Show links for all histories in the success message
guerler Nov 8, 2025
f92b01f
Remove dot
guerler Nov 8, 2025
ed53052
No need to reload origin history contents
guerler Nov 9, 2025
93fa6b2
Hide deleted datasets from copy panel
guerler Nov 9, 2025
d85f159
Auto-select current history
guerler Nov 9, 2025
93b9521
Fix capitalization for consistency
guerler Nov 9, 2025
7875a55
Adjust tests
guerler Nov 9, 2025
d2c8717
Switch to a histories endpoint
guerler Nov 10, 2025
32b7e6a
Move history content copy endpoint from datasets to history contents api
guerler Nov 10, 2025
7069366
Remove unused imports
guerler Nov 10, 2025
96b3d4f
Update unit test
guerler Nov 10, 2025
0963f57
Fix formatting
guerler Nov 10, 2025
4b27330
Remove focus helper
guerler Nov 9, 2025
fb1a767
Add context api endpoint
guerler Nov 9, 2025
27338f3
Refactor and streamline app bootstrapping from api endpoint
guerler Nov 10, 2025
5ba7131
Remove defaultConfigs
guerler Nov 10, 2025
c05bd17
Remove legacy monitoring of Galaxy object
guerler Nov 10, 2025
f2dc9ed
Expose window.Galaxy as previously but without set and monitoring ove…
guerler Nov 10, 2025
b3e49db
Consolidate global initialization
guerler Nov 10, 2025
bb999ba
Fix login condition
guerler Nov 10, 2025
312164e
Remove bootstrapping from mako
guerler Nov 10, 2025
3eb6afe
Use js for entry point for now
guerler Nov 10, 2025
0491fdc
Bypass legacy app launcher
guerler Nov 11, 2025
d5ecf6e
Remove legacy js app launcher from code base
guerler Nov 11, 2025
4fdff56
Move sentry to context endpoint
guerler Nov 11, 2025
90ee5df
Remove sentry and config bootstrapping from legacy mako helper
guerler Nov 11, 2025
4424312
Remove unused mako functions
guerler Nov 11, 2025
85eb326
More remaining mako functions to js-app.mako
guerler Nov 11, 2025
0e9d622
Refactor extend config addition
guerler Nov 11, 2025
ccaeba3
Load analysis app specific globals in analysis app
guerler Nov 11, 2025
65fef75
Move addons to app directory
guerler Nov 11, 2025
db9ff4a
Convert Galaxy object into an actual class
guerler Nov 11, 2025
0c3cd64
Add base client route
guerler Nov 11, 2025
801b784
Use default client endpoint
guerler Nov 11, 2025
d2cb8ed
Linting
guerler Nov 11, 2025
855a3a4
Refactoring for consistency
guerler Nov 11, 2025
0672c82
Remove label from init, move init helper to index
guerler Nov 12, 2025
ab43367
Consolidate and simplify galaxy object handling
guerler Nov 12, 2025
09d4e22
Rename legacy backbone model
guerler Nov 12, 2025
7c6422c
Adjust outdated makos, copy mako will be removed in another PR
guerler Nov 12, 2025
a5b85ac
Use ts ending for entry point
guerler Nov 12, 2025
aebdff4
Mount context endpoint outside of api
guerler Nov 12, 2025
461a5db
Remove unused attribute from context response
guerler Nov 12, 2025
dd92179
Remove redundant message_box_visible attribute, already in config
guerler Nov 12, 2025
1dc9ad8
Remove dynamic tool config filenames from context endpoint
guerler Nov 12, 2025
470f996
Strip legacy makos relying on galaxy app
guerler Nov 12, 2025
c38753d
Use config manager
guerler Nov 12, 2025
fc1a7f8
Fix manager initialization
guerler Nov 16, 2025
d42076c
Add endpoint response type
guerler Nov 16, 2025
b14361a
Remove outcommented attributes, sort rest alphabetically
guerler Nov 16, 2025
a44edbd
Switch to user serialize detailed view
guerler Nov 16, 2025
1fec18b
Remove unused import
guerler Nov 16, 2025
f18803d
Properly return context value
guerler Nov 16, 2025
c5ed887
Move sentry dsn public to regular config
guerler Nov 17, 2025
c4e7e7b
Provide activity status from user serialization
guerler Nov 17, 2025
359fece
Move webhook flag to config
guerler Nov 17, 2025
da0c994
Move workflow menu entries to user serialization
guerler Nov 17, 2025
b89ae49
Fix activation message visibility condition
guerler Nov 17, 2025
9dc45bb
Make sure trans exists before attempting to access history
guerler Nov 17, 2025
6c0b4af
Fix linting
guerler Nov 17, 2025
182f930
Add index/root route
guerler Nov 18, 2025
ec74743
Fix prefix root parsing
guerler Nov 19, 2025
76a2bb7
Add token for twilltest
guerler Nov 20, 2025
ca2a30e
Remove copy dataset mako
guerler Nov 20, 2025
a88936e
Fix session retrieval
guerler Nov 21, 2025
c72ee8d
Consistently expect application addons to be async functions
guerler Nov 21, 2025
2b24724
Update app index in testing
guerler Nov 25, 2025
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
159 changes: 159 additions & 0 deletions client/src/api/schema/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2421,6 +2421,23 @@ export interface paths {
patch?: never;
trace?: never;
};
"/api/histories/{history_id}/copy_contents": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
get?: never;
put?: never;
/** Copy datasets or dataset collections to other histories. */
post: operations["history_contents__copy_contents"];
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/api/histories/{history_id}/custom_builds_metadata": {
parameters: {
query?: never;
Expand Down Expand Up @@ -6460,6 +6477,23 @@ export interface paths {
patch?: never;
trace?: never;
};
"/context": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/** Return bootstrapped client context */
get: operations["index_context_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/ga4gh/drs/v1/objects/{object_id}": {
parameters: {
query?: never;
Expand Down Expand Up @@ -8196,6 +8230,21 @@ export interface components {
*/
name: string;
};
/** ContextResponse */
ContextResponse: {
/** Config */
config: {
[key: string]: unknown;
};
/** Root */
root: string;
/** Session Csrf Token */
session_csrf_token?: string | null;
/** User */
user: {
[key: string]: unknown;
};
};
/**
* ConvertedDatasetsMap
* @description Map of `file extension` -> `converted dataset encoded id`
Expand All @@ -8206,6 +8255,27 @@ export interface components {
ConvertedDatasetsMap: {
[key: string]: string;
};
/** CopyDatasetsPayload */
CopyDatasetsPayload: {
/** Source Content */
source_content: components["schemas"]["CopyDatasetsPayloadSourceEntry"][];
/** Target History Ids */
target_history_ids?: string[] | null;
/** Target History Name */
target_history_name?: string | null;
};
/** CopyDatasetsPayloadSourceEntry */
CopyDatasetsPayloadSourceEntry: {
/** Id */
id: string;
/** Type */
type: string;
};
/** CopyDatasetsResponse */
CopyDatasetsResponse: {
/** History Ids */
history_ids: string[];
};
/** CreateDataLandingPayload */
CreateDataLandingPayload: {
/** Client Secret */
Expand Down Expand Up @@ -32469,6 +32539,54 @@ export interface operations {
};
};
};
history_contents__copy_contents: {
parameters: {
query?: never;
header?: {
/** @description The user ID that will be used to effectively make this API call. Only admins and designated users can make API calls on behalf of other users. */
"run-as"?: string | null;
};
path: {
/** @description The encoded database identifier of the History. */
history_id: string;
};
cookie?: never;
};
requestBody: {
content: {
"application/json": components["schemas"]["CopyDatasetsPayload"];
};
};
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CopyDatasetsResponse"];
};
};
/** @description Request Error */
"4XX": {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["MessageExceptionModel"];
};
};
/** @description Server Error */
"5XX": {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["MessageExceptionModel"];
};
};
};
};
get_custom_builds_metadata_api_histories__history_id__custom_builds_metadata_get: {
parameters: {
query?: never;
Expand Down Expand Up @@ -45154,6 +45272,47 @@ export interface operations {
};
};
};
index_context_get: {
parameters: {
query?: never;
header?: {
/** @description The user ID that will be used to effectively make this API call. Only admins and designated users can make API calls on behalf of other users. */
"run-as"?: string | null;
};
path?: never;
cookie?: never;
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["ContextResponse"];
};
};
/** @description Request Error */
"4XX": {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["MessageExceptionModel"];
};
};
/** @description Server Error */
"5XX": {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["MessageExceptionModel"];
};
};
};
};
get_object_ga4gh_drs_v1_objects__object_id__get: {
parameters: {
query?: never;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,15 @@ import Vue from "vue";
*
* @param {object} config Galaxy configuration object
*/
export const initSentry = (galaxy, config) => {
export async function initSentry(Galaxy, router) {
console.log("initSentry");
if (config.sentry) {
const router = galaxy.router;
const { sentry_dsn_public, email } = config.sentry;
let release = galaxy.config.version_major;
if (galaxy.config.version_minor) {
release += `.${galaxy.config.version_minor}`;
const config = Galaxy.config;
if (config.sentry_dsn_public) {
const sentry_dsn_public = config.sentry_dsn_public;
const email = Galaxy.user.get("email");
let release = Galaxy.config.version_major;
if (Galaxy.config.version_minor) {
release += `.${Galaxy.config.version_minor}`;
}
Sentry.init({
Vue,
Expand All @@ -37,6 +38,6 @@ export const initSentry = (galaxy, config) => {
});
});
}
galaxy.Sentry = Sentry;
Galaxy.Sentry = Sentry;
}
};
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { appendScriptStyle } from "@/utils/utils";
import { loadWebhooks } from "@/utils/webhooks";

export async function onloadWebhooks(Galaxy) {
export async function initWebhooks(Galaxy) {
if (Galaxy.config.enable_webhooks) {
const webhooks = await loadWebhooks("onload");
webhooks.forEach((webhook) => {
Expand Down
30 changes: 15 additions & 15 deletions client/src/app/app.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,49 +3,49 @@ import { suppressDebugConsole } from "@tests/vitest/helpers";
import { beforeEach, describe, expect, test } from "vitest";

import { getGalaxyInstance, setGalaxyInstance } from "@/app";
import { GalaxyApp } from "@/app/galaxy";

export function setupTestGalaxy(galaxyOptions_ = null) {
galaxyOptions_ = galaxyOptions_ || galaxyOptions;
setGalaxyInstance((GalaxyApp) => new GalaxyApp(galaxyOptions_));
const app = new GalaxyApp(galaxyOptions_);
setGalaxyInstance(app);
}

// the app console debugs make sense but we just don't want to see them in test
// output.
// suppress console noise
suppressDebugConsole();

describe("App base construction/initializiation defaults", () => {
describe("App base construction/initialization defaults", () => {
beforeEach(() => {
setupTestGalaxy(galaxyOptions);
});

test("App base construction/initializiation defaults", function () {
test("App base construction/initialization defaults", () => {
const app = getGalaxyInstance();
expect(app.options && typeof app.options === "object").toBeTruthy();
expect(app.config && typeof app.config === "object").toBeTruthy();
expect(app.user && typeof app.config === "object").toBeTruthy();
expect(app.localize).toBe(window._l);
});

test("App base default options", function () {
test("App base default options", () => {
const app = getGalaxyInstance();
expect(app.options !== undefined && typeof app.options === "object").toBeTruthy();
expect(app.options.root).toBe("/");
expect(app.options.patchExisting).toBe(true);
});

// // We no longer want this behavior, but leaving the test to express that
test("App base will patch in attributes from existing Galaxy objects", function () {
// we no longer patch attributes from existing Galaxy objects, test expresses that
test("App base will patch in attributes from existing Galaxy objects", () => {
const existingApp = getGalaxyInstance();
existingApp.foo = 123;

const newApp = setGalaxyInstance((GalaxyApp) => {
return new GalaxyApp();
});
const newApp = new GalaxyApp();
setGalaxyInstance(newApp);

expect(newApp.foo === 123).toBeTruthy();
expect(newApp.foo).toBeUndefined();
});

test("App base config", function () {
test("App base config", () => {
const app = getGalaxyInstance();
expect(app.config && typeof app.config === "object").toBeTruthy();
expect(app.config.allow_user_deletion).toBe(false);
Expand All @@ -54,9 +54,9 @@ describe("App base construction/initializiation defaults", () => {
expect(app.config.ftp_upload_site).toBe(null);
});

test("App base user", function () {
test("App base user", () => {
const app = getGalaxyInstance();
expect(app.user !== undefined && typeof app.user === "object").toBeTruthy();
expect(app.user.isAdmin() === false).toBeTruthy();
expect(app.user.isAdmin()).toBe(false);
});
});
Loading
Loading