diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3a6fa11 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Real Python + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..9d2dfea --- /dev/null +++ b/TODO.md @@ -0,0 +1,5 @@ +1. Write unit and integration tests for *all* scripts +1. Add Travis +1. Add support for Python 2.7, 3.5, and 3.6 +1. Organize docs and folder structure better +1. Add all scripts to single CLI for easy running, testing, and searching diff --git a/readme.md b/readme.md index 926be9d..78f4a72 100755 --- a/readme.md +++ b/readme.md @@ -32,3 +32,5 @@ 1. **30_fullcontact.py**: Call the [FullcContact](https://www.fullcontact.com/developer/) API 1. **31_youtube_sentiment.py**: Calculate sentiment score from the comments of a Youtube video 1. **32_stock_scraper.py**: Get stock prices +1. **33_country_code.py**: Convert country code to country name +1. **34_git_all_repos.py**: Clone all repositories from a public user or organization on Github. Usage: `python git_all_repos.py users USER_NAME` or `python git_all_repos.py orgs ORG_NAME` diff --git a/requirements.txt b/requirements.txt index b65ee68..beee86c 100755 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,5 @@ beautifulsoup4==4.4.1 PyYAML==3.11 -requests==2.7.0 +requests==2.12.4 wheel==0.24.0 +lxml==3.8.0 diff --git a/01_remove_all_pyc.md b/scripts/01_remove_all_pyc.md similarity index 100% rename from 01_remove_all_pyc.md rename to scripts/01_remove_all_pyc.md diff --git a/02_find_all_links.py b/scripts/02_find_all_links.py similarity index 100% rename from 02_find_all_links.py rename to scripts/02_find_all_links.py diff --git a/03_simple_twitter_manager.py b/scripts/03_simple_twitter_manager.py similarity index 100% rename from 03_simple_twitter_manager.py rename to scripts/03_simple_twitter_manager.py diff --git a/04_rename_with_slice.py b/scripts/04_rename_with_slice.py similarity index 100% rename from 04_rename_with_slice.py rename to scripts/04_rename_with_slice.py diff --git a/05_load_json_without_dupes.py b/scripts/05_load_json_without_dupes.py similarity index 100% rename from 05_load_json_without_dupes.py rename to scripts/05_load_json_without_dupes.py diff --git a/06_execution_time.py b/scripts/06_execution_time.py similarity index 100% rename from 06_execution_time.py rename to scripts/06_execution_time.py diff --git a/07_benchmark_permissions_loading_django.py b/scripts/07_benchmark_permissions_loading_django.py similarity index 100% rename from 07_benchmark_permissions_loading_django.py rename to scripts/07_benchmark_permissions_loading_django.py diff --git a/08_basic_email_web_crawler.py b/scripts/08_basic_email_web_crawler.py similarity index 100% rename from 08_basic_email_web_crawler.py rename to scripts/08_basic_email_web_crawler.py diff --git a/09_basic_link_web_crawler.py b/scripts/09_basic_link_web_crawler.py similarity index 100% rename from 09_basic_link_web_crawler.py rename to scripts/09_basic_link_web_crawler.py diff --git a/10_find_files_recursively.py b/scripts/10_find_files_recursively.py similarity index 92% rename from 10_find_files_recursively.py rename to scripts/10_find_files_recursively.py index 91cd73c..0c8e1eb 100755 --- a/10_find_files_recursively.py +++ b/scripts/10_find_files_recursively.py @@ -3,7 +3,7 @@ # constants PATH = './' -PATTERN = '*.py' +PATTERN = '*.md' def get_file_names(filepath, pattern): @@ -28,4 +28,4 @@ def output_files(list_of_files): if __name__ == '__main__': - all_files = get_file_names(PATH, PATTERN) + get_file_names(PATH, PATTERN) diff --git a/11_optimize_images_with_wand.py b/scripts/11_optimize_images_with_wand.py similarity index 100% rename from 11_optimize_images_with_wand.py rename to scripts/11_optimize_images_with_wand.py diff --git a/12_csv_split.py b/scripts/12_csv_split.py similarity index 100% rename from 12_csv_split.py rename to scripts/12_csv_split.py diff --git a/12_sample_csv.csv b/scripts/12_sample_csv.csv similarity index 100% rename from 12_sample_csv.csv rename to scripts/12_sample_csv.csv diff --git a/13_random_name_generator.py b/scripts/13_random_name_generator.py similarity index 63% rename from 13_random_name_generator.py rename to scripts/13_random_name_generator.py index 6f0a00a..0acb9bf 100755 --- a/13_random_name_generator.py +++ b/scripts/13_random_name_generator.py @@ -1,4 +1,4 @@ -from random import randint +from random import choice def random_name_generator(first, second, x): @@ -10,13 +10,8 @@ def random_name_generator(first, second, x): - number of random names """ names = [] - for i in range(0, int(x)): - random_first = randint(0, len(first)-1) - random_last = randint(0, len(second)-1) - names.append("{0} {1}".format( - first[random_first], - second[random_last]) - ) + for i in range(x): + names.append("{0} {1}".format(choice(first), choice(second))) return set(names) diff --git a/14_html_to_markdown.sh b/scripts/14_html_to_markdown.sh similarity index 100% rename from 14_html_to_markdown.sh rename to scripts/14_html_to_markdown.sh diff --git a/15_check_my_environment.py b/scripts/15_check_my_environment.py similarity index 100% rename from 15_check_my_environment.py rename to scripts/15_check_my_environment.py diff --git a/16_jinja_quick_load.py b/scripts/16_jinja_quick_load.py similarity index 100% rename from 16_jinja_quick_load.py rename to scripts/16_jinja_quick_load.py diff --git a/17_rewrite_git_history.md b/scripts/17_rewrite_git_history.md similarity index 100% rename from 17_rewrite_git_history.md rename to scripts/17_rewrite_git_history.md diff --git a/18_zipper.py b/scripts/18_zipper.py similarity index 100% rename from 18_zipper.py rename to scripts/18_zipper.py diff --git a/19_tsv-to-csv.py b/scripts/19_tsv-to-csv.py similarity index 100% rename from 19_tsv-to-csv.py rename to scripts/19_tsv-to-csv.py diff --git a/20_restore_file_from_git.py b/scripts/20_restore_file_from_git.py similarity index 100% rename from 20_restore_file_from_git.py rename to scripts/20_restore_file_from_git.py diff --git a/21_twitter_bot.py b/scripts/21_twitter_bot.py similarity index 100% rename from 21_twitter_bot.py rename to scripts/21_twitter_bot.py diff --git a/22_git_tag.py b/scripts/22_git_tag.py similarity index 100% rename from 22_git_tag.py rename to scripts/22_git_tag.py diff --git a/23_flask_session_test.py b/scripts/23_flask_session_test.py similarity index 100% rename from 23_flask_session_test.py rename to scripts/23_flask_session_test.py diff --git a/24_sql2csv.py b/scripts/24_sql2csv.py similarity index 100% rename from 24_sql2csv.py rename to scripts/24_sql2csv.py diff --git a/25_ip2geolocation.py b/scripts/25_ip2geolocation.py similarity index 100% rename from 25_ip2geolocation.py rename to scripts/25_ip2geolocation.py diff --git a/25_sample_csv.csv b/scripts/25_sample_csv.csv similarity index 100% rename from 25_sample_csv.csv rename to scripts/25_sample_csv.csv diff --git a/26_stock_scraper.py b/scripts/26_stock_scraper.py similarity index 100% rename from 26_stock_scraper.py rename to scripts/26_stock_scraper.py diff --git a/27_send_sms.py b/scripts/27_send_sms.py similarity index 100% rename from 27_send_sms.py rename to scripts/27_send_sms.py diff --git a/28_income_tax_calculator.py b/scripts/28_income_tax_calculator.py similarity index 100% rename from 28_income_tax_calculator.py rename to scripts/28_income_tax_calculator.py diff --git a/29_json_test.json b/scripts/29_json_test.json similarity index 100% rename from 29_json_test.json rename to scripts/29_json_test.json diff --git a/29_json_to_yaml.py b/scripts/29_json_to_yaml.py similarity index 100% rename from 29_json_to_yaml.py rename to scripts/29_json_to_yaml.py diff --git a/30_fullcontact.py b/scripts/30_fullcontact.py similarity index 100% rename from 30_fullcontact.py rename to scripts/30_fullcontact.py diff --git a/31_youtube_sentiment.py b/scripts/31_youtube_sentiment.py similarity index 100% rename from 31_youtube_sentiment.py rename to scripts/31_youtube_sentiment.py diff --git a/32_stock_scraper.py b/scripts/32_stock_scraper.py similarity index 100% rename from 32_stock_scraper.py rename to scripts/32_stock_scraper.py diff --git a/33_country_code.py b/scripts/33_country_code.py similarity index 100% rename from 33_country_code.py rename to scripts/33_country_code.py diff --git a/33_country_codes.json b/scripts/33_country_codes.json similarity index 100% rename from 33_country_codes.json rename to scripts/33_country_codes.json diff --git a/33_sample_csv.csv b/scripts/33_sample_csv.csv similarity index 100% rename from 33_sample_csv.csv rename to scripts/33_sample_csv.csv diff --git a/scripts/34_git_all_repos.py b/scripts/34_git_all_repos.py new file mode 100644 index 0000000..b3e2d5b --- /dev/null +++ b/scripts/34_git_all_repos.py @@ -0,0 +1,42 @@ +import sys +import os +import requests + + +def get_total_repos(group, name): + repo_urls = [] + page = 1 + while True: + url = 'https://api.github.com/%7B0%7D/%7B1%7D/repos?per_page=100&page={2}' + r = requests.get(url.format(group, name, page)) + if r.status_code == 200: + rdata = r.json() + for repo in rdata: + repo_urls.append(repo['clone_url']) + if (len(rdata) >= 100): + page += 1 + else: + print('Found {0} repos.'.format(len(repo_urls))) + break + else: + print(r) + return False + return repo_urls + + +def clone_repos(all_repos): + count = 1 + print('Cloning...') + for repo in all_repos: + os.system('Git clone ' + repo) + print('Completed repo #{0} of {1}'.format(count, len(all_repos))) + count += 1 + +if __name__ == '__main__': + if len(sys.argv) > 2: + total = get_total_repos(sys.argv[1], sys.argv[2]) + if total: + clone_repos(total) + + else: + print('Usage: python USERS_OR_ORG GITHUB_USER_OR_ORG-NAME') diff --git a/data.csv b/scripts/data.csv similarity index 100% rename from data.csv rename to scripts/data.csv