Skip to content

Lightweight base package for provenance data "providers" and "consumers".

License

Notifications You must be signed in to change notification settings

PumasAI/ProvenanceBase.jl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

48 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ProvenanceBase

Lightweight base package for provenance data "providers" and "consumers".

Producers

Packages with types that would like to provide custom provenance data for their types should extend the provenance function for their types.

using ProvenanceBase

struct MyType
    # ...
end

ProvenanceBase.provenance(t::MyType) = (my = "provenance", data = "!")

The provenance method must return a NamedTuple containing the associated provenance data.

Consumers

Packages that wish to consume provenance data from other providers should extend signature and provide a subtype of AbstractSignature to "sign" the consumed provenance data:

using ProvenanceBase, Serialization, SHA

struct CustomSignature <: ProvenanceBase.AbstractSignature
    str::String
end

function ProvenanceBase.signature(::Type{CustomSignature}, object, timestamp, data)
    io = IOBuffer()
    serialize(io, (object, timestamp, data))
    return CustomSignature(bytes2hex(sha2_256(seekstart(io))))
end

Whether the "signing" is a strong cryptographic signature or a simple content hash is up to the package extending signature.

Provenance Data

Time-stamped provenance data associated with a particular object can be generated by calling Provenance(object) or Provenance(object, T) where T is your custom subtype of AbstractSignature.