From a28fcbbaa97de057fe3b6ee8fbca6033e0c062f6 Mon Sep 17 00:00:00 2001 From: Eeshan Garg Date: Tue, 15 Aug 2017 23:30:19 -0230 Subject: [PATCH] zulip_bots: Add script to generate zulip_bots/MANIFEST.in. As a package maintainer, I have to exclude the test fixtures in MANIFEST.in so that they aren't shipped with the package release. But for the repo, we need to include fixtures, logos and docs so that Travis can run the tests after running `pip install ./zulip_bots`. Also, since we are installing zulip_bots off of this repo in our main repo, docs and logos should be included so that they can be rendered alongside our webhooks/integrations documentation, so we need to include them in MANIFEST.in as well. To automate this process, I just wrote this handy little script that future bot contributors can run instead of having to manually specify what to include in MANIFEST.in in the repo. --- tools/generate_zulip_bots_manifest.py | 63 ++++++++++++++++++++++++++ zulip_bots/MANIFEST.in | 65 +++++++++++++++++---------- 2 files changed, 104 insertions(+), 24 deletions(-) create mode 100755 tools/generate_zulip_bots_manifest.py diff --git a/tools/generate_zulip_bots_manifest.py b/tools/generate_zulip_bots_manifest.py new file mode 100755 index 0000000..f1a8fc4 --- /dev/null +++ b/tools/generate_zulip_bots_manifest.py @@ -0,0 +1,63 @@ +#!/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 6948bb0..37059a7 100644 --- a/zulip_bots/MANIFEST.in +++ b/zulip_bots/MANIFEST.in @@ -1,30 +1,47 @@ 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/define/fixtures/test_single_type_word.json -include zulip_bots/bots/define/fixtures/test_multi_type_word.json -include zulip_bots/bots/define/fixtures/test_incorrect_word.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_incorrect_query.json -include zulip_bots/bots/wikipedia/fixtures/test_number_query.json - -include zulip_bots/bots/xkcd/fixtures/test_latest.json -include zulip_bots/bots/xkcd/fixtures/test_random.json -include zulip_bots/bots/xkcd/fixtures/test_specific_id.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/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/weather/fixtures/test_city_not_found.json - -include zulip_bots/bots/yoda/fixtures/test_1.json -include zulip_bots/bots/yoda/fixtures/test_2.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_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/wikipedia/fixtures/test_incorrect_query.json +include zulip_bots/bots/wikipedia/fixtures/test_single_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/xkcd/fixtures/test_latest.json +include zulip_bots/bots/xkcd/fixtures/test_not_existing_id_2.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/define/doc.md +include zulip_bots/bots/helloworld/doc.md +include zulip_bots/bots/tictactoe/doc.md +include zulip_bots/bots/googlesearch/doc.md +include zulip_bots/bots/xkcd/doc.md +