From b4708b058ab2bc799f15497ae059dfe1867232ee Mon Sep 17 00:00:00 2001 From: Johannes Terblanche Date: Tue, 16 Sep 2025 17:59:13 +0200 Subject: [PATCH 1/4] rm v0.25 deprecations --- src/DataBlobs/entities/BlobEntry.jl | 47 +++++++++++++++++-- src/DataBlobs/services/BlobEntry.jl | 2 +- src/DataBlobs/services/BlobStores.jl | 3 -- .../services/HelpersDataWrapEntryBlob.jl | 41 ---------------- src/Deprecated.jl | 42 ----------------- src/DistributedFactorGraphs.jl | 44 ++++++++++------- 6 files changed, 71 insertions(+), 108 deletions(-) diff --git a/src/DataBlobs/entities/BlobEntry.jl b/src/DataBlobs/entities/BlobEntry.jl index 94c999b8..ca4151da 100644 --- a/src/DataBlobs/entities/BlobEntry.jl +++ b/src/DataBlobs/entities/BlobEntry.jl @@ -2,7 +2,10 @@ ##============================================================================== ## Blobentry ##============================================================================== - +#TODO think origin and buildSourceString should be deprecated, description can be used instead +#TODO hash - maybe use both crc32c for fast error check and sha256 for strong integrity check +# stored seperately as crc and sha or as a tuple `hash::Tuple{Symbol, String}` where Symbol is :crc32c or :sha256 +# or an enum with suppored hash types """ $(TYPEDEF) @@ -16,9 +19,7 @@ Base.@kwdef struct Blobentry """ Remotely assigned and globally unique identifier for the `Blobentry` itself (not the `.blobId`). """ id::Union{UUID, Nothing} = nothing """ Machine friendly and globally unique identifier of the 'Blob', usually assigned from a common point in the system. This can be used to guarantee unique retrieval of the large data blob. """ - blobId::Union{UUID, Nothing} = uuid4() #Deprecated in v0.25 TODO remove union, blobId is mandatory - """ TBD if Deprecated. Machine friendly and locally assigned identifier of the 'Blob'.""" - originId::Union{UUID, Nothing} = blobId #Deprecated in v0.25 TODO remove union or remove originId completely + blobId::UUID = uuid4() """ Human friendly label of the `Blob` and also used as unique identifier per node on which a `Blobentry` is added. E.g. do "LEFTCAM_1", "LEFTCAM_2", ... of you need to repeat a label on the same variable. """ label::Symbol """ A hint about where the `Blob` itself might be stored. Remember that a Blob may be duplicated over multiple blobstores. """ @@ -28,7 +29,7 @@ Base.@kwdef struct Blobentry """ Context from which a Blobentry=>Blob was first created. E.g. agent|graph|varlabel. """ origin::String = "" """ number of bytes in blob as a string""" - size::Union{String, Nothing} = "-1" #TODO remove union -> size::String = "-1" + size::String = "-1" """ Additional information that can help a different user of the Blob. """ description::String = "" """ MIME description describing the format of binary data in the `Blob`, e.g. 'image/png' or 'application/json; _type=CameraModel'. """ @@ -48,3 +49,39 @@ end StructTypes.StructType(::Type{Blobentry}) = StructTypes.UnorderedStruct() StructTypes.idproperty(::Type{Blobentry}) = :id StructTypes.omitempties(::Type{Blobentry}) = (:id,) + +# construction helper from existing Blobentry for user overriding via kwargs +function Blobentry( + entry::Blobentry; + id::Union{UUID, Nothing} = entry.id, + blobId::UUID = entry.blobId, + label::Symbol = entry.label, + blobstore::Symbol = entry.blobstore, + hash::String = entry.hash, + size::Union{String, Int, Nothing} = entry.size, + origin::String = entry.origin, + description::String = entry.description, + mimeType::String = entry.mimeType, + metadata::String = entry.metadata, + timestamp::ZonedDateTime = entry.timestamp, + createdTimestamp = entry.createdTimestamp, + lastUpdatedTimestamp = entry.lastUpdatedTimestamp, + _version = entry._version, +) + return Blobentry(; + id, + blobId, + label, + blobstore, + hash, + origin, + size = string(size), + description, + mimeType, + metadata, + timestamp, + createdTimestamp, + lastUpdatedTimestamp, + _version, + ) +end diff --git a/src/DataBlobs/services/BlobEntry.jl b/src/DataBlobs/services/BlobEntry.jl index 96ca07c8..a7663b27 100644 --- a/src/DataBlobs/services/BlobEntry.jl +++ b/src/DataBlobs/services/BlobEntry.jl @@ -1,7 +1,7 @@ ##============================================================================== ## Blobentry - common ##============================================================================== - +#TODO think origin and buildSourceString should be deprecated, description can be used instead """ $(SIGNATURES) Function to generate source string - agentLabel|graphLabel|varLabel diff --git a/src/DataBlobs/services/BlobStores.jl b/src/DataBlobs/services/BlobStores.jl index 7122f5f5..0259f91b 100644 --- a/src/DataBlobs/services/BlobStores.jl +++ b/src/DataBlobs/services/BlobStores.jl @@ -123,9 +123,6 @@ struct FolderStore{T} <: AbstractBlobstore{T} folder::String end -#TODO added in v0.25 to avoid a breaking change in deserialization old DFGs, remove. -StructTypes.StructType(::Type{<:FolderStore}) = StructTypes.OrderedStruct() - function FolderStore(foldername::String; label::Symbol = :default, createfolder = true) storepath = joinpath(foldername, string(label)) if createfolder && !isdir(storepath) diff --git a/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl b/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl index 06e822ff..982450a5 100644 --- a/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl +++ b/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl @@ -40,44 +40,6 @@ $(METHODLIST) """ function deleteData! end -# construction helper from existing Blobentry for user overriding via kwargs -function Blobentry( - entry::Blobentry; - id::Union{UUID, Nothing} = entry.id, - blobId::Union{UUID, Nothing} = entry.blobId, - originId::UUID = entry.originId, - label::Symbol = entry.label, - blobstore::Symbol = entry.blobstore, - hash::String = entry.hash, - size::Union{String, Int, Nothing} = entry.size, - origin::String = entry.origin, - description::String = entry.description, - mimeType::String = entry.mimeType, - metadata::String = entry.metadata, - timestamp::ZonedDateTime = entry.timestamp, - createdTimestamp = entry.createdTimestamp, - lastUpdatedTimestamp = entry.lastUpdatedTimestamp, - _version = entry._version, -) - return Blobentry(; - id, - blobId, - originId, - label, - blobstore, - hash, - origin, - size = string(size), - description, - mimeType, - metadata, - timestamp, - createdTimestamp, - lastUpdatedTimestamp, - _version, - ) -end - function getData( dfg::AbstractDFG, vlabel::Symbol, @@ -182,14 +144,12 @@ function addData!( mimeType::String = "application/octet-stream", id::Union{UUID, Nothing} = nothing, blobId::UUID = uuid4(), - originId::UUID = blobId, hashfunction = sha256, ) # entry = Blobentry(; id, blobId, - originId, label = bLbl, blobstore = getLabel(blobstore), hash = string(bytes2hex(hashfunction(blob))), @@ -222,7 +182,6 @@ function addData!( entry = Blobentry(; blobId, - originId = blobId, label = blobLabel, blobstore = getLabel(blobstore), # hash = string(bytes2hex(hashfunction(blob))), diff --git a/src/Deprecated.jl b/src/Deprecated.jl index dcfc5c80..08842d27 100644 --- a/src/Deprecated.jl +++ b/src/Deprecated.jl @@ -766,45 +766,3 @@ function typeModuleName(variableType::StateType) end typeModuleName(varT::Type{<:StateType}) = typeModuleName(varT()) - -## ================================================================================ -## Deprecated in v0.25 -##================================================================================= -@deprecate getSessionBlobEntry(args...) getGraphBlobEntry(args...) -@deprecate getSessionBlobEntries(args...) getGraphBlobEntries(args...) -@deprecate addSessionBlobEntry!(args...) addGraphBlobEntry!(args...) -@deprecate addSessionBlobEntries!(args...) addGraphBlobEntries!(args...) -@deprecate updateSessionBlobEntry!(args...) updateGraphBlobEntry!(args...) -@deprecate deleteSessionBlobEntry!(args...) deleteGraphBlobEntry!(args...) -@deprecate getRobotBlobEntry(args...) getAgentBlobEntry(args...) -@deprecate getRobotBlobEntries(args...) getAgentBlobEntries(args...) -@deprecate addRobotBlobEntry!(args...) addAgentBlobEntry!(args...) -@deprecate addRobotBlobEntries!(args...) addAgentBlobEntries!(args...) -@deprecate updateRobotBlobEntry!(args...) updateAgentBlobEntry!(args...) -@deprecate deleteRobotBlobEntry!(args...) deleteAgentBlobEntry!(args...) -@deprecate getUserBlobEntry(args...) getAgentBlobEntry(args...) -@deprecate getUserBlobEntries(args...) getAgentBlobEntries(args...) -@deprecate addUserBlobEntry!(args...) addAgentBlobEntry!(args...) -@deprecate addUserBlobEntries!(args...) addAgentBlobEntries!(args...) -@deprecate updateUserBlobEntry!(args...) updateAgentBlobEntry!(args...) -@deprecate deleteUserBlobEntry!(args...) deleteAgentBlobEntry!(args...) -@deprecate listSessionBlobEntries(args...) listGraphBlobEntries(args...) -@deprecate listRobotBlobEntries(args...) listAgentBlobEntries(args...) -@deprecate listUserBlobEntries(args...) listAgentBlobEntries(args...) - -@deprecate getUserData(args...) getAgentMetadata(args...) -@deprecate getRobotData(args...) getAgentMetadata(args...) -@deprecate getSessionData(args...) getGraphMetadata(args...) - -@deprecate setUserData!(args...) setAgentMetadata!(args...) -@deprecate setRobotData!(args...) setAgentMetadata!(args...) -@deprecate setSessionData!(args...) setGraphMetadata!(args...) - -@deprecate getUserLabel(dfg) getAgentLabel(dfg) -@deprecate getRobotLabel(dfg) getAgentLabel(dfg) -@deprecate getSessionLabel(dfg) getGraphLabel(dfg) - -DFGSummary(args) = error("DFGSummary is deprecated") -@deprecate getSummary(dfg::AbstractDFG) getSummaryGraph(dfg) - -@deprecate getKey(store::AbstractBlobstore) getLabel(store) diff --git a/src/DistributedFactorGraphs.jl b/src/DistributedFactorGraphs.jl index b1612252..bbd946dc 100644 --- a/src/DistributedFactorGraphs.jl +++ b/src/DistributedFactorGraphs.jl @@ -88,19 +88,36 @@ export State, PackedState ## Functions ##------------------------------------------------------------------------------ # v1 name, signiture, return, and error checked -export addVariable!, mergeVariable!, deleteVariable! -export addVariables!, getVariables -export addFactor!, getFactor, deleteFactor! -export addFactors!, getFactors - -export addState!, getState, mergeState!, deleteState! -export addStates!, mergeStates!, deleteStates! - -export addBlobentry!, getBlobentry, mergeBlobentry!, deleteBlobentry! +export addVariable! +export mergeVariable! +export deleteVariable! +export addVariables! +export getVariables + +export addFactor! +export getFactor +export deleteFactor! +export addFactors! +export getFactors + +export addState! +export getState +export mergeState! +export deleteState! +export addStates! +export mergeStates! +export deleteStates! + +export addBlobentry! +export getBlobentry +export mergeBlobentry! +export deleteBlobentry! export addBlobentries! ## list -export listVariables, listFactors, listStates +export listVariables +export listFactors +export listStates ## export getGraphBlobentry @@ -304,10 +321,6 @@ export listNeighbors # addModel! # getGraphs -##============================================================================== - -export getFactorState # FIXME getFactorState were questioned and being reviewed again for name, other than that they are checked. - ##============================================================================== export @format_str # exported from FileIO @@ -318,6 +331,7 @@ export @defStateType #TODO Should this be exported? const unstable_functions::Vector{Symbol} = [ :InMemoryBlobstore, :MetadataTypes, #maybe make public after metadata stable + :getFactorState, # FIXME getFactorState were questioned and being reviewed again for name, other than that they are checked. :exists, :emptyMetadata!, #TODO maybe deprecate for just deleteMetadata! :emptyBlobstore!, #TODO maybe deprecate for just deleteBlobstore! @@ -486,8 +500,6 @@ const unstable_functions::Vector{Symbol} = [ :GenericFunctionNodeData, :PackedFunctionNodeData, :FunctionNodeData, - # Deprecated in v0.25 - :DFGSummary, ] macro usingDFG(unstable = false) From 4049acb6f6463cd2f3b6a2afbb4b58b0f5667e9c Mon Sep 17 00:00:00 2001 From: Johannes Terblanche Date: Tue, 16 Sep 2025 18:01:02 +0200 Subject: [PATCH 2/4] deprecate update[Blob|data] as obsolete --- src/DataBlobs/services/BlobStores.jl | 7 --- .../services/HelpersDataWrapEntryBlob.jl | 52 ++----------------- src/Deprecated.jl | 46 ++++++++++++++++ 3 files changed, 49 insertions(+), 56 deletions(-) diff --git a/src/DataBlobs/services/BlobStores.jl b/src/DataBlobs/services/BlobStores.jl index 0259f91b..d13503e2 100644 --- a/src/DataBlobs/services/BlobStores.jl +++ b/src/DataBlobs/services/BlobStores.jl @@ -364,13 +364,6 @@ function addBlob!(store::RowBlobstore{T}, blobId::UUID, blob::T) where {T} return blobId end -function updateBlob!(store::RowBlobstore{T}, blobId::UUID, blob::T) where {T} - if haskey(store.blobs, blobId) - @warn "Key '$blobId' doesn't exist." - end - return store.blobs[blobId] = RowBlob(blobId, blob) -end - function deleteBlob!(store::RowBlobstore, blobId::UUID) if !haskey(store.blobs, blobId) throw(IdNotFoundError("Blob", blobId)) diff --git a/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl b/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl index 982450a5..a2cfbd7a 100644 --- a/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl +++ b/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl @@ -22,15 +22,6 @@ $(METHODLIST) """ function addData! end -""" -Update a blob entry or blob to the blob store or dfg. -Related -[`mergeBlobentry!`](@ref) - -$(METHODLIST) -""" -function updateData! end - """ Delete a blob entry and blob from the blob store or dfg. Related @@ -70,13 +61,13 @@ end function getData( dfg::AbstractDFG, blobstore::AbstractBlobstore, - label::Symbol, - key::Symbol; + var_label::Symbol, + entry_label::Symbol; hashfunction = sha256, checkhash::Bool = true, getlast::Bool = true, ) - de = getBlobentry(dfg, label, key) + de = getBlobentry(dfg, var_label, entry_label) db = getBlob(blobstore, de) checkhash && assertHash(de, db; hashfunction) return de => db @@ -196,43 +187,6 @@ function addData!( return entry => blob end -function updateData!( - dfg::AbstractDFG, - label::Symbol, - entry::Blobentry, - blob::Vector{UInt8}; - hashfunction = sha256, - checkhash::Bool = true, -) - checkhash && assertHash(entry, blob; hashfunction) - # order of ops with unknown new blobId not tested - mergeBlobentry!(dfg, label, entry) - db = updateBlob!(dfg, de, blob) - return 2 -end - -function updateData!( - dfg::AbstractDFG, - blobstore::AbstractBlobstore, - label::Symbol, - entry::Blobentry, - blob::Vector{UInt8}; - hashfunction = sha256, -) - # Recalculate the hash - NOTE Assuming that this is going to be a Blobentry. TBD. - # order of operations with unknown new blobId not tested - newEntry = Blobentry( - entry; # and kwargs to override new values - blobstore = getLabel(blobstore), - hash = string(bytes2hex(hashfunction(blob))), - origin = buildSourceString(dfg, label), - _version = _getDFGVersion(), - ) - mergeBlobentry!(dfg, label, newEntry) - updateBlob!(blobstore, newEntry, blob) - return 2 -end - function deleteData!(dfg::AbstractDFG, vLbl::Symbol, bLbl::Symbol) de = getBlobentry(dfg, vLbl, bLbl) deleteBlobentry!(dfg, vLbl, bLbl) diff --git a/src/Deprecated.jl b/src/Deprecated.jl index 08842d27..336dcb11 100644 --- a/src/Deprecated.jl +++ b/src/Deprecated.jl @@ -353,6 +353,52 @@ function setMetadata!(v::VariableCompute, metadata::Dict{Symbol, MetadataTypes}) return merge!(v.smallData, metadata) end +function updateData!( + dfg::AbstractDFG, + label::Symbol, + entry::Blobentry, + blob::Vector{UInt8}; + hashfunction = sha256, + checkhash::Bool = true, +) + @warn "updateData! is obsolete." + checkhash && assertHash(entry, blob; hashfunction) + # order of ops with unknown new blobId not tested + mergeBlobentry!(dfg, label, entry) + db = updateBlob!(dfg, de, blob) + return 2 +end + +function updateData!( + dfg::AbstractDFG, + blobstore::AbstractBlobstore, + label::Symbol, + entry::Blobentry, + blob::Vector{UInt8}; + hashfunction = sha256, +) + @warn "updateData! is obsolete." + # Recalculate the hash - NOTE Assuming that this is going to be a Blobentry. TBD. + # order of operations with unknown new blobId not tested + newEntry = Blobentry( + entry; # and kwargs to override new values + blobstore = getLabel(blobstore), + hash = string(bytes2hex(hashfunction(blob))), + origin = buildSourceString(dfg, label), + _version = _getDFGVersion(), + ) + mergeBlobentry!(dfg, label, newEntry) + updateBlob!(blobstore, newEntry, blob) + return 2 +end + +function updateBlob!(store::RowBlobstore{T}, blobId::UUID, blob::T) where {T} + @warn "updateBlob! is obsolete." + if haskey(store.blobs, blobId) + @warn "Key '$blobId' doesn't exist." + end + return store.blobs[blobId] = RowBlob(blobId, blob) +end ## ================================================================================ ## Deprecated in v0.27 ##================================================================================= From c80c0e78ec23c1fe07131095442b7b287d69f845 Mon Sep 17 00:00:00 2001 From: Johannes Terblanche Date: Wed, 17 Sep 2025 19:49:27 +0200 Subject: [PATCH 3/4] Basic BlobWrappers ([save|load]Blob --- src/DataBlobs/entities/BlobEntry.jl | 3 + src/DataBlobs/services/BlobEntry.jl | 11 +- src/DataBlobs/services/BlobWrappers.jl | 198 ++++++++++++++++ .../services/HelpersDataWrapEntryBlob.jl | 216 ------------------ src/Deprecated.jl | 204 +++++++++++++++++ src/DistributedFactorGraphs.jl | 2 +- test/consol_DataEntryBlobTests.jl | 41 ++-- test/testBlocks.jl | 61 +++-- 8 files changed, 456 insertions(+), 280 deletions(-) create mode 100644 src/DataBlobs/services/BlobWrappers.jl delete mode 100644 src/DataBlobs/services/HelpersDataWrapEntryBlob.jl diff --git a/src/DataBlobs/entities/BlobEntry.jl b/src/DataBlobs/entities/BlobEntry.jl index ca4151da..f8018c2f 100644 --- a/src/DataBlobs/entities/BlobEntry.jl +++ b/src/DataBlobs/entities/BlobEntry.jl @@ -50,6 +50,9 @@ StructTypes.StructType(::Type{Blobentry}) = StructTypes.UnorderedStruct() StructTypes.idproperty(::Type{Blobentry}) = :id StructTypes.omitempties(::Type{Blobentry}) = (:id,) +function Blobentry(label::Symbol, blobstore = :default; kwargs...) + return Blobentry(; label, blobstore, kwargs...) +end # construction helper from existing Blobentry for user overriding via kwargs function Blobentry( entry::Blobentry; diff --git a/src/DataBlobs/services/BlobEntry.jl b/src/DataBlobs/services/BlobEntry.jl index a7663b27..91b8a943 100644 --- a/src/DataBlobs/services/BlobEntry.jl +++ b/src/DataBlobs/services/BlobEntry.jl @@ -329,15 +329,16 @@ If the blob label `datalabel_1` already exists, then this function will return t """ function incrDataLabelSuffix( dfg::AbstractDFG, - vla::Union{Symbol, <:AbstractString}, - bllb::S; + vla::Symbol, + bllb::Union{Symbol, <:AbstractString}; datalabel = Ref(""), -) where {S <: Union{Symbol, <:AbstractString}} +) count = 1 hasund = false len = 0 try - de, _ = getData(dfg, Symbol(vla), bllb) + de = getfirstBlobentry(dfg, vla; labelFilter = contains(string(bllb))) + isnothing(de) && return Symbol(bllb) # no match, return as is bllb = string(bllb) # bllb *= bllb[end] != '_' ? "_" : "" datalabel[] = string(de.label) @@ -361,5 +362,5 @@ function incrDataLabelSuffix( end bllb *= string(count) - return S(bllb) + return Symbol(bllb) end diff --git a/src/DataBlobs/services/BlobWrappers.jl b/src/DataBlobs/services/BlobWrappers.jl new file mode 100644 index 00000000..c0a7f47b --- /dev/null +++ b/src/DataBlobs/services/BlobWrappers.jl @@ -0,0 +1,198 @@ +##============================================================================== +## Blob + Blobentry CRUD interface +##============================================================================== + +""" +Convenience wrapper to load a Blob for a given variable and Blobentry label. + +$(METHODLIST) +""" +function loadBlob_Variable end + +""" +Convenience wrapper to save a Blob to a Blobstore and a Blobentry to a variable. +$(METHODLIST) +""" +function saveBlob_Variable! end + +""" +Convenience wrapper to delete a Blob form a Blobstore and its Blobentry from a variable. +$(METHODLIST) +""" +function deleteBlob_Variable! end + +""" +Convenience wrapper to load a Blob for a given graph and Blobentry label. + +$(METHODLIST) +""" +function loadBlob_Graph end + +""" +Convenience wrapper to save a Blob to a Blobstore and a Blobentry to a graph. + +$(METHODLIST) +""" +function saveBlob_Graph! end + +""" +Convenience wrapper to delete a Blob from a Blobstore and its Blobentry from a graph. + +$(METHODLIST) +""" +function deleteBlob_Graph! end + +""" +Convenience wrapper to load a Blob for a given agent and Blobentry label. + +$(METHODLIST) +""" +function loadBlob_Agent end + +""" +Convenience wrapper to save a Blob to a Blobstore and a Blobentry to an agent. + +$(METHODLIST) +""" +function saveBlob_Agent! end + +""" +Convenience wrapper to delete a Blob from a Blobstore and its Blobentry from an agent. + +$(METHODLIST) +""" +function deleteBlob_Agent! end + +function loadBlob_Variable( + dfg::AbstractDFG, + variable_label::Symbol, + entry_label::Symbol; + # hashfunction = sha256, + # checkhash::Bool = true, +) + entry = getBlobentry(dfg, variable_label, entry_label) + blob = getBlob(dfg, entry) + # checkhash && assertHash(de, db; hashfunction) + return entry, blob +end + +function saveBlob_Variable!( + dfg::AbstractDFG, + variable_label::Symbol, + blob::Vector{UInt8}, + entry::Blobentry, +) + addBlobentry!(dfg, variable_label, entry) + addBlob!(dfg, entry, blob) + return entry +end + +function saveBlob_Variable!( + dfg::AbstractDFG, + variable_label::Symbol, + blob::Vector{UInt8}, + entry_label::Symbol, + blobstore::Symbol = :default; + blobentry_kwargs..., +) + entry = Blobentry(entry_label, blobstore; blobentry_kwargs...) + return saveBlob_Variable!(dfg, variable_label, blob, entry) +end + +function deleteBlob_Variable!(dfg::AbstractDFG, variable_label::Symbol, entry_label::Symbol) + entry = getBlobentry(dfg, variable_label, entry_label) + deleteBlobentry!(dfg, variable_label, entry_label) + deleteBlob!(dfg, entry) + return 2 +end + +function loadBlob_Graph(dfg::AbstractDFG, entry_label::Symbol;) + entry = getGraphBlobentry(dfg, entry_label) + blob = getBlob(dfg, entry) + return entry, blob +end + +function saveBlob_Graph!(dfg::AbstractDFG, blob::Vector{UInt8}, entry::Blobentry) + addGraphBlobentry!(dfg, entry) + addBlob!(dfg, entry, blob) + return entry +end + +function saveBlob_Graph!( + dfg::AbstractDFG, + blob::Vector{UInt8}, + entry_label::Symbol, + blobstore::Symbol = :default; + blobentry_kwargs..., +) + entry = Blobentry(entry_label, blobstore; blobentry_kwargs...) + return saveBlob_Graph!(dfg, blob, entry) +end + +function deleteBlob_Graph!(dfg::AbstractDFG, entry_label::Symbol) + entry = getGraphBlobentry(dfg, entry_label) + deleteGraphBlobentry!(dfg, entry_label) + deleteBlob!(dfg, entry) + return 2 +end + +function loadBlob_Agent(dfg::AbstractDFG, entry_label::Symbol;) + entry = getAgentBlobentry(dfg, entry_label) + blob = getBlob(dfg, entry) + return entry, blob +end + +function saveBlob_Agent!(dfg::AbstractDFG, blob::Vector{UInt8}, entry::Blobentry) + addAgentBlobentry!(dfg, entry) + addBlob!(dfg, entry, blob) + return entry +end + +function saveBlob_Agent!( + dfg::AbstractDFG, + blob::Vector{UInt8}, + entry_label::Symbol, + blobstore::Symbol = :default; + blobentry_kwargs..., +) + entry = Blobentry(entry_label, blobstore; blobentry_kwargs...) + return saveBlob_Agent!(dfg, blob, entry) +end + +function deleteBlob_Agent!(dfg::AbstractDFG, entry_label::Symbol) + entry = getAgentBlobentry(dfg, entry_label) + deleteAgentBlobentry!(dfg, entry_label) + deleteBlob!(dfg, entry) + return 2 +end + +function saveImage_Variable!( + dfg::AbstractDFG, + variable_label::Symbol, + img::AbstractMatrix, + entry_label::Symbol, + blobstore::Symbol = :default; + entry_kwargs..., +) + mimeType = get(entry_kwargs, :mimeType, MIME("image/png")) + format = _MIMETypes[mimeType] + + blob, mimeType = packBlob(format, img) + + size = string(length(blob)) + entry = Blobentry( + entry_label, + blobstore; + blobId = uuid4(), + entry_kwargs..., + size, + mimeType = string(mimeType), + ) + + return saveBlob_Variable!(dfg, variable_label, blob, entry) +end + +function loadImage_Variable(dfg::AbstractDFG, variable_label::Symbol, entry_label::Symbol) + entry, blob = loadBlob_Variable(dfg, variable_label, entry_label) + return entry, unpackBlob(entry, blob) +end diff --git a/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl b/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl deleted file mode 100644 index a2cfbd7a..00000000 --- a/src/DataBlobs/services/HelpersDataWrapEntryBlob.jl +++ /dev/null @@ -1,216 +0,0 @@ - -##============================================================================== -## Data CRUD interface -##============================================================================== -# NOTE this is the convenience wrappers for entry and blob. - -""" -Get the blob entry and blob for the specified blobstore or dfg retured as a tuple. -Related -[`getBlobentry`](@ref) - -$(METHODLIST) -""" -function getData end - -""" -Add both a Blobentry and Blob to a distributed factor graph or Blobstore. -Related -[`addBlobentry!`](@ref) - -$(METHODLIST) -""" -function addData! end - -""" -Delete a blob entry and blob from the blob store or dfg. -Related -[`deleteBlobentry!`](@ref) - -$(METHODLIST) -""" -function deleteData! end - -function getData( - dfg::AbstractDFG, - vlabel::Symbol, - key::Union{Symbol, UUID, <:AbstractString, Regex}; - hashfunction = sha256, - checkhash::Bool = true, - getlast::Bool = true, -) - _getblobentr(g, v, k) = getBlobentries(g, v, k) - _getblobentr(g, v, k::UUID) = [getfirstBlobentry(g, v, k);] - de_ = _getblobentr(dfg, vlabel, key) - lbls = (s -> s.label).(de_) - idx = sortperm(lbls; rev = getlast) - _first(s) = s - _first(s::AbstractVector) = 0 < length(s) ? s[1] : nothing - de = _first(de_[idx]) - if isnothing(de) - @error "Could not find in $vlabel the key $key" - return nothing - end - db = getBlob(dfg, de) - - checkhash && assertHash(de, db; hashfunction = hashfunction) - return de => db -end - -# This is the normal one -function getData( - dfg::AbstractDFG, - blobstore::AbstractBlobstore, - var_label::Symbol, - entry_label::Symbol; - hashfunction = sha256, - checkhash::Bool = true, - getlast::Bool = true, -) - de = getBlobentry(dfg, var_label, entry_label) - db = getBlob(blobstore, de) - checkhash && assertHash(de, db; hashfunction) - return de => db -end - -#FIXME Should `addData!`` not return entry=>blob pair? -function addData!( - dfg::AbstractDFG, - label::Symbol, - entry::Blobentry, - blob::Vector{UInt8}; - hashfunction = sha256, - checkhash::Bool = false, -) - checkhash && assertHash(entry, blob; hashfunction) - blobId = addBlob!(dfg, entry, blob) |> UUID - newEntry = Blobentry(entry; blobId) #, size=length(blob)) - return addBlobentry!(dfg, label, newEntry) -end - -function addData!( - dfg::AbstractDFG, - blobstore::AbstractBlobstore, - label::Symbol, - entry::Blobentry, - blob::Vector{UInt8}; - hashfunction = sha256, - checkhash::Bool = false, -) - checkhash && assertHash(entry, blob; hashfunction) - blobId = addBlob!(blobstore, entry, blob) |> UUID - newEntry = Blobentry(entry; blobId) #, size=length(blob)) - return addBlobentry!(dfg, label, newEntry) -end - -function addData!( - dfg::AbstractDFG, - blobstorekey::Symbol, - vLbl::Symbol, - bLbl::Symbol, - blob::Vector{UInt8}, - timestamp = now(localzone()); - kwargs..., -) - return addData!( - dfg, - getBlobstore(dfg, blobstorekey), - vLbl, - bLbl, - blob, - timestamp; - kwargs..., - ) -end - -function addData!( - dfg::AbstractDFG, - blobstore::AbstractBlobstore, - vLbl::Symbol, - bLbl::Symbol, - blob::Vector{UInt8}, - timestamp = now(localzone()); - description = "", - metadata = "", - mimeType::String = "application/octet-stream", - id::Union{UUID, Nothing} = nothing, - blobId::UUID = uuid4(), - hashfunction = sha256, -) - # - entry = Blobentry(; - id, - blobId, - label = bLbl, - blobstore = getLabel(blobstore), - hash = string(bytes2hex(hashfunction(blob))), - origin = buildSourceString(dfg, vLbl), - description, - mimeType, - metadata, - timestamp, - ) - - return addData!(dfg, blobstore, vLbl, entry, blob; hashfunction) -end - -function addData!( - dfg::AbstractDFG, - blobstore::AbstractBlobstore{T}, - vLbl::Symbol, - blobLabel::Symbol, - blob::T, - timestamp = now(localzone()); - description = "", - metadata = "", - mimeType::String = "application/octet-stream", - origin = buildSourceString(dfg, vLbl), - # hashfunction = sha256, -) where {T} - # - # checkhash && assertHash(entry, blob; hashfunction) - blobId = addBlob!(blobstore, blob) - - entry = Blobentry(; - blobId, - label = blobLabel, - blobstore = getLabel(blobstore), - # hash = string(bytes2hex(hashfunction(blob))), - hash = "", - origin, - description, - mimeType, - metadata, - timestamp, - ) - addBlobentry!(dfg, vLbl, entry) - return entry => blob -end - -function deleteData!(dfg::AbstractDFG, vLbl::Symbol, bLbl::Symbol) - de = getBlobentry(dfg, vLbl, bLbl) - deleteBlobentry!(dfg, vLbl, bLbl) - deleteBlob!(dfg, de) - return 2 -end - -function deleteData!( - dfg::AbstractDFG, - blobstore::AbstractBlobstore, - vLbl::Symbol, - entry::Blobentry, -) - return deleteData!(dfg, blobstore, vLbl, entry.label) -end - -function deleteData!( - dfg::AbstractDFG, - blobstore::AbstractBlobstore, - vLbl::Symbol, - bLbl::Symbol, -) - de = getBlobentry(dfg, vLbl, bLbl) - deleteBlobentry!(dfg, vLbl, bLbl) - deleteBlob!(blobstore, de) - return 2 -end diff --git a/src/Deprecated.jl b/src/Deprecated.jl index 336dcb11..a2dcaa6c 100644 --- a/src/Deprecated.jl +++ b/src/Deprecated.jl @@ -399,6 +399,210 @@ function updateBlob!(store::RowBlobstore{T}, blobId::UUID, blob::T) where {T} end return store.blobs[blobId] = RowBlob(blobId, blob) end + +function getData( + dfg::AbstractDFG, + vlabel::Symbol, + key::Union{Symbol, UUID, <:AbstractString, Regex}; + hashfunction = sha256, + checkhash::Bool = true, + getlast::Bool = true, +) + Base.depwarn("getData is deprecated, use loadBlob_Variable instead.", :getData) + _getblobentr(g, v, k) = getBlobentries(g, v, k) + _getblobentr(g, v, k::UUID) = [getfirstBlobentry(g, v, k);] + de_ = _getblobentr(dfg, vlabel, key) + lbls = (s -> s.label).(de_) + idx = sortperm(lbls; rev = getlast) + _first(s) = s + _first(s::AbstractVector) = 0 < length(s) ? s[1] : nothing + de = _first(de_[idx]) + if isnothing(de) + @error "Could not find in $vlabel the key $key" + return nothing + end + db = getBlob(dfg, de) + + checkhash && assertHash(de, db; hashfunction = hashfunction) + return de => db +end + +# This is the normal one +function getData( + dfg::AbstractDFG, + blobstore::AbstractBlobstore, + var_label::Symbol, + entry_label::Symbol; + hashfunction = sha256, + checkhash::Bool = true, + getlast::Bool = true, +) + Base.depwarn("getData is deprecated, use loadBlob_Variable instead.", :getData) + de = getBlobentry(dfg, var_label, entry_label) + db = getBlob(blobstore, de) + checkhash && assertHash(de, db; hashfunction) + return de => db +end + +#FIXME Should `addData!`` not return entry=>blob pair? +function addData!( + dfg::AbstractDFG, + label::Symbol, + entry::Blobentry, + blob::Vector{UInt8}; + hashfunction = sha256, + checkhash::Bool = false, +) + Base.depwarn("addData! is obsolete, use saveBlob_Variable! instead.", :addData!) + checkhash && assertHash(entry, blob; hashfunction) + blobId = addBlob!(dfg, entry, blob) |> UUID + newEntry = Blobentry(entry; blobId) #, size=length(blob)) + return addBlobentry!(dfg, label, newEntry) +end + +function addData!( + dfg::AbstractDFG, + blobstore::AbstractBlobstore, + label::Symbol, + entry::Blobentry, + blob::Vector{UInt8}; + hashfunction = sha256, + checkhash::Bool = false, +) + Base.depwarn("addData! is obsolete, use saveBlob_Variable! instead.", :addData!) + checkhash && assertHash(entry, blob; hashfunction) + blobId = addBlob!(blobstore, entry, blob) |> UUID + newEntry = Blobentry(entry; blobId) #, size=length(blob)) + return addBlobentry!(dfg, label, newEntry) +end + +function addData!( + dfg::AbstractDFG, + blobstorekey::Symbol, + vLbl::Symbol, + bLbl::Symbol, + blob::Vector{UInt8}, + timestamp = now(localzone()); + kwargs..., +) + Base.depwarn("addData! is obsolete, use saveBlob_Variable! instead.", :addData!) + return addData!( + dfg, + getBlobstore(dfg, blobstorekey), + vLbl, + bLbl, + blob, + timestamp; + kwargs..., + ) +end + +function addData!( + dfg::AbstractDFG, + blobstore::AbstractBlobstore, + vLbl::Symbol, + bLbl::Symbol, + blob::Vector{UInt8}, + timestamp = now(localzone()); + description = "", + metadata = "", + mimeType::String = "application/octet-stream", + id::Union{UUID, Nothing} = nothing, + blobId::UUID = uuid4(), + hashfunction = sha256, +) + Base.depwarn("addData! is obsolete, use saveBlob_Variable! instead.", :addData!) + # + entry = Blobentry(; + id, + blobId, + label = bLbl, + blobstore = getLabel(blobstore), + hash = string(bytes2hex(hashfunction(blob))), + origin = buildSourceString(dfg, vLbl), + description, + mimeType, + metadata, + timestamp, + ) + + return addData!(dfg, blobstore, vLbl, entry, blob; hashfunction) +end + +function addData!( + dfg::AbstractDFG, + blobstore::AbstractBlobstore{T}, + vLbl::Symbol, + blobLabel::Symbol, + blob::T, + timestamp = now(localzone()); + description = "", + metadata = "", + mimeType::String = "application/octet-stream", + origin = buildSourceString(dfg, vLbl), + # hashfunction = sha256, +) where {T} + Base.depwarn("addData! is obsolete, use saveBlob_Variable! instead.", :addData!) + # + # checkhash && assertHash(entry, blob; hashfunction) + blobId = addBlob!(blobstore, blob) + + entry = Blobentry(; + blobId, + label = blobLabel, + blobstore = getLabel(blobstore), + # hash = string(bytes2hex(hashfunction(blob))), + hash = "", + origin, + description, + mimeType, + metadata, + timestamp, + ) + addBlobentry!(dfg, vLbl, entry) + return entry => blob +end + +function deleteData!(dfg::AbstractDFG, vLbl::Symbol, bLbl::Symbol) + Base.depwarn( + "deleteData! is deprecated, use deleteBlob_Variable! instead.", + :deleteData!, + ) + de = getBlobentry(dfg, vLbl, bLbl) + deleteBlobentry!(dfg, vLbl, bLbl) + deleteBlob!(dfg, de) + return 2 +end + +function deleteData!( + dfg::AbstractDFG, + blobstore::AbstractBlobstore, + vLbl::Symbol, + entry::Blobentry, +) + Base.depwarn( + "deleteData! is deprecated, use deleteBlob_Variable! instead.", + :deleteData!, + ) + return deleteData!(dfg, blobstore, vLbl, entry.label) +end + +function deleteData!( + dfg::AbstractDFG, + blobstore::AbstractBlobstore, + vLbl::Symbol, + bLbl::Symbol, +) + Base.depwarn( + "deleteData! is deprecated, use deleteBlob_Variable! instead.", + :deleteData!, + ) + de = getBlobentry(dfg, vLbl, bLbl) + deleteBlobentry!(dfg, vLbl, bLbl) + deleteBlob!(blobstore, de) + return 2 +end + ## ================================================================================ ## Deprecated in v0.27 ##================================================================================= diff --git a/src/DistributedFactorGraphs.jl b/src/DistributedFactorGraphs.jl index bbd946dc..4f82fc83 100644 --- a/src/DistributedFactorGraphs.jl +++ b/src/DistributedFactorGraphs.jl @@ -538,7 +538,7 @@ include("services/AbstractDFG.jl") include("DataBlobs/services/BlobEntry.jl") include("DataBlobs/services/BlobStores.jl") include("DataBlobs/services/BlobPacking.jl") -include("DataBlobs/services/HelpersDataWrapEntryBlob.jl") +include("DataBlobs/services/BlobWrappers.jl") # To be moved as necessary. include("Common.jl") diff --git a/test/consol_DataEntryBlobTests.jl b/test/consol_DataEntryBlobTests.jl index a88b4a33..8aa8ff6d 100644 --- a/test/consol_DataEntryBlobTests.jl +++ b/test/consol_DataEntryBlobTests.jl @@ -10,8 +10,6 @@ if false include("testBlocks.jl") - # import DistributedFactorGraphs: addData!, updateData!, getData, deleteData! - end # Build a basic graph. @@ -89,34 +87,27 @@ dataset2 = rand(UInt8, 1000) ds = FolderStore("/tmp/dfgFolderStore"; label = :filestore) addBlobstore!(dfg, ds) -ade = addData!(dfg, :filestore, :x1, :random, dataset1) -_ = addData!(dfg, :filestore, :x1, :another_1, dataset1) -_, _ = getData(dfg, :x1, "random") -_, _ = getData(dfg, :x1, r"rando") -gde, gdb = getData(dfg, :x1, :random) +ade = DFG.saveBlob_Variable!(dfg, :x1, dataset1, :random, :filestore) +_ = DFG.saveBlob_Variable!(dfg, :x1, dataset1, :another_1, :filestore) +gde, gdb = DFG.loadBlob_Variable(dfg, :x1, :random) @test hasBlob(dfg, ade) -@show gde - @test incrDataLabelSuffix(dfg, :x1, :random) == :random_1 @test incrDataLabelSuffix(dfg, :x1, :another_1) == :another_2 -# @test incrDataLabelSuffix(dfg,:x1,:another) == :another_2 # TODO exand support for Regex likely search on labels -# @test incrDataLabelSuffix(dfg,:x1,"random") == "random_1" # TODO expand support for label::String +@test incrDataLabelSuffix(dfg, :x1, :another) == :another_2 +@test incrDataLabelSuffix(dfg, :x1, "random") == :random_1 -@test deleteData!(dfg, :x1, :random) == 2 -@test deleteData!(dfg, :x1, :another_1) == 2 +@test DFG.deleteBlob_Variable!(dfg, :x1, :random) == 2 +@test DFG.deleteBlob_Variable!(dfg, :x1, :another_1) == 2 @test ade == gde @test dataset1 == gdb -ade2 = addData!(dfg, :x2, deepcopy(ade), dataset1) +ade2 = DFG.saveBlob_Variable!(dfg, :x2, dataset1, :random, :filestore) # ade3,adb3 = updateBlob!(dfg, :x2, deepcopy(ade), dataset1) -@test ade == ade2# == ade3 -# @test adb == adb2# == adb3 - -deleteData!(dfg, :x2, :random) +DFG.deleteBlob_Variable!(dfg, :x2, :random) #test default folder store dfs = FolderStore("/tmp/defaultfolderstore") @@ -132,14 +123,14 @@ dfs = FolderStore("/tmp/defaultfolderstore") ds = InMemoryBlobstore() addBlobstore!(dfg, ds) -ade = addData!(dfg, :default_inmemory_store, :x1, :random, dataset1) -gde, gdb = getData(dfg, :x1, :random) -@test deleteData!(dfg, :x1, :random) == 2 +ade = DFG.saveBlob_Variable!(dfg, :x1, dataset1, :random, :default_inmemory_store) +gde, gdb = DFG.loadBlob_Variable(dfg, :x1, :random) +@test DFG.deleteBlob_Variable!(dfg, :x1, :random) == 2 @test ade == gde @test dataset1 == gdb -ade2 = addData!(dfg, :x2, deepcopy(ade), dataset1) +ade2 = DFG.saveBlob_Variable!(dfg, :x2, dataset1, :random, :default_inmemory_store) # ade3,adb3 = updateBlob!(dfg, :x2, deepcopy(ade), dataset1) @test hasBlob(dfg, ade2) @@ -147,10 +138,7 @@ ade2 = addData!(dfg, :x2, deepcopy(ade), dataset1) @test length(listBlobs(ds)) == 1 -@test ade == ade2# == ade3 -# @test adb == adb2# == adb3 - -@test deleteData!(dfg, :x2, :random) == 2 +@test DFG.deleteBlob_Variable!(dfg, :x2, :random) == 2 ##============================================================================== ## Unimplemented store @@ -161,7 +149,6 @@ store = TestStore{Int}() @test_throws MethodError getBlob(store, ade) @test_throws MethodError addBlob!(store, ade, 1) -@test_throws MethodError updateBlob!(store, ade, 1) @test_throws MethodError deleteBlob!(store, ade) @test_throws MethodError listBlobs(store) @test_throws MethodError hasBlob(store, uuid4()) diff --git a/test/testBlocks.jl b/test/testBlocks.jl index 7ff8d3d9..e8c0bb0e 100644 --- a/test/testBlocks.jl +++ b/test/testBlocks.jl @@ -13,7 +13,6 @@ using DistributedFactorGraphs: AbstractGraphFactor import Base: convert -# import DistributedFactorGraphs: getData, addData!, updateData!, deleteData! # Base.convert(::Type{<:Tuple}, ::typeof(TranslationGroup(1))) = (:Euclid,) # Base.convert(::Type{<:Tuple}, ::typeof(TranslationGroup(2))) = (:Euclid, :Euclid) @@ -1072,37 +1071,37 @@ function blobsStoresTestBlock!(fg) @test deleteBlob!(fs, blobId) == 1 @test_throws DFG.IdNotFoundError getBlob(fs, blobId) - # Data functions - # Adding - newData = addData!(fg, fs.label, :a, :testing, testData) # convenience wrapper over addBlob! - # Listing + # Blob Wrappers + # on Variable + newentry = DFG.saveBlob_Variable!(fg, :a, testData, :testing, fs.label) + @test_throws DFG.LabelExistsError DFG.saveBlob_Variable!(fg, :a, testData, :testing) @test :testing in listBlobentries(fg, :a) - # Getting - data = getData(fg, fs, :a, :testing) # convenience wrapper over getBlob - @test data[1].hash == newData.hash #[1] - # more dispatches - data = getData(fg, :a, :testing) # convenience wrapper over getBlob - @test data[1].hash == newData.hash #[1] - data = getData(fg, :a, "testing") # convenience wrapper over getBlob - @test data[1].hash == newData.hash #[1] - data = getData(fg, :a, r"testing") # convenience wrapper over getBlob - @test data[1].hash == newData.hash #[1] - be = getfirstBlobentry(fg, :a; labelFilter = contains(r"testing")) - data = getData(fg, :a, be.blobId) # convenience wrapper over getBlob - @test data[1].hash == newData.hash #[1] - # @test data[2] == newData[2] - # Updating - @test updateData!(fg, fs, :a, newData, rand(UInt8, 50)) == 2 - @show bllb = DistributedFactorGraphs.incrDataLabelSuffix(fg, :a, :testing) - newData2 = addData!(fg, fs.label, :a, bllb, testData) # convenience wrapper over addBlob! - nbe = listBlobentries(fg, :a) - filter!(s -> occursin(r"testing", string(s)), nbe) - @test 2 == length(nbe) - # TODO: incrSuffix when adding repeat labels, e.g. :testing_1, :testing_2 - data2 = getData(fg, :a, :testing) - data3 = getData(fg, :a, bllb) - # Deleting - return retData = deleteData!(fg, :a, :testing) # convenience wrapper around deleteBlob! + be, blob = DFG.loadBlob_Variable(fg, :a, :testing) + @test newentry == be + @test blob == testData + @test DFG.deleteBlob_Variable!(fg, :a, :testing) == 2 + @test_throws DFG.LabelNotFoundError DFG.loadBlob_Variable(fg, :a, :testing) + + # on Graph + newentry = DFG.saveBlob_Graph!(fg, testData, :testing, fs.label) + @test_throws DFG.LabelExistsError DFG.saveBlob_Graph!(fg, testData, :testing, fs.label) + @test :testing in listGraphBlobentries(fg) + be, blob = DFG.loadBlob_Graph(fg, :testing) + @test newentry == be + @test blob == testData + @test DFG.deleteBlob_Graph!(fg, :testing) == 2 + @test_throws DFG.LabelNotFoundError DFG.loadBlob_Graph(fg, :testing) + + # on Agent + newentry = DFG.saveBlob_Agent!(fg, testData, :testing, fs.label) + @test_throws DFG.LabelExistsError DFG.saveBlob_Agent!(fg, testData, :testing, fs.label) + @test :testing in listAgentBlobentries(fg) + be, blob = DFG.loadBlob_Agent(fg, :testing) + @test newentry == be + @test blob == testData + @test DFG.deleteBlob_Agent!(fg, :testing) == 2 + @test_throws DFG.LabelNotFoundError DFG.loadBlob_Agent(fg, :testing) + return nothing end function testGroup!(fg, v1, v2, f0, f1) From 79ae3d4934149248e98248b465475ee906a10647 Mon Sep 17 00:00:00 2001 From: Johannes Terblanche Date: Fri, 3 Oct 2025 09:43:55 +0200 Subject: [PATCH 4/4] fix doxs --- docs/src/blob_ref.md | 2 +- test/consol_DataEntryBlobTests.jl | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/src/blob_ref.md b/docs/src/blob_ref.md index 2736b8e9..5175cdcc 100644 --- a/docs/src/blob_ref.md +++ b/docs/src/blob_ref.md @@ -26,7 +26,7 @@ Pages = [ "DataBlobs/services/BlobEntry.jl", "DataBlobs/services/BlobStores.jl", "DataBlobs/services/BlobPacking.jl", - "DataBlobs/services/HelpersDataWrapEntryBlob.jl", + "DataBlobs/services/BlobWrappers.jl", ] ``` diff --git a/test/consol_DataEntryBlobTests.jl b/test/consol_DataEntryBlobTests.jl index 8aa8ff6d..f0e2af43 100644 --- a/test/consol_DataEntryBlobTests.jl +++ b/test/consol_DataEntryBlobTests.jl @@ -9,7 +9,6 @@ if false using SHA include("testBlocks.jl") - end # Build a basic graph.