Skip to content

Commit c3769be

Browse files
committed
Rename delete -> delete! and create -> create!
Fix save_project for delete and create
1 parent 2208e4f commit c3769be

File tree

3 files changed

+47
-36
lines changed

3 files changed

+47
-36
lines changed

src/FileTree.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -389,7 +389,7 @@ newfile(tree::FileTree, path::AbstractString; kws...) =
389389
newfile(func::Function, tree::FileTree, path::AbstractString; kws...) =
390390
newfile(func, tree, RelPath(path); kws...)
391391
Base.delete!(tree::FileTree, path::AbstractString) =
392-
delete!(tree, RelPath(path))
392+
Base.delete!(tree, RelPath(path))
393393

394394
function _check_writeable(tree)
395395
if !iswriteable(tree.root)
@@ -457,7 +457,7 @@ function Base.delete!(tree::FileTree, path::RelPath)
457457
_check_writeable(tree)
458458
relpath = joinpath(tree.path, path)
459459
root = tree.root
460-
delete!(root, relpath)
460+
Base.delete!(root, relpath)
461461
end
462462

463463
function Base.open(f::Function, ::Type{FileTree}, tree::FileTree)

src/data_project.jl

+17-11
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ end
250250

251251
function Base.setindex!(proj::DataProject, data::DataSet, name::AbstractString)
252252
if haskey(proj, name) && proj[name] !== data
253-
throw(ArgumentError("Cannot replace existing dataset with name \"$name\". Try DataSets.delete() first."))
253+
throw(ArgumentError("Cannot replace existing dataset with name \"$name\". Try delete!() first."))
254254
end
255255
if isnothing(data_project(data))
256256
setfield!(data, :project, proj)
@@ -260,8 +260,8 @@ function Base.setindex!(proj::DataProject, data::DataSet, name::AbstractString)
260260
proj.datasets[name] = data
261261
end
262262

263-
function delete(proj::DataProject, name::AbstractString)
264-
delete!(proj.datasets, name)
263+
function Base.delete!(proj::DataProject, name::AbstractString)
264+
Base.delete!(proj.datasets, name)
265265
end
266266

267267
#-------------------------------------------------------------------------------
@@ -321,20 +321,20 @@ function Base.show(io::IO, mime::MIME"text/plain", stack::StackedDataProject)
321321
end
322322
end
323323

324-
function create(stack::StackedDataProject, name; kws...)
324+
function create!(stack::StackedDataProject, name; kws...)
325325
for proj in stack.projects
326-
ds = create(proj, name; kws...)
326+
ds = create!(proj, name; kws...)
327327
if !isnothing(ds)
328328
return ds
329329
end
330330
end
331331
return nothing
332332
end
333333

334-
function delete(stack::StackedDataProject, name)
334+
function Base.delete!(stack::StackedDataProject, name)
335335
for proj in stack.projects
336336
if haskey(proj, name)
337-
delete(proj, name)
337+
Base.delete!(proj, name)
338338
return
339339
end
340340
end
@@ -401,15 +401,21 @@ function config!(name::AbstractString; kws...)
401401
config!(PROJECT, name; kws...)
402402
end
403403

404-
function create(name::AbstractString; kws...)
405-
ds = create(PROJECT, name; kws...)
404+
function create!(name::AbstractString; kws...)
405+
ds = create!(PROJECT, name; kws...)
406406
if isnothing(ds)
407407
error("Could not create dataset in any available data project")
408408
end
409409
return ds
410410
end
411411

412-
function delete(name::AbstractString)
413-
delete(PROJECT, name)
412+
# Version of `delete!` for acting on the global data project.
413+
#
414+
# Unfortunately this can't be a method of `Base.delete!`, as that'd be type
415+
# piracy...
416+
function delete!(name::AbstractString)
417+
Base.delete!(PROJECT, name)
414418
end
415419

420+
# DataSets.delete! is just Base.delete! in other cases
421+
delete!(xs...) = Base.delete!(xs...)

src/file_data_projects.jl

+28-23
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,21 @@ function config!(proj::AbstractTomlFileDataProject, dataset::DataSet; kws...)
147147
if data_project(dataset) !== proj
148148
error("dataset must belong to project")
149149
end
150-
# Here we accept the update independently of the project - Data.toml should
151-
# be able to manage any dataset config.
152-
config!(nothing, dataset; kws...)
153-
set_cache(proj, project_toml(get_cache(proj, false)))
150+
_save_project(proj) do inner_proj
151+
# Here we accept the update independently of the project - Data.toml
152+
# should be able to manage any dataset config.
153+
config!(nothing, dataset; kws...)
154+
inner_proj
155+
end
154156
return dataset
155157
end
156158

157-
function create(proj::AbstractTomlFileDataProject, name;
159+
function _save_project(f::Function, proj::AbstractTomlFileDataProject)
160+
p = f(get_cache(proj, false))
161+
set_cache(proj, project_toml(p))
162+
end
163+
164+
function create!(proj::AbstractTomlFileDataProject, name;
158165
# One of the following required
159166
source::Union{Nothing,DataSet}=nothing,
160167
driver::Union{Nothing,AbstractString}=nothing,
@@ -228,28 +235,26 @@ end
228235
project_name(proj::TomlFileDataProject) = proj.path
229236

230237
function Base.setindex!(proj::TomlFileDataProject, data::DataSet, name::AbstractString)
231-
p = get_cache(proj)
232-
p[name] = data
233-
save_project(proj.path, p)
238+
_save_project(proj) do inner_proj
239+
inner_proj[name] = data
240+
inner_proj
241+
end
234242
end
235243

236-
function delete(proj::TomlFileDataProject, name::AbstractString)
237-
# FIXME: Make this safe for concurrent use in-process
238-
# (or better, between processes?)
239-
p = get_cache(proj)
244+
function Base.delete!(proj::TomlFileDataProject, name::AbstractString)
245+
_save_project(proj) do inner_proj
246+
ds = dataset(inner_proj, name)
247+
# Assume all datasets which don't have the "linked" property are linked.
248+
# This prevents us accidentally deleting data.
249+
if get(ds, "linked", true)
250+
@info "Linked dataset is preserved on data storage" name
251+
else
252+
driver = _find_driver(ds)
253+
delete_storage(proj, driver, ds)
254+
end
240255

241-
ds = dataset(p, name)
242-
# Assume all datasets which don't have the "linked" property are linked.
243-
# This prevents us accidentally deleting data.
244-
if get(ds, "linked", true)
245-
@info "Linked dataset is preserved on data storage" name
246-
else
247-
driver = _find_driver(ds)
248-
delete_storage(proj, driver, ds)
256+
Base.delete!(inner_proj, name)
249257
end
250-
251-
delete(p, name)
252-
save_project(proj.path, p)
253258
end
254259

255260
#-------------------------------------------------------------------------------

0 commit comments

Comments
 (0)