Closed hrsano645 closed 3 years ago
差分では確認しにくかったので、動作フローを作成して関数名と動作の整合性を中心に確認してみました。 下記に作成した動作フロー図を掲載します。
@aktnk 確認ありがとうございます。(フロー図すごいです。これって何か自動で生成させていますか?) もう少し、処理の中身を手入れしたほうがいいところもあるのですが(例えばgen_関数でNoneを返すのに考慮してない 、関数でカプセル化した後での変数名の整理)、ひとまず目的は達成できたと思ってます。レビューの内容を修正したうえでmergeしようと思います。
修正については以下を行います。
gen_datelist
関数にテストを追加する
change_datetimestr_zeropadding
関数の名前を suppress_zero
に変更
(フロー図すごいです。これって何か自動で生成させていますか?)
よく言えば、途中から自動生成です。 実装コードを読んで、PlantUML用のコードに自分が書いて、フロー図はPlantUMLに生成させています。 より詳しく説明すると、 1)PlantUMLサーバはDockerで立ち上げて、 2)VSCode+PlantUML Pluginを使いPlantUMLサーバと連携させ、 3)自分が書いたUMLのアクティビティ図のコードをプレビューしたり、PNGファイルを生成させています。
@aktnk の指摘を反映しました。変更のコミットとコメントを残しておきます。
(日付のバリデーション処理と日付の生成を分ける -> ) バリデーションするタイミングをオープンデータ生成時にして、問題があったときにエラーとして落とすようにする
gen_datelist
関数にテストを追加する
change_datetimestr_zeropadding
関数の名前をsuppress_zero
に変更
レビューコメントにも返信で変更内容を追加しました。
バリデーションがどのように機能するか説明します。
テストデータを用意して実行した様子です。二つのファイルを一部の行だけ残して、日付をエラーが起こるようにわざと変更しています。
test_number.csv
実施_年月日,全国地方公共団体コード,都道府県名,"検査実施_人数
(保健所)","検査実施_人数
(医療機関等)",備考
~2020/4/26,220001,静岡県,"2,637",828,累計用
2020/4/27,220001,静岡県,39,63,
/2020/4/28,220001,静岡県,83,73,
2020/4/29,220001,静岡県,63,38,
~2020/4/30,220001,静岡県,38,32,
220/5/1,220001,静岡県,97,57,
call_center.csv
受付_年月日,全国地方公共団体コード,都道府県名,市区町村名,相談件数
2020/2/10,220001,静岡県,,0
/2020/2/11,220001,静岡県,,0
2020/2/12,220001,静岡県,,47
2020/2/13,220001,静岡県,,49
~2020/2/14,220001,静岡県,,74
2020/2/15,220001,静岡県,,61
2020/2/16,220001,静岡県,,28
220/2/17,220001,静岡県,,164
2020/2/18,220001,静岡県,,199
定義された日付のフォーマットではない場合は以下のように表示されます。
patients.pyの実行結果
Traceback (most recent call last):
File "patients.py", line 621, in <module>
main()
File "patients.py", line 553, in main
raise DateValidateError(error_msg)
__main__.DateValidateError: バリデーションの結果、処理出来ない行があります。処理を終了します。:
call_center: /2020/2/11
call_center: ~2020/2/14
call_center: 220/2/17
inspections_summary: /2020/4/28
inspections_summary: ~2020/4/30
inspections_summary: 220/5/1
@aktnk ありがとうございます!mergeしますね。
(参考) patients.pyですが、各csvに対して似たような処理が繰り返される構造なので、 クラス化することで、凝集度を高めかつ、結合度を下げることができるかもしれないと思いました。
クラス化も考えてはいましたが、まずは現状の1ファイルのみでコードの状況整理をしたかったので、いきなりやらないでおきました。
このスクリプトもスクリプトといえる行数でもないので、モジュール分離をして各市町対応しやすい仕組みにできたらいいと思います。
👏 解決する issue / Resolved Issues
📝 関連する issue / Related Issues
43
42
⛏ 変更内容 / Details of Changes
📸 スクリーンショット / Screenshots