kivy.resources

2023年03月02日

kivy.resources.resouce_paths

「あらかじめ決められた一連のフォルダーを検索します。 」

っていうのがこのリストである。

初期値は

['.',
'',
'<venv_dir>/lib/python3.10/site-packages/kivy',
'<venv_dir>/lib/python3.10/site-packages/kivy/data/..']

で、ソースは

['.',
dirname(sys.argv[0]),
dirname(kivy.__file__),
join(kivy_data_dir, '..')]

iOS の場合は:

['.',
dirname(sys.argv[0]),
join(dirname(sys.argv[0]), 'YourApp'),
dirname(kivy.__file__),
join(kivy_data_dir, '..')]

である。

ただし、検索時は reversed(resource_paths) するので後ろから前への順番で 行うことに注意。

resource_add_path

resources_paths の「末尾」に追加する。よって追加した path が検索対象として 真っ先に検索される。

既に登録済のものがあった場合は何もしないので、 優先順位を上げたい場合は 一旦 resource_remove_path してから resource_add_path する必要があるだろう。

追加する path は一切加工されない。 abspath() とか一切しない。

resource_remove_path

既にリストの中に path があれば削除する。

引数で指定する path は一切加工しないので、リスト中に存在するパスと全く 同じものを指定しなければならない。

resource_find

filename に resource_paths というリストの中の パスを「逆順」に適用しながら、探します。

つまり resource_paths に /hoge/fuga というパスが あれば join('/hoge/fuga', filename) というファイルを探します。

無かったら作成とかしません。無かったら None を返します。 まずそこが大前提です。

よって filename が None だったら 単に return します。

  1. use_cache が True の場合は 60 秒以内は無条件にキャッシュされた ものが返ってきてしまいます。 一旦 use_chche を False にして使うか、 60 秒を超えて待ちましょう(?)
  2. filename の 先頭が 'atlas://' なら 何もせずに filename をそのまま返します。
  3. abspath(filename) 存在してるパスなら abspath() したものを返します。
  4. abspath(join(<resource_paths のパス>, filename)) が 存在したならそれを返します。
  5. filename.startswith("data:") filename が 'data:' で始まる場合は filenameそのものを返します
  6. use_cache が True で、 返す found_filename があるなら、 found_filename をキャッシュに登録します。
  7. とにかく何かあれば found_filename を返して 無ければ None を返します。