{"id":50508868,"url":"https://github.com/denisecase/datafun-02-automation","last_synced_at":"2026-06-02T18:31:13.202Z","repository":{"id":332034979,"uuid":"1127925402","full_name":"denisecase/datafun-02-automation","owner":"denisecase","description":"Professional Python project: automation and repetition.","archived":false,"fork":false,"pushed_at":"2026-05-11T04:22:38.000Z","size":219,"stargazers_count":1,"open_issues_count":0,"forks_count":8,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T06:34:21.929Z","etag":null,"topics":["automation","education","mkdocs","python","src-layout","uv"],"latest_commit_sha":null,"homepage":"https://denisecase.github.io/datafun-02-automation/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/denisecase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-04T21:24:28.000Z","updated_at":"2026-05-11T04:56:07.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/denisecase/datafun-02-automation","commit_stats":null,"previous_names":["denisecase/datafun-02-automation"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/denisecase/datafun-02-automation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisecase%2Fdatafun-02-automation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisecase%2Fdatafun-02-automation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisecase%2Fdatafun-02-automation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisecase%2Fdatafun-02-automation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/denisecase","download_url":"https://codeload.github.com/denisecase/datafun-02-automation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/denisecase%2Fdatafun-02-automation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33833277,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","education","mkdocs","python","src-layout","uv"],"created_at":"2026-06-02T18:31:12.334Z","updated_at":"2026-06-02T18:31:13.196Z","avatar_url":"https://github.com/denisecase.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# datafun-02-automation\n\n[![Workflow Guide](https://img.shields.io/badge/Pro--Guide-pro--analytics--02-green)](https://denisecase.github.io/pro-analytics-02/workflow-b-apply-example-project/)\n[![Python 3.14](https://img.shields.io/badge/python-3.14%2B-blue?logo=python)](./pyproject.toml)\n[![MIT](https://img.shields.io/badge/license-see%20LICENSE-yellow.svg)](./LICENSE)\n\n\u003e Professional Python project: automation with loops, branches, and functions.\n\nData analytics requires a variety of skills.\nThis course builds capabilities through working projects.\n\nIn the age of generative AI, durable skills are grounded in real work:\nsetting up a professional environment,\nreading and running code,\nunderstanding the logic,\nand pushing work to a shared repository.\nEach project follows the structure of professional Python projects.\nWe learn by doing.\n\n## This Project\n\nThis project introduces **automation**, using code to repeat a set of logic without doing it manually.\n\nThink of logic you might want to repeat:\n\n- logic for each number in a sequence\n- logic for each item in a list\n- converting a list into another list\n- logic that repeats while a condition is true\n\nYou will run the example module, read the code,\nand apply the same patterns to automate your own logic.\n\n## Working Files\n\nYou'll work with just these areas:\n\n- **docs/** - the project narrative and documentation\n- **src/datafun** - where the magic happens\n- **pyproject.toml** - update authorship \u0026 links\n- **zensical.toml** - update authorship \u0026 links\n\n## Instructions\n\nFollow the\n[step-by-step workflow guide](https://denisecase.github.io/pro-analytics-02/workflow-b-apply-example-project/)\nto complete:\n\n1. Phase 1. **Start \u0026 Run**\n2. Phase 2. **Change Authorship**\n3. Phase 3. **Read \u0026 Understand**\n4. Phase 4. **Modify**\n5. Phase 5. **Apply**\n\n## Challenges\n\nChallenges are expected.\nSometimes instructions may not quite match your operating system.\nWhen issues occur, share screenshots, error messages, and details about what you tried.\nWorking through issues is part of implementing professional projects.\n\n## Success\n\nAfter completing Phase 1. **Start \u0026 Run**, you'll have your own GitHub project,\nrunning on your machine, and running the example will print out:\n\n```shell\n========================\nExecuted successfully!\n========================\n```\n\nA new file `project.log` will appear in the root project folder.\n\n## Command Reference\n\nThe commands below are used in the workflow guide above.\nThey are provided here for convenience.\n\nFollow the guide for the **full instructions**.\n\n\u003cdetails\u003e\n\u003csummary\u003eShow command reference\u003c/summary\u003e\n\n### In a machine terminal (open in your `Repos` folder)\n\nAfter you get a copy of this repo in your own GitHub account,\nopen a machine terminal in your `Repos` folder:\n\n```shell\n# Replace username with YOUR GitHub username.\ngit clone https://github.com/username/datafun-02-automation\n\ncd datafun-02-automation\ncode .\n```\n\n### In a VS Code terminal\n\n```shell\n# reset uv cache only after suspected cache corruption or strange dependency errors\n# uv cache clean\n\nuv self update\nuv python pin 3.14\nuv sync --extra dev --extra docs --upgrade\n\nuvx pre-commit install\n\ngit add -A\nuvx pre-commit run --all-files\n# repeat if changes were made\ngit add -A\nuvx pre-commit run --all-files\n\n# run the module\nuv run python -m datafun.app_case\n\n# do chores\nuv run ruff format .\nuv run ruff check . --fix\nuv run python -m pyright\nuv run python -m pytest\nuv run python -m zensical build\n\n# save progress\ngit add -A\ngit commit -m \"update\"\ngit push -u origin main\n```\n\n\u003c/details\u003e\n\n## Notes\n\n- Use the **UP ARROW** and **DOWN ARROW** in the terminal to scroll through past commands.\n- Use `CTRL+f` to find (and replace) text within a file.\n- You do not need to add to or modify `tests/`. They are provided for example only.\n- Many files are silent helpers. Explore as you like, but nothing is required.\n- You do NOT not to understand everything; understanding builds naturally over time.\n\n## Troubleshooting \u003e\u003e\u003e\n\nIf you see something like this in your terminal: `\u003e\u003e\u003e` or `...`\nYou accidentally started Python interactive mode.\nIt happens.\nPress `Ctrl+c` (both keys together) or `Ctrl+Z` then `Enter` on Windows.\n\n## Example Output\n\n```shell\n| P02 | ========================\n| P02 | START main()\n| P02 | ========================\n| P02 | ========================\n| P02 | FUNCTION 1: for loop over a numeric range\n| P02 | ========================\n| P02 | First quarter: 1\n| P02 | Last quarter:  4\n| P02 | Wrote file: case_quarter_1.txt\n| P02 | Wrote file: case_quarter_2.txt\n| P02 | Wrote file: case_quarter_3.txt\n| P02 | Wrote file: case_quarter_4.txt\n| P02 | ========================\n| P02 | FUNCTION 2: for loop over a list\n| P02 | ========================\n| P02 | Pet list: ['dog', 'cat', 'fish']\n| P02 | Wrote file: case_dog.txt\n| P02 | Wrote file: case_cat.txt\n| P02 | Wrote file: case_fish.txt\n| P02 | ========================\n| P02 | FUNCTION 3: list comprehension\n| P02 | ========================\n| P02 | Original list: ['dog', 'cat', 'fish']\n| P02 | Transformed list: ['favorite_dog', 'favorite_cat', 'favorite_fish']\n| P02 | Wrote file: case_favorite_dog.txt\n| P02 | Wrote file: case_favorite_cat.txt\n| P02 | Wrote file: case_favorite_fish.txt\n| P02 | ========================\n| P02 | FUNCTION 4: while loop with counter\n| P02 | ========================\n| P02 | Files to create: 3\n| P02 | Seconds between files: 1\n| P02 | Wrote file: case_01.txt\n| P02 | Waiting 1 second(s)...\n| P02 | Wrote file: case_02.txt\n| P02 | Waiting 1 second(s)...\n| P02 | Wrote file: case_03.txt\n| P02 | Waiting 1 second(s)...\n| P02 | ========================\n| P02 | Executed successfully!\n| P02 | ========================\n```\n\n![VS Code When Running](./docs/images/vscode_when_running.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenisecase%2Fdatafun-02-automation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdenisecase%2Fdatafun-02-automation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdenisecase%2Fdatafun-02-automation/lists"}