Skip to content

Commit

Permalink
Merge pull request #487 from dandi/dev-provisioning
Browse files Browse the repository at this point in the history
Add create_dev_dandiset script
  • Loading branch information
dchiquito committed Aug 20, 2021
2 parents 798a658 + 99c7c6e commit dece01c
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 0 deletions.
69 changes: 69 additions & 0 deletions dandiapi/api/management/commands/create_dev_dandiset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
from uuid import uuid4

from django.conf import settings
from django.contrib.auth.models import User
from django.core.files.uploadedfile import SimpleUploadedFile
import djclick as click

from dandiapi.api.models import Asset, AssetBlob, Dandiset, Version
from dandiapi.api.tasks import calculate_sha256, validate_asset_metadata, validate_version_metadata


@click.command()
@click.option('--name', default='Development Dandiset')
@click.option('--owner', required=True, help='The email address of the owner')
def create_dev_dandiset(name: str, owner: str):
owner = User.objects.get(email=owner)

# Create a new dandiset
dandiset = Dandiset()
dandiset.save()
dandiset.add_owner(owner)

# Create the draft version
version_metadata = {
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'description': 'An informative description',
'license': ['spdx:CC0-1.0'],
'contributor': [
{
'name': f'{owner.last_name}, {owner.first_name}',
'email': owner.email,
'roleName': ['dcite:ContactPerson'],
'schemaKey': 'Person',
'affiliation': [],
'includeInCitation': True,
},
],
}
draft_version = Version(
dandiset=dandiset,
name=name,
metadata=version_metadata,
version='draft',
)
draft_version.save()

uploaded_file = SimpleUploadedFile(name='foo/bar.txt', content=b'A' * 20)
etag = '76d36e98f312e98ff908c8c82c8dd623-0'
try:
asset_blob = AssetBlob.objects.get(etag=etag)
except AssetBlob.DoesNotExist:
asset_blob = AssetBlob(
blob_id=uuid4(),
blob=uploaded_file,
etag=etag,
size=20,
)
asset_blob.save()
asset_metadata = {
'schemaVersion': settings.DANDI_SCHEMA_VERSION,
'encodingFormat': 'text/plain',
}
asset = Asset(blob=asset_blob, metadata=asset_metadata, path='foo/bar.txt')
asset.save()
draft_version.assets.add(asset)

calculate_sha256(blob_id=asset_blob.blob_id)
validate_asset_metadata(asset_id=asset.id)
validate_version_metadata(version_id=draft_version.id)
27 changes: 27 additions & 0 deletions dandiapi/api/tests/test_create_dev_dandiset.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import pytest

from dandiapi.api.management.commands.create_dev_dandiset import create_dev_dandiset
from dandiapi.api.models import Asset, AssetBlob, Dandiset, Version


@pytest.mark.django_db
def test_create_dev_dandiset(user):
create_dev_dandiset('--name', 'My Test Dandiset', '--owner', user.email)

assert Dandiset.objects.count() == 1
dandiset = Dandiset.objects.get()
assert user in dandiset.owners

assert Version.objects.count() == 1
version = Version.objects.get()
assert version.dandiset == dandiset
assert version.version == 'draft'
assert version.status == Version.Status.VALID

assert Asset.objects.count() == 1
asset = Asset.objects.get()
assert asset in version.assets.all()

assert AssetBlob.objects.count() == 1
asset_blob = AssetBlob.objects.get()
assert AssetBlob.blob.field.storage.exists(asset_blob.blob.name)

0 comments on commit dece01c

Please sign in to comment.