gitextract_254957dv/ ├── .gitignore ├── Chapter01/ │ ├── price_log.py │ ├── recipe_cli_step1.py │ ├── recipe_cli_step2.py │ ├── recipe_cli_step3.py │ ├── recipe_format_strings_step1.py │ └── requirements.txt ├── Chapter02/ │ ├── config.ini │ ├── config.yaml │ ├── cron.py │ ├── email_conf.ini │ ├── email_task.py │ ├── prepare_task_step1.py │ ├── prepare_task_step2.py │ ├── prepare_task_step5.py │ ├── prepare_task_yaml.py │ ├── requirements.txt │ ├── task_with_error_handling_step1.py │ └── task_with_error_handling_step4.py ├── Chapter03/ │ ├── crawling_web_step1.py │ ├── speed_up_step1.py │ └── test_site/ │ ├── README │ ├── files/ │ │ ├── 33714fc865e02aeda2dabb9a42a787b2-0.html │ │ ├── 5eabef23f63024c20389c34b94dee593-1.html │ │ ├── archive-september-2018.html │ │ ├── b93bec5d9681df87e6e8d5703ed7cd81-2.html │ │ └── meta.js │ ├── index.html │ ├── rw_common/ │ │ ├── themes/ │ │ │ └── offroad/ │ │ │ ├── assets/ │ │ │ │ └── javascript/ │ │ │ │ ├── background-blur.js │ │ │ │ ├── background-no-blur.js │ │ │ │ ├── html5shiv.js │ │ │ │ ├── min/ │ │ │ │ │ └── background-dont-blur-min.js │ │ │ │ ├── respond.js │ │ │ │ ├── sidebar-hidden.js │ │ │ │ ├── sidebar-left.js │ │ │ │ └── sidebar-right.js │ │ │ ├── consolidated.css │ │ │ └── javascript.js │ │ └── version.txt │ ├── simple_delay_server.py │ └── sitemap.xml ├── Chapter04/ │ ├── documents/ │ │ ├── dir/ │ │ │ ├── file1.txt │ │ │ ├── file2.txt │ │ │ └── subdir/ │ │ │ ├── file3.txt │ │ │ └── file4.txt │ │ ├── document-1.docx │ │ ├── example_iso.txt │ │ ├── example_logs.log │ │ ├── example_output_iso.txt │ │ ├── example_utf8.txt │ │ ├── top_films.csv │ │ └── zen_of_python.txt │ ├── gps_conversion.py │ └── scan.py ├── Chapter05/ │ ├── jinja_template.html │ ├── markdown_template.md │ ├── structuring_pdf.py │ └── watermarking_pdf.py ├── Chapter06/ │ ├── include_macro.py │ ├── libreoffice_script.py │ ├── movies.csv │ ├── movies.ods │ └── movies.xlsx ├── Chapter07/ │ ├── adding_legend_and_annotations.py │ ├── scatter.csv │ └── visualising_maps.py ├── Chapter08/ │ ├── app.py │ ├── email_styling.html │ ├── email_template.md │ ├── telegram_bot.py │ └── telegram_bot_custom_keyboard.py ├── Chapter09/ │ ├── config-channel.ini │ ├── config-opportunity.ini │ ├── create_personalised_coupons.py │ ├── email_styling.html │ ├── email_template.md │ ├── generate_sales_report.py │ ├── parse_sales_log.py │ ├── sale_log.py │ ├── sales/ │ │ ├── 345/ │ │ │ └── logs.txt │ │ ├── 438/ │ │ │ ├── logs_1.txt │ │ │ ├── logs_2.txt │ │ │ ├── logs_3.txt │ │ │ └── logs_4.txt │ │ └── 656/ │ │ └── logs.txt │ ├── search_keywords.py │ ├── search_opportunities.py │ └── send_notifications.py ├── Chapter10/ │ ├── debug_algorithm.py │ ├── debug_logging.py │ ├── debug_skills.py │ └── debug_skills_fixed.py ├── LICENSE ├── README.md └── requirements.txt