From e4c34d77e774f71e9651fc0ba73616a0e70bccfc Mon Sep 17 00:00:00 2001 From: derAnfaenger Date: Wed, 16 Aug 2017 18:45:00 +0200 Subject: [PATCH] packaging: Automatically generate zulip_bots MANIFEST.in. Fixes #69. --- tools/generate_zulip_bots_manifest.py | 63 -------------------------- zulip_bots/MANIFEST.in | 64 +++++++++++++-------------- zulip_bots/generate_manifest.py | 58 ++++++++++++++++++++++++ zulip_bots/setup.py | 4 ++ 4 files changed, 94 insertions(+), 95 deletions(-) delete mode 100755 tools/generate_zulip_bots_manifest.py create mode 100644 zulip_bots/generate_manifest.py diff --git a/tools/generate_zulip_bots_manifest.py b/tools/generate_zulip_bots_manifest.py deleted file mode 100755 index f1a8fc4..0000000 --- a/tools/generate_zulip_bots_manifest.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python - -import os -import glob - -def get_zulip_bots_test_fixtures(): - # type: () -> List[str] - current_dir = os.path.abspath(os.path.dirname(__file__)) - bots_dir = os.path.join(current_dir, '..', 'zulip_bots/zulip_bots/bots') - glob_pattern = os.path.join(bots_dir, '*/fixtures/*.json') - fixtures_paths = map( - lambda fp: os.path.join(*fp.split('/')[-5:]), - glob.glob(glob_pattern) - ) - return fixtures_paths - -def get_zulip_bots_logos(): - # type: () -> List[str] - current_dir = os.path.abspath(os.path.dirname(__file__)) - bots_dir = os.path.join(current_dir, '..', 'zulip_bots/zulip_bots/bots') - glob_pattern = os.path.join(bots_dir, '*/logo.*') - logo_paths = map( - lambda fp: os.path.join(*fp.split('/')[-4:]), - glob.glob(glob_pattern) - ) - return logo_paths - -def get_zulip_bots_docs(): - # type: () -> List[str] - current_dir = os.path.abspath(os.path.dirname(__file__)) - bots_dir = os.path.join(current_dir, '..', 'zulip_bots/zulip_bots/bots') - glob_pattern = os.path.join(bots_dir, '*/doc.md') - doc_paths = map( - lambda fp: os.path.join(*fp.split('/')[-4:]), - glob.glob(glob_pattern) - ) - return doc_paths - -def main(): - # type: () -> None - current_dir = os.path.abspath(os.path.dirname(__file__)) - manifest_path = os.path.join(current_dir, '..', 'zulip_bots/MANIFEST.in') - - with open(manifest_path, 'w') as fp: - template = 'include {line}\n' - fixtures = map(lambda line: template.format(line=line), - get_zulip_bots_test_fixtures()) - logos = map(lambda line: template.format(line=line), - get_zulip_bots_logos()) - docs = map(lambda line: template.format(line=line), - get_zulip_bots_docs()) - - fp.writelines(fixtures) - fp.write('\n') - - fp.writelines(logos) - fp.write('\n') - - fp.writelines(docs) - fp.write('\n') - -if __name__ == '__main__': - main() diff --git a/zulip_bots/MANIFEST.in b/zulip_bots/MANIFEST.in index 37059a7..f1de2e0 100644 --- a/zulip_bots/MANIFEST.in +++ b/zulip_bots/MANIFEST.in @@ -1,47 +1,47 @@ -include zulip_bots/bots/giphy/fixtures/test_1.json -include zulip_bots/bots/weather/fixtures/test_city_not_found.json -include zulip_bots/bots/weather/fixtures/test_only_city.json -include zulip_bots/bots/weather/fixtures/test_only_country.json -include zulip_bots/bots/weather/fixtures/test_city_with_country.json -include zulip_bots/bots/github_detail/fixtures/test_issue.json -include zulip_bots/bots/github_detail/fixtures/test_pull.json -include zulip_bots/bots/github_detail/fixtures/test_404.json -include zulip_bots/bots/yoda/fixtures/test_invalid_input.json -include zulip_bots/bots/yoda/fixtures/test_only_numbers.json -include zulip_bots/bots/yoda/fixtures/test_2.json -include zulip_bots/bots/yoda/fixtures/test_1.json +include zulip_bots/bots/define/fixtures/test_incorrect_word.json include zulip_bots/bots/define/fixtures/test_multi_type_word.json include zulip_bots/bots/define/fixtures/test_single_type_word.json -include zulip_bots/bots/define/fixtures/test_incorrect_word.json -include zulip_bots/bots/wikipedia/fixtures/test_multi_word.json +include zulip_bots/bots/giphy/fixtures/test_1.json +include zulip_bots/bots/github_detail/fixtures/test_404.json +include zulip_bots/bots/github_detail/fixtures/test_issue.json +include zulip_bots/bots/github_detail/fixtures/test_pull.json +include zulip_bots/bots/weather/fixtures/test_city_not_found.json +include zulip_bots/bots/weather/fixtures/test_city_with_country.json +include zulip_bots/bots/weather/fixtures/test_only_city.json +include zulip_bots/bots/weather/fixtures/test_only_country.json include zulip_bots/bots/wikipedia/fixtures/test_incorrect_query.json -include zulip_bots/bots/wikipedia/fixtures/test_single_word.json +include zulip_bots/bots/wikipedia/fixtures/test_multi_word.json include zulip_bots/bots/wikipedia/fixtures/test_number_query.json -include zulip_bots/bots/xkcd/fixtures/test_specific_id.json -include zulip_bots/bots/xkcd/fixtures/test_random.json -include zulip_bots/bots/xkcd/fixtures/test_not_existing_id.json +include zulip_bots/bots/wikipedia/fixtures/test_single_word.json include zulip_bots/bots/xkcd/fixtures/test_latest.json +include zulip_bots/bots/xkcd/fixtures/test_not_existing_id.json include zulip_bots/bots/xkcd/fixtures/test_not_existing_id_2.json +include zulip_bots/bots/xkcd/fixtures/test_random.json +include zulip_bots/bots/xkcd/fixtures/test_specific_id.json +include zulip_bots/bots/yoda/fixtures/test_1.json +include zulip_bots/bots/yoda/fixtures/test_2.json +include zulip_bots/bots/yoda/fixtures/test_invalid_input.json +include zulip_bots/bots/yoda/fixtures/test_only_numbers.json include zulip_bots/bots/github_detail/logo.svg include zulip_bots/bots/googlesearch/logo.png -include zulip_bots/bots/converter/doc.md -include zulip_bots/bots/incrementor/doc.md -include zulip_bots/bots/weather/doc.md -include zulip_bots/bots/github_detail/doc.md -include zulip_bots/bots/yoda/doc.md -include zulip_bots/bots/git_hub_comment/doc.md -include zulip_bots/bots/virtual_fs/doc.md -include zulip_bots/bots/howdoi/doc.md -include zulip_bots/bots/youtube/doc.md -include zulip_bots/bots/john/doc.md -include zulip_bots/bots/foursquare/doc.md include zulip_bots/bots/commute/doc.md -include zulip_bots/bots/encrypt/doc.md +include zulip_bots/bots/converter/doc.md include zulip_bots/bots/define/doc.md -include zulip_bots/bots/helloworld/doc.md -include zulip_bots/bots/tictactoe/doc.md +include zulip_bots/bots/encrypt/doc.md +include zulip_bots/bots/foursquare/doc.md +include zulip_bots/bots/github_detail/doc.md +include zulip_bots/bots/git_hub_comment/doc.md include zulip_bots/bots/googlesearch/doc.md +include zulip_bots/bots/helloworld/doc.md +include zulip_bots/bots/howdoi/doc.md +include zulip_bots/bots/incrementor/doc.md +include zulip_bots/bots/john/doc.md +include zulip_bots/bots/tictactoe/doc.md +include zulip_bots/bots/virtual_fs/doc.md +include zulip_bots/bots/weather/doc.md include zulip_bots/bots/xkcd/doc.md +include zulip_bots/bots/yoda/doc.md +include zulip_bots/bots/youtube/doc.md diff --git a/zulip_bots/generate_manifest.py b/zulip_bots/generate_manifest.py new file mode 100644 index 0000000..2116954 --- /dev/null +++ b/zulip_bots/generate_manifest.py @@ -0,0 +1,58 @@ +#!/usr/bin/env python + +import os +import glob + +CURRENT_DIR = os.path.abspath(os.path.dirname(__file__)) +BOTS_DIR = os.path.normpath(os.path.join(CURRENT_DIR, 'zulip_bots', 'bots')) + +def get_test_fixtures(): + # type: () -> List[str] + glob_pattern = os.path.join(BOTS_DIR, '*', 'fixtures', '*.json') + fixtures_paths = map( + lambda fp: os.path.join(*fp.split(os.path.sep)[-5:]).replace(os.path.sep, '/'), + glob.glob(glob_pattern) + ) + return fixtures_paths + +def get_logos(): + # type: () -> List[str] + glob_pattern = os.path.join(BOTS_DIR, '*', 'logo.*') + logo_paths = map( + lambda fp: os.path.join(*fp.split(os.path.sep)[-4:]).replace(os.path.sep, '/'), + glob.glob(glob_pattern) + ) + return logo_paths + +def get_docs(): + # type: () -> List[str] + glob_pattern = os.path.join(BOTS_DIR, '*', 'doc.md') + doc_paths = map( + lambda fp: os.path.join(*fp.split(os.path.sep)[-4:]).replace(os.path.sep, '/'), + glob.glob(glob_pattern) + ) + return doc_paths + +def main(): + # type: () -> None + manifest_path = os.path.join(CURRENT_DIR, 'MANIFEST.in') + with open(manifest_path, 'w') as fp: + template = 'include {line}\n' + fixtures = map(lambda line: template.format(line=line), + get_test_fixtures()) + logos = map(lambda line: template.format(line=line), + get_logos()) + docs = map(lambda line: template.format(line=line), + get_docs()) + + fp.writelines(fixtures) + fp.write('\n') + + fp.writelines(logos) + fp.write('\n') + + fp.writelines(docs) + fp.write('\n') + +if __name__ == '__main__': + main() diff --git a/zulip_bots/setup.py b/zulip_bots/setup.py index 9fd49b9..14996d2 100755 --- a/zulip_bots/setup.py +++ b/zulip_bots/setup.py @@ -5,6 +5,10 @@ from __future__ import print_function import sys +# Before anything, generate MANIFEST.in +import generate_manifest +generate_manifest.main() + # We should be installable with either setuptools or distutils. package_info = dict( name='zulip_bots',