Skip to content

Commit

Permalink
input_data listなど:出力されたCSVでsystem_metadataなどネストされたオブジェクトは`system_…
Browse files Browse the repository at this point in the history
…metadata._type`などの列に格納されるようにしました。 (#1221)

* 修正

* update docs
  • Loading branch information
yuji38kwmt authored Jun 12, 2024
1 parent 8f040e4 commit eab8c72
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 17 deletions.
13 changes: 11 additions & 2 deletions annofabcli/input_data/list_all_input_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@
from typing import Any, Dict, List, Optional, Set, Tuple

import annofabapi
import pandas
from annofabapi.dataclass.input import InputData
from annofabapi.models import ProjectMemberRole

import annofabcli
from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login
from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login, print_according_to_format, print_csv
from annofabcli.common.download import DownloadingFile
from annofabcli.common.enums import FormatArgument
from annofabcli.common.facade import AnnofabApiFacade, InputDataQuery, match_input_data_with_query
Expand Down Expand Up @@ -98,7 +99,15 @@ def main(self) -> None:
logger.debug(f"入力データ一覧の件数: {len(input_data_list)}")

if len(input_data_list) > 0:
self.print_according_to_format(input_data_list)
output_format = FormatArgument(args.format)
if output_format == FormatArgument.CSV:
# panadas.DataFramdでなくpandas.json_normalizeを使う理由:
# ネストしたオブジェクトを`system_metadata.input_daration`のような列名でアクセスできるようにするため
df = pandas.json_normalize(input_data_list)
print_csv(df, output=args.output)
else:
print_according_to_format(input_data_list, format=output_format, output=args.output)

else:
logger.info("入力データ一覧の件数が0件のため、出力しません。")

Expand Down
20 changes: 16 additions & 4 deletions annofabcli/input_data/list_input_data.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import argparse
import logging
import urllib.parse
from pathlib import Path
from typing import Any, Dict, List, Optional

import annofabapi
import pandas
from annofabapi.models import InputData, Task

import annofabcli
from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login
from annofabcli.common.cli import ArgumentParser, CommandLine, build_annofabapi_resource_and_login, print_according_to_format, print_csv
from annofabcli.common.enums import FormatArgument
from annofabcli.common.facade import AnnofabApiFacade
from annofabcli.common.visualize import AddProps
Expand Down Expand Up @@ -131,13 +133,15 @@ def get_input_data_list(

return input_data_list

def print_input_data( # noqa: ANN201
def print_input_data(
self,
project_id: str,
output_file: Optional[Path],
output_format: FormatArgument,
input_data_query: Optional[Dict[str, Any]] = None,
input_data_id_list: Optional[List[str]] = None,
add_details: bool = False, # noqa: FBT001, FBT002
):
) -> None:
"""
入力データ一覧を出力する
Expand All @@ -162,7 +166,13 @@ def print_input_data( # noqa: ANN201
logger.warning("入力データ一覧は10,000件で打ち切られている可能性があります。")

if len(input_data_list) > 0:
self.print_according_to_format(input_data_list)
if output_format == FormatArgument.CSV:
# panadas.DataFramdでなくpandas.json_normalizeを使う理由:
# ネストしたオブジェクトを`system_metadata.input_daration`のような列名でアクセスできるようにするため
df = pandas.json_normalize(input_data_list)
print_csv(df, output=output_file)
else:
print_according_to_format(input_data_list, format=output_format, output=output_file)
else:
logger.info("入力データの件数が0件のため、出力しません。")

Expand All @@ -173,6 +183,8 @@ def main(self) -> None:
input_data_query = annofabcli.common.cli.get_json_from_args(args.input_data_query)
self.print_input_data(
args.project_id,
output_file=Path(args.output),
output_format=FormatArgument(args.format),
input_data_id_list=input_data_id_list,
input_data_query=input_data_query,
add_details=args.add_details,
Expand Down
13 changes: 8 additions & 5 deletions annofabcli/input_data/list_input_data_merged_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,16 +70,19 @@ def _filter_input_data(
)
return df

def create_input_data_merged_task( # noqa: ANN201
def create_input_data_merged_task(
self,
input_data_list: List[Dict[str, Any]],
task_list: List[Dict[str, Any]],
is_not_used_by_task: bool = False, # noqa: FBT001, FBT002
is_used_by_multiple_task: bool = False, # noqa: FBT001, FBT002
):
*,
is_not_used_by_task: bool = False,
is_used_by_multiple_task: bool = False,
) -> pandas.DataFrame:
new_task_list = self._to_task_list_based_input_data(task_list)

df_input_data = pandas.DataFrame(input_data_list)
# panadas.DataFramdでなくpandas.json_normalizeを使う理由:
# ネストしたオブジェクトを`system_metadata.input_daration`のような列名でアクセスできるようにするため
df_input_data = pandas.json_normalize(input_data_list)

df_task = pandas.DataFrame(new_task_list)

Expand Down
6 changes: 3 additions & 3 deletions docs/command_reference/input_data/list/out.csv
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
input_data_id,project_id,organization_id,input_data_set_id,input_data_name,input_data_path,url,etag,updated_datetime,original_input_data_path,sign_required,metadata,system_metadata
input1,prj1,org1,12345678-abcd-1234-abcd-1234abcd5678,test-input1,s3://af-production-input/organizations/…,https://annofab.com/organizations/…,…,2021-01-04T21:21:28.169+09:00,s3://af-production-input/organizations/…,False,{},"{'resized_resolution': None, 'original_resolution': {'width': 128, 'height': 128}, '_type': 'Image'}"
input2,prj1,org1,12345678-abcd-1234-abcd-1234abcd5678,test-input2,s3://af-production-input/organizations/…,https://annofab.com/organizations/…,…,2021-01-04T21:21:28.169+09:00,s3://af-production-input/organizations/…,False,{},"{'resized_resolution': None, 'original_resolution': {'width': 128, 'height': 128}, '_type': 'Image'}"
input_data_id,project_id,organization_id,input_data_set_id,input_data_name,input_data_path,url,etag,updated_datetime,original_input_data_path,sign_required,metadata,system_metadata.original_resolution.width,system_metadata.original_resolution.height,system_metadata._type,system_metadata.resized_resolution.width,system_metadata.resized_resolution.height,system_metadata.original_resolution
input1,prj1,org1,12345678-abcd-1234-abcd-1234abcd5678,test-input1,s3://af-production-input/organizations/…,https://annofab.com/organizations/…,…,2021-01-04T21:21:28.169+09:00,s3://af-production-input/organizations/…,False,,1280,720,Image,,,
input2,prj1,org1,12345678-abcd-1234-abcd-1234abcd5678,test-input2,s3://af-production-input/organizations/…,https://annofab.com/organizations/…,…,2021-01-04T21:21:28.169+09:00,s3://af-production-input/organizations/…,False,,975,435,Image,640,285,
6 changes: 3 additions & 3 deletions docs/command_reference/input_data/list_merged_task/out.csv
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
input_data_id,project_id,organization_id,input_data_set_id,input_data_name,input_data_path,url,etag,updated_datetime,original_input_data_path,sign_required,metadata,system_metadata,task_id,task_status,task_phase,worktime_hour
input1,prj1,org1,12345678-abcd-1234-abcd-1234abcd5678,test-input1,s3://af-production-input/organizations/…,https://annofab.com/organizations/…,…,2021-01-04T21:21:28.169+09:00,s3://af-production-input/organizations/…,False,{},"{'resized_resolution': None, 'original_resolution': {'width': 128, 'height': 128}, '_type': 'Image'}",task1,not_started,annotation,0
input2,prj1,org1,12345678-abcd-1234-abcd-1234abcd5678,test-input2,s3://af-production-input/organizations/…,https://annofab.com/organizations/…,…,2021-01-04T21:21:28.169+09:00,s3://af-production-input/organizations/…,False,{},"{'resized_resolution': None, 'original_resolution': {'width': 128, 'height': 128}, '_type': 'Image'}",task2,not_started,annotation,0
input_data_id,project_id,organization_id,input_data_set_id,input_data_name,input_data_path,url,etag,updated_datetime,original_input_data_path,sign_required,metadata,system_metadata.resized_resolution,system_metadata.original_resolution.width,system_metadata.original_resolution.height,system_metadata._type,system_metadata.resized_resolution.width,system_metadata.resized_resolution.height,system_metadata.original_resolution,task_id,task_status,task_phase,worktime_hour
input1,prj1,org1,12345678-abcd-1234-abcd-1234abcd5678,test-input1,s3://af-production-input/organizations/…,https://annofab.com/organizations/…,…,2021-01-04T21:21:28.169+09:00,s3://af-production-input/organizations/…,False,,,1280,720,Image,,,,task1,not_started,annotation,0
input2,prj1,org1,12345678-abcd-1234-abcd-1234abcd5678,test-input2,s3://af-production-input/organizations/…,https://annofab.com/organizations/…,…,2021-01-04T21:21:28.169+09:00,s3://af-production-input/organizations/…,False,,,975,435,Image,640,285,,task2,not_started,annotation,0

0 comments on commit eab8c72

Please sign in to comment.