Skip to content

Commit

Permalink
Add management command for asset metadata extract
Browse files Browse the repository at this point in the history
  • Loading branch information
jjnesbitt committed Mar 20, 2023
1 parent 1631d08 commit 9b4bf72
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 0 deletions.
49 changes: 49 additions & 0 deletions dandiapi/api/management/commands/extract_metadata.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
from pathlib import Path

from dandi.dandiapi import RemoteReadableAsset
from dandi.metadata import nwb2asset
import djclick as click
from tqdm import tqdm

from dandiapi.api.models import Asset, Dandiset


@click.group()
def group():
pass


def extract_asset_metadata(asset: Asset):
readable_asset = RemoteReadableAsset(
asset.s3_url, size=asset.size, mtime=asset.modified, name=Path(asset.path).name
)
asset.metadata = nwb2asset(readable_asset).json_dict()
asset.save()


def extract_dandiset_assets(dandiset: Dandiset):
for asset in tqdm(dandiset.draft_version.assets.all()):
extract_asset_metadata(asset)


@group.command(help='Re-extracts the metadata of this asset')
@click.argument('asset_id')
def asset(asset_id: str):
asset = Asset.objects.get(asset_id=asset_id)
extract_asset_metadata(asset)


@group.command(
help='Re-extracts the metadata of all assets in the draft version of the provided dandiset'
)
@click.argument('dandiset_id')
def dandiset(dandiset_id: str):
dandiset = Dandiset.objects.get(id=int(dandiset_id))
extract_dandiset_assets(dandiset)


@group.command(help='Re-extracts the metadata of all assets in all draft versions')
def all():
for dandiset in Dandiset.objects.all():
print(f'DANDISET: {dandiset.identifier}')
extract_dandiset_assets(dandiset)
2 changes: 2 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@
'ipython',
'tox',
'memray',
'dandi',
'fsspec[http]',
],
'test': [
'factory-boy',
Expand Down

0 comments on commit 9b4bf72

Please sign in to comment.