Skip to content
Merged
Show file tree
Hide file tree
Changes from 12 commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0009a17
initial commit
sherpan Sep 25, 2025
b24c175
Update docs/source/enterprise/getting_started.rst
sherpan Sep 25, 2025
68c7ff8
fixed terminology and added UI alternative
sherpan Sep 29, 2025
a8651ef
Revert #6288 - improve consistency of apply_model and compute_embeddi…
exupero Oct 8, 2025
0cdabae
Run CI on all PRs
jleven Oct 8, 2025
4d6f39d
modified order, added compute metadata reasoning, fixed column width
sherpan Oct 8, 2025
8998db9
Merge pull request #6394 from voxel51/task/ess/revert-6288-release
jleven Oct 9, 2025
ae6c584
Merge branch 'release/v1.9.0' of https://github.com/voxel51/fiftyone …
voxel51-bot Oct 9, 2025
d77f719
add run_by index as well as compound indexes (#6398)
CamronStaley Oct 9, 2025
1585ac6
Merge pull request #6397 from voxel51/jleven-patch-4
jleven Oct 10, 2025
136a650
check that audience matches urls
jleven Oct 10, 2025
4c2dbb3
fix(do-doc): dont deepcopy full exec context in to_pymongo (#6406)
swheaton Oct 10, 2025
ec21678
Merge branch 'merge/release/v1.9.0' of https://github.com/voxel51/fif…
voxel51-bot Oct 10, 2025
1867edc
Merge branch 'release/v1.9.0' of https://github.com/voxel51/fiftyone …
voxel51-bot Oct 10, 2025
98a5241
Merge pull request #6405 from voxel51/fix/use-fo-loader
jleven Oct 10, 2025
f8f2946
Merge branch 'release/v1.9.0' of https://github.com/voxel51/fiftyone …
voxel51-bot Oct 10, 2025
e97ac2d
added admin note for cloud cred install and link to install utils plugin
sherpan Oct 10, 2025
ff6086f
Update docs/source/enterprise/getting_started.rst
sherpan Oct 10, 2025
3f4bed4
Update docs/source/enterprise/getting_started.rst
sherpan Oct 10, 2025
2aacebd
cleanup
brimoor Oct 14, 2025
c58a1d8
Patch Sample and Field endpoints
CamronStaley Oct 14, 2025
98f302a
Merge pull request #6362 from voxel51/sid/add_enterprise_gs
sherpan Oct 14, 2025
eef150a
force brace-expansion version resolution to fix CVE-2025-5889
tom-vx51 Oct 14, 2025
126520c
Merge pull request #6413 from voxel51/chore/cve-2025-5889
tom-vx51 Oct 14, 2025
06324e6
Merge branch 'merge/release/v1.9.0' of https://github.com/voxel51/fif…
voxel51-bot Oct 14, 2025
4fb71a3
Merge branch 'release/v1.9.0' of https://github.com/voxel51/fiftyone …
voxel51-bot Oct 14, 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
5 changes: 0 additions & 5 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,6 @@ name: Pull Request
on:
pull_request:
types: [opened, synchronize]
branches:
- develop
- feat/*
- main
- release/v[0-9]+.[0-9]+.[0-9]+

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
Expand Down
21 changes: 19 additions & 2 deletions app/packages/looker-3d/src/hooks/use-fo-loaders.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
import { useLoader } from "@react-three/fiber";

function ensureArray(value) {
if (Array.isArray(value)) {
return value;
} else {
return [value];
}
}

/**
* Decorates useLoader() to support credentials forwarding
*/
Expand All @@ -12,8 +20,17 @@ export function useFoLoader<
loaderFunction?: Parameters<typeof useLoader>[2]
) {
return useLoader(loader, urls, (loaderInstance) => {
if (sessionStorage.getItem("customCredentialsAudience")?.length) {
loaderInstance.setWithCredentials(true);
const customCredentialsAudience = sessionStorage.getItem(
"customCredentialsAudience"
);
if (customCredentialsAudience) {
// The types say that `urls` is string | string[]
// But! Our code also sometimes passes in string[][]
// So, we're both calling ensureArray() and flat()
const urlArray = ensureArray(urls).flat();
if (urlArray.some((url) => url.includes(customCredentialsAudience))) {
loaderInstance.setWithCredentials(true);
}
}
if (loaderFunction) {
loaderFunction(loaderInstance);
Expand Down
15 changes: 10 additions & 5 deletions fiftyone/factory/repos/delegated_operation.py
Original file line number Diff line number Diff line change
Expand Up @@ -186,18 +186,23 @@ def _create_indexes(self):
)
)

if "dataset_id_1" not in index_names:
if "parent_id_1" not in index_names:
indices_to_create.append(
IndexModel(
[("dataset_id", pymongo.ASCENDING)], name="dataset_id_1"
[("parent_id", pymongo.ASCENDING)],
name="parent_id_1",
)
)

if "parent_id_1" not in index_names:
if "dataset_id_1_parent_id_1_scheduled_at_1" not in index_names:
indices_to_create.append(
IndexModel(
[("parent_id", pymongo.ASCENDING)],
name="parent_id_1",
[
("dataset_id", pymongo.ASCENDING),
("parent_id", pymongo.ASCENDING),
("scheduled_at", pymongo.DESCENDING),
],
name="dataset_id_1_parent_id_1_scheduled_at_1",
)
)

Expand Down
16 changes: 12 additions & 4 deletions fiftyone/factory/repos/delegated_operation_doc.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
|
"""
import copy
import dataclasses
import logging
from datetime import datetime

Expand Down Expand Up @@ -137,14 +136,23 @@ def from_pymongo(self, doc: dict):
return self

def to_pymongo(self) -> dict:
d = copy.deepcopy(self.__dict__)
# We make a copy of self.__dict__ so that changes we make below do not
# affect the actual object. We exclude certain keys that we don't want
# to serialize directly. "context" is particularly important we do not
# try to copy because it may contain big, complicated, non-serializable
# objects that may cause issues with copying.

ignore_keys = {"_doc", "id", "context", "pipeline"}
d = {
k: copy.deepcopy(v)
for k, v in self.__dict__.items()
if k not in ignore_keys
}
if self.context:
d["context"] = {
"request_params": self.context._get_serialized_request_params()
}
if self.pipeline:
d["pipeline"] = self.pipeline.to_json()

d.pop("_doc", None)
d.pop("id", None)
return d
31 changes: 31 additions & 0 deletions tests/unittests/operators/delegated_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -1671,3 +1671,34 @@ def test_set_queue_remote_service(self, mock_get_operator):
#####
self.assertRaises(PermissionError, dos.set_queued, op_id)
#####

def test_queue_panel_delegated_op(self, mock_get_operator):
"""Queue DO that comes from a panel"""
self.mock_is_remote_service.return_value = True
db = delegated_operation.MongoDelegatedOperationRepo()
dos = DelegatedOperationService(repo=db)
ctx = ExecutionContext(
request_params={
"params": {
"panel_id": bson.ObjectId(),
"panel_state": {"foo2": "bar2"},
}
}
)
ctx.request_params = {"foo": "bar"}
ctx.params = {
"panel_id": bson.ObjectId(),
"panel_state": {"foo2": "bar2"},
}

#####
doc = dos.queue_operation(
operator=f"{TEST_DO_PREFIX}/operator/foo",
label=mock_get_operator.return_value.name,
delegation_target="test_target",
context=ctx,
)
#####

self.docs_to_delete.append(doc)
self.assertEqual(doc.run_state, ExecutionRunState.SCHEDULED)
Loading