# PyConJP20 Sprint成果 オープンストリートマップジャパン 三浦広志 <!-- Put the link to this slide here so people can follow --> slide: https://hackmd.io/@miurahr/B1bgWXT-v --- ## テーマの状況 リーダー1名でスプリント実施でした --- ### 選択したテーマ - Py7zrは、圧縮、伸張、暗号化、復号化ができていますが、圧縮されたアーカイブファイルへの**追記モードは未実装**でした。これに挑戦しました。 --- ### 課題と解決の方向(1/2) - 従来圧縮するときは、write()では、メタ情報と、元ファイルを記録して、close()時に圧縮する方式でした。 - **write()時に随時圧縮する**ように変更しました。 --- ### 課題と解決の方向(2/2) - 解凍のようにヘッダーを読み込んだあとに、ファイル情報と圧縮データを追記します。 - **「解凍と同様にヘッダーを読み込んだ」** 状態が、**「write()を実施している途中」** と同じ状態になるようにするのがポイントです。 --- ### py7zrの内部構造を確認する --- #### py7zrのパッケージ構造 ```graphviz digraph "packages" { charset="utf-8" rankdir=BT "0" [label="py7zr", shape="box"]; "1" [label="py7zr.__main__", shape="box"]; "2" [label="py7zr.archiveinfo", shape="box"]; "3" [label="py7zr.callbacks", shape="box"]; "4" [label="py7zr.cli", shape="box"]; "5" [label="py7zr.compressor", shape="box"]; "6" [label="py7zr.exceptions", shape="box"]; "7" [label="py7zr.helpers", shape="box"]; "8" [label="py7zr.properties", shape="box"]; "9" [label="py7zr.py7zr", shape="box"]; "10" [label="py7zr.win32compat", shape="box"]; "0" -> "6" [arrowhead="open", arrowtail="none"]; "0" -> "8" [arrowhead="open", arrowtail="none"]; "0" -> "9" [arrowhead="open", arrowtail="none"]; "2" -> "5" [arrowhead="open", arrowtail="none"]; "2" -> "6" [arrowhead="open", arrowtail="none"]; "2" -> "7" [arrowhead="open", arrowtail="none"]; "2" -> "8" [arrowhead="open", arrowtail="none"]; "4" -> "3" [arrowhead="open", arrowtail="none"]; "4" -> "5" [arrowhead="open", arrowtail="none"]; "4" -> "7" [arrowhead="open", arrowtail="none"]; "4" -> "8" [arrowhead="open", arrowtail="none"]; "4" -> "9" [arrowhead="open", arrowtail="none"]; "5" -> "6" [arrowhead="open", arrowtail="none"]; "5" -> "7" [arrowhead="open", arrowtail="none"]; "5" -> "8" [arrowhead="open", arrowtail="none"]; "9" -> "2" [arrowhead="open", arrowtail="none"]; "9" -> "3" [arrowhead="open", arrowtail="none"]; "9" -> "5" [arrowhead="open", arrowtail="none"]; "9" -> "6" [arrowhead="open", arrowtail="none"]; "9" -> "7" [arrowhead="open", arrowtail="none"]; "9" -> "8" [arrowhead="open", arrowtail="none"]; } ``` --- #### 7zip Headerを表現するクラスたち [![class diagram(headers)](https://py7zr.readthedocs.io/en/latest/_images/graphviz-4e317b362c07c931b481ecb1f69049904f51f5c2.png)](https://py7zr.readthedocs.io/en/latest/_images/graphviz-4e317b362c07c931b481ecb1f69049904f51f5c2.png) --- ### リファクタンリング - :bulb: PyCharmで、リファクタリングをおこなった。 - 処理の塊を分解、移動させて、圧縮処理のタイミングを変更。 - 途中状態ごとにCIテストをおこなって安心して変更を大胆に適用。 --- ### CI tests 250case - win/mac/linux - py3.6,3.7.3.8,pypy3 ![](https://i.imgur.com/3WIuiLB.png) --- ### coverage ![](https://i.imgur.com/3ESxbfD.png) --- ### 遭遇した問題 - いままで、圧縮と解凍の処理フローがまじることがなかった。 - 同じ変数で、圧縮と解凍のメソッドで、単位や型がちがう事象に。 - intとbytes、UNIX時間(int)とPython datetime(float)など --- ### 成果 - :tada: 圧縮について、write()中におこなわれるようになった。 - :tada: 追記(mode='a')について、一通りの処理を実装完了。 - CI test デグレード発生 --- ### 今後 - デグレード解消 - :muscle: テストケースを追加して、実装の品質向上をはかる --- ### まとめ - 新バージョン v0.10.0a3 (alpha) がリリース:tada: されました。 - 今後、追加機能を搭載して v0.10.0 をリリース :tada: 予定です。 --- ### その他 期間中のできごと - OpenStreetMapのカンファレンス(11月7日開催)準備も並行してました。 - 募集を開始しました。 - 翻訳ツール(OmegaT/Java)修正も並行して結構たいへんでした。 --- ### Thank you! :sheep: OpenStreetMap イベント 11/7 https://stateofthemap.jp/2020/ - GitHub [miurahr](https://github.com/miurahr/py7zr) ---
{"metaMigratedAt":"2023-06-15T11:32:10.325Z","metaMigratedFrom":"YAML","title":"PyConJP 2020 sprint result","breaks":true,"description":"View the slide with \"Slide Mode\".","contributors":"[{\"id\":\"a39fef58-9b07-42cd-973a-4a7e5bdc85cf\",\"add\":5667,\"del\":2148}]"}
    408 views