@tinkcarlos/skillora 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (234) hide show
  1. package/.claude/skills/.temp-skill-index.md +245 -0
  2. package/.claude/skills/SKILL.md +264 -0
  3. package/.claude/skills/api-scaffolding/SKILL.md +431 -0
  4. package/.claude/skills/api-scaffolding/agents/backend-architect.md +282 -0
  5. package/.claude/skills/api-scaffolding/agents/django-pro.md +144 -0
  6. package/.claude/skills/api-scaffolding/agents/fastapi-pro.md +156 -0
  7. package/.claude/skills/api-scaffolding/agents/graphql-architect.md +146 -0
  8. package/.claude/skills/api-scaffolding/skills/fastapi-templates/SKILL.md +171 -0
  9. package/.claude/skills/api-testing-observability/SKILL.md +583 -0
  10. package/.claude/skills/api-testing-observability/agents/api-documenter.md +146 -0
  11. package/.claude/skills/api-testing-observability/commands/api-mock.md +1320 -0
  12. package/.claude/skills/brainstorming/SKILL.md +283 -0
  13. package/.claude/skills/bug-fixing/SKILL.md +382 -0
  14. package/.claude/skills/bug-fixing/references/backend-guide.md +132 -0
  15. package/.claude/skills/bug-fixing/references/bug-guide.md +354 -0
  16. package/.claude/skills/bug-fixing/references/bug-record-template.md +134 -0
  17. package/.claude/skills/bug-fixing/references/bug-records.md +88 -0
  18. package/.claude/skills/bug-fixing/references/code-review-gate.md +81 -0
  19. package/.claude/skills/bug-fixing/references/common-bugs.md +140 -0
  20. package/.claude/skills/bug-fixing/references/complete-workflow.md +361 -0
  21. package/.claude/skills/bug-fixing/references/config-driven-fixes.md +136 -0
  22. package/.claude/skills/bug-fixing/references/context-isolation-protocol.md +268 -0
  23. package/.claude/skills/bug-fixing/references/cross-surface-regression.md +120 -0
  24. package/.claude/skills/bug-fixing/references/database-investigation.md +129 -0
  25. package/.claude/skills/bug-fixing/references/dependency-and-integrity-protocol.md +369 -0
  26. package/.claude/skills/bug-fixing/references/fix-completeness-checklist.md +239 -0
  27. package/.claude/skills/bug-fixing/references/frontend-guide.md +219 -0
  28. package/.claude/skills/bug-fixing/references/fullstack-joint-guide.md +123 -0
  29. package/.claude/skills/bug-fixing/references/functional-breakage.md +117 -0
  30. package/.claude/skills/bug-fixing/references/ide-lint-errors-guide.md +176 -0
  31. package/.claude/skills/bug-fixing/references/impact-analysis.md +511 -0
  32. package/.claude/skills/bug-fixing/references/investigation-checklist.md +263 -0
  33. package/.claude/skills/bug-fixing/references/knowledge-extraction-guide.md +531 -0
  34. package/.claude/skills/bug-fixing/references/knowledge-workflow.md +212 -0
  35. package/.claude/skills/bug-fixing/references/post-edit-quality-gate.md +30 -0
  36. package/.claude/skills/bug-fixing/references/python-env-and-testing.md +126 -0
  37. package/.claude/skills/bug-fixing/references/rca-guide.md +428 -0
  38. package/.claude/skills/bug-fixing/references/similar-bug-patterns.md +113 -0
  39. package/.claude/skills/bug-fixing/references/skill-delegation-guide.md +350 -0
  40. package/.claude/skills/bug-fixing/references/skill-orchestration.md +155 -0
  41. package/.claude/skills/bug-fixing/references/testing-strategy.md +350 -0
  42. package/.claude/skills/bug-fixing/references/tooling-build-scripts.md +162 -0
  43. package/.claude/skills/bug-fixing/references/user-input-validation.md +77 -0
  44. package/.claude/skills/bug-fixing/references/ux-patterns.md +158 -0
  45. package/.claude/skills/bug-fixing/references/windows-terminal-hygiene.md +106 -0
  46. package/.claude/skills/bug-fixing/references/zero-regression-matrix.md +239 -0
  47. package/.claude/skills/bug-fixing/references/zero-risk-protocol.md +102 -0
  48. package/.claude/skills/bug-fixing/scripts/format_code.py +611 -0
  49. package/.claude/skills/bug-fixing/scripts/generate_report_template.py +74 -0
  50. package/.claude/skills/bug-fixing/scripts/lint_check.py +816 -0
  51. package/.claude/skills/bug-fixing/scripts/requirements.txt +36 -0
  52. package/.claude/skills/cicd-pipeline/SKILL.md +300 -0
  53. package/.claude/skills/code-review/SKILL.md +535 -0
  54. package/.claude/skills/code-review/references/anti-pattern-scan.md +102 -0
  55. package/.claude/skills/code-review/references/automated-analysis.md +456 -0
  56. package/.claude/skills/code-review/references/backend-common-issues.md +589 -0
  57. package/.claude/skills/code-review/references/backend-expert-guide.md +415 -0
  58. package/.claude/skills/code-review/references/backend-review.md +868 -0
  59. package/.claude/skills/code-review/references/batch-processing-strategy.md +198 -0
  60. package/.claude/skills/code-review/references/call-chain-analysis-protocol.md +166 -0
  61. package/.claude/skills/code-review/references/common-patterns.md +321 -0
  62. package/.claude/skills/code-review/references/configuration-review.md +425 -0
  63. package/.claude/skills/code-review/references/control-flow-completeness.md +114 -0
  64. package/.claude/skills/code-review/references/database-review.md +298 -0
  65. package/.claude/skills/code-review/references/dependency-and-integrity-protocol.md +313 -0
  66. package/.claude/skills/code-review/references/external-standards.md +51 -0
  67. package/.claude/skills/code-review/references/feature-review.md +329 -0
  68. package/.claude/skills/code-review/references/file-review-template.md +326 -0
  69. package/.claude/skills/code-review/references/frontend-advanced.md +654 -0
  70. package/.claude/skills/code-review/references/frontend-common-issues.md +482 -0
  71. package/.claude/skills/code-review/references/frontend-expert-guide.md +342 -0
  72. package/.claude/skills/code-review/references/frontend-review.md +783 -0
  73. package/.claude/skills/code-review/references/fullstack-consistency.md +418 -0
  74. package/.claude/skills/code-review/references/fullstack-review.md +477 -0
  75. package/.claude/skills/code-review/references/functional-completeness.md +386 -0
  76. package/.claude/skills/code-review/references/hidden-bugs-detection.md +473 -0
  77. package/.claude/skills/code-review/references/ide-lint-errors-guide.md +173 -0
  78. package/.claude/skills/code-review/references/infrastructure-review.md +453 -0
  79. package/.claude/skills/code-review/references/iteration-review.md +264 -0
  80. package/.claude/skills/code-review/references/job-review.md +335 -0
  81. package/.claude/skills/code-review/references/layered-checklist-protocol.md +157 -0
  82. package/.claude/skills/code-review/references/logic-completeness.md +535 -0
  83. package/.claude/skills/code-review/references/mandatory-checklist.md +288 -0
  84. package/.claude/skills/code-review/references/multi-language-guide.md +800 -0
  85. package/.claude/skills/code-review/references/new-project-review.md +226 -0
  86. package/.claude/skills/code-review/references/non-code-files-review.md +451 -0
  87. package/.claude/skills/code-review/references/overlooked-issues.md +657 -0
  88. package/.claude/skills/code-review/references/platform-specific-review.md +195 -0
  89. package/.claude/skills/code-review/references/precision-analysis-protocol.md +260 -0
  90. package/.claude/skills/code-review/references/python-patterns.md +494 -0
  91. package/.claude/skills/code-review/references/rca-techniques.md +362 -0
  92. package/.claude/skills/code-review/references/report-template.md +430 -0
  93. package/.claude/skills/code-review/references/resource-limits-and-degradation.md +137 -0
  94. package/.claude/skills/code-review/references/review-dimensions.md +311 -0
  95. package/.claude/skills/code-review/references/review-guide.md +202 -0
  96. package/.claude/skills/code-review/references/review-knowledge-workflow.md +257 -0
  97. package/.claude/skills/code-review/references/review-progress-tracker-protocol.md +172 -0
  98. package/.claude/skills/code-review/references/review-record-template.md +195 -0
  99. package/.claude/skills/code-review/references/skill-orchestration.md +143 -0
  100. package/.claude/skills/code-review/references/ui-ux-review.md +470 -0
  101. package/.claude/skills/containerization/SKILL.md +313 -0
  102. package/.claude/skills/database-migrations/agents/database-admin.md +142 -0
  103. package/.claude/skills/database-migrations/agents/database-optimizer.md +144 -0
  104. package/.claude/skills/database-migrations/commands/migration-observability.md +408 -0
  105. package/.claude/skills/database-migrations/commands/sql-migrations.md +492 -0
  106. package/.claude/skills/finishing-a-development-branch/SKILL.md +319 -0
  107. package/.claude/skills/frontend-design/LICENSE.txt +177 -0
  108. package/.claude/skills/frontend-design/SKILL.md +587 -0
  109. package/.claude/skills/frontend-design/references/color-consistency.md +487 -0
  110. package/.claude/skills/frontend-design/references/color-palettes-full.md +657 -0
  111. package/.claude/skills/frontend-design/references/design-system-generator.md +285 -0
  112. package/.claude/skills/frontend-design/references/font-pairings-full.md +705 -0
  113. package/.claude/skills/frontend-design/references/industry-anti-patterns.md +281 -0
  114. package/.claude/skills/frontend-design/references/layout-anti-patterns.md +582 -0
  115. package/.claude/skills/frontend-design/references/motion-patterns.md +659 -0
  116. package/.claude/skills/frontend-design/references/pre-delivery-checklist.md +153 -0
  117. package/.claude/skills/frontend-design/references/responsive-design.md +555 -0
  118. package/.claude/skills/frontend-design/references/style-modification-rules.md +335 -0
  119. package/.claude/skills/frontend-design/references/ui-styles-full.md +383 -0
  120. package/.claude/skills/frontend-design/references/ui-styles-rating.md +191 -0
  121. package/.claude/skills/frontend-design/references/ux-guidelines.md +640 -0
  122. package/.claude/skills/fullstack-developer/SKILL.md +512 -0
  123. package/.claude/skills/fullstack-developer/references/api-contract-guide.md +312 -0
  124. package/.claude/skills/fullstack-developer/references/api-response-patterns.md +223 -0
  125. package/.claude/skills/fullstack-developer/references/async-patterns.md +220 -0
  126. package/.claude/skills/fullstack-developer/references/bug-prevention.md +914 -0
  127. package/.claude/skills/fullstack-developer/references/code-quality-checklist.md +271 -0
  128. package/.claude/skills/fullstack-developer/references/complete-development-workflow.md +278 -0
  129. package/.claude/skills/fullstack-developer/references/context-isolation-protocol.md +256 -0
  130. package/.claude/skills/fullstack-developer/references/database-migration.md +331 -0
  131. package/.claude/skills/fullstack-developer/references/dependency-and-integrity-protocol.md +390 -0
  132. package/.claude/skills/fullstack-developer/references/development-phases.md +333 -0
  133. package/.claude/skills/fullstack-developer/references/expert-guide.md +214 -0
  134. package/.claude/skills/fullstack-developer/references/file-import-patterns.md +114 -0
  135. package/.claude/skills/fullstack-developer/references/graceful-degradation-patterns.md +78 -0
  136. package/.claude/skills/fullstack-developer/references/ide-lint-errors-guide.md +183 -0
  137. package/.claude/skills/fullstack-developer/references/integration-testing.md +301 -0
  138. package/.claude/skills/fullstack-developer/references/mock-api-patterns.md +307 -0
  139. package/.claude/skills/fullstack-developer/references/phase-gate-template.md +249 -0
  140. package/.claude/skills/fullstack-developer/references/post-edit-quality-gate.md +30 -0
  141. package/.claude/skills/fullstack-developer/references/python-engineering.md +79 -0
  142. package/.claude/skills/fullstack-developer/references/skill-orchestration.md +214 -0
  143. package/.claude/skills/fullstack-developer/references/skill-router-table.md +304 -0
  144. package/.claude/skills/fullstack-developer/references/state-sync.md +217 -0
  145. package/.claude/skills/fullstack-developer/references/ui-testing-checklist.md +292 -0
  146. package/.claude/skills/fullstack-developer/scripts/format_code.py +611 -0
  147. package/.claude/skills/fullstack-developer/scripts/lint_check.py +816 -0
  148. package/.claude/skills/fullstack-developer/scripts/requirements.txt +36 -0
  149. package/.claude/skills/performance-optimization/SKILL.md +250 -0
  150. package/.claude/skills/product-requirements/SKILL.md +357 -0
  151. package/.claude/skills/product-requirements/references/acceptance-criteria.md +335 -0
  152. package/.claude/skills/product-requirements/references/answer-first-questioning-protocol.md +299 -0
  153. package/.claude/skills/product-requirements/references/competitive-analysis-guide.md +183 -0
  154. package/.claude/skills/product-requirements/references/document-accuracy-protocol.md +253 -0
  155. package/.claude/skills/product-requirements/references/document-management-protocol.md +278 -0
  156. package/.claude/skills/product-requirements/references/external-standards.md +62 -0
  157. package/.claude/skills/product-requirements/references/feature-spec-template.md +359 -0
  158. package/.claude/skills/product-requirements/references/knowledge-acquisition-protocol.md +251 -0
  159. package/.claude/skills/product-requirements/references/plan-execution-protocol.md +334 -0
  160. package/.claude/skills/product-requirements/references/plan-generation-protocol.md +264 -0
  161. package/.claude/skills/product-requirements/references/prioritization-frameworks.md +80 -0
  162. package/.claude/skills/product-requirements/references/requirement-decomposition-protocol.md +291 -0
  163. package/.claude/skills/product-requirements/references/user-story-examples.md +297 -0
  164. package/.claude/skills/product-requirements/references/workflow-templates.md +266 -0
  165. package/.claude/skills/react-best-practices/SKILL.md +198 -0
  166. package/.claude/skills/react-best-practices/references/advanced-patterns.md +94 -0
  167. package/.claude/skills/react-best-practices/references/bundle-optimization.md +182 -0
  168. package/.claude/skills/react-best-practices/references/client-data-fetching.md +112 -0
  169. package/.claude/skills/react-best-practices/references/complete-guide.md +2249 -0
  170. package/.claude/skills/react-best-practices/references/eliminating-waterfalls.md +169 -0
  171. package/.claude/skills/react-best-practices/references/javascript-performance.md +256 -0
  172. package/.claude/skills/react-best-practices/references/rendering-performance.md +230 -0
  173. package/.claude/skills/react-best-practices/references/rerender-optimization.md +214 -0
  174. package/.claude/skills/react-best-practices/references/server-performance.md +182 -0
  175. package/.claude/skills/security-audit/SKILL.md +226 -0
  176. package/.claude/skills/shared-references/advanced-debugging-techniques.md +186 -0
  177. package/.claude/skills/shared-references/code-quality-checklist.md +218 -0
  178. package/.claude/skills/shared-references/code-review-efficiency-guide.md +125 -0
  179. package/.claude/skills/shared-references/mcp-dependency-compatibility-protocol.md +276 -0
  180. package/.claude/skills/shared-references/skill-call-graph.md +230 -0
  181. package/.claude/skills/shared-references/skill-orchestration-protocol.md +281 -0
  182. package/.claude/skills/shared-references/subagent-dispatch-templates.md +199 -0
  183. package/.claude/skills/skill-expert-skills/LICENSE.txt +204 -0
  184. package/.claude/skills/skill-expert-skills/QUICK_NAVIGATION.md +374 -0
  185. package/.claude/skills/skill-expert-skills/SKILL.md +247 -0
  186. package/.claude/skills/skill-expert-skills/docs/_index.md +91 -0
  187. package/.claude/skills/skill-expert-skills/references/deep-research-methodology.md +389 -0
  188. package/.claude/skills/skill-expert-skills/references/docs-generation-workflow.md +398 -0
  189. package/.claude/skills/skill-expert-skills/references/domain-expertise-protocol.md +343 -0
  190. package/.claude/skills/skill-expert-skills/references/domain-knowledge/_index.md +54 -0
  191. package/.claude/skills/skill-expert-skills/references/domain-knowledge/backend-expertise.md +517 -0
  192. package/.claude/skills/skill-expert-skills/references/domain-knowledge/bug-fixing-expertise.md +363 -0
  193. package/.claude/skills/skill-expert-skills/references/domain-knowledge/code-review-expertise.md +392 -0
  194. package/.claude/skills/skill-expert-skills/references/domain-knowledge/frontend-expertise.md +410 -0
  195. package/.claude/skills/skill-expert-skills/references/domain-knowledge-template.md +503 -0
  196. package/.claude/skills/skill-expert-skills/references/examples.md +782 -0
  197. package/.claude/skills/skill-expert-skills/references/integration-examples.md +655 -0
  198. package/.claude/skills/skill-expert-skills/references/knowledge-validation-checklist.md +246 -0
  199. package/.claude/skills/skill-expert-skills/references/latest-knowledge-acquisition.md +461 -0
  200. package/.claude/skills/skill-expert-skills/references/mcp-tools-guide.md +439 -0
  201. package/.claude/skills/skill-expert-skills/references/official-best-practices.md +616 -0
  202. package/.claude/skills/skill-expert-skills/references/patterns.md +218 -0
  203. package/.claude/skills/skill-expert-skills/references/plugin-skills-guide.md +432 -0
  204. package/.claude/skills/skill-expert-skills/references/requirement-elicitation-protocol.md +290 -0
  205. package/.claude/skills/skill-expert-skills/references/skill-creator-SKILL.md +353 -0
  206. package/.claude/skills/skill-expert-skills/references/skill-templates.md +583 -0
  207. package/.claude/skills/skill-expert-skills/references/skills-knowledge-base.md +561 -0
  208. package/.claude/skills/skill-expert-skills/references/tools-guide.md +379 -0
  209. package/.claude/skills/skill-expert-skills/references/troubleshooting.md +378 -0
  210. package/.claude/skills/skill-expert-skills/references/universality-guide.md +205 -0
  211. package/.claude/skills/skill-expert-skills/references/writing-style-guide.md +466 -0
  212. package/.claude/skills/skill-expert-skills/scripts/__pycache__/quick_validate.cpython-313.pyc +0 -0
  213. package/.claude/skills/skill-expert-skills/scripts/__pycache__/universal_validate.cpython-313.pyc +0 -0
  214. package/.claude/skills/skill-expert-skills/scripts/analyze_trigger.py +425 -0
  215. package/.claude/skills/skill-expert-skills/scripts/diff_with_official.py +188 -0
  216. package/.claude/skills/skill-expert-skills/scripts/init_skill.py +349 -0
  217. package/.claude/skills/skill-expert-skills/scripts/package_skill.py +156 -0
  218. package/.claude/skills/skill-expert-skills/scripts/quick_validate.py +493 -0
  219. package/.claude/skills/skill-expert-skills/scripts/requirements.txt +2 -0
  220. package/.claude/skills/skill-expert-skills/scripts/universal_validate.py +182 -0
  221. package/.claude/skills/skill-expert-skills/scripts/upgrade_skill.py +431 -0
  222. package/.claude/skills/subagent-driven-development/SKILL.md +268 -0
  223. package/.claude/skills/test-driven-development/SKILL.md +246 -0
  224. package/.claude/skills/test-driven-development/references/testing-anti-patterns.md +192 -0
  225. package/.claude/skills/using-git-worktrees/SKILL.md +266 -0
  226. package/.claude/skills/using-skillstack/SKILL.md +127 -0
  227. package/.claude/skills/vercel-deploy/SKILL.md +166 -0
  228. package/.claude/skills/vercel-deploy/scripts/deploy.sh +249 -0
  229. package/.claude/skills/verification-before-completion/SKILL.md +305 -0
  230. package/.claude/skills/writing-plans/SKILL.md +259 -0
  231. package/README.md +69 -0
  232. package/bin/cli.js +468 -0
  233. package/lib/init.js +333 -0
  234. package/package.json +29 -0
@@ -0,0 +1,494 @@
1
+ # Python-Specific Review Patterns
2
+
3
+ Comprehensive Python code review patterns covering Django, Flask, FastAPI, and core Python.
4
+
5
+ ## Core Python Issues
6
+
7
+ ### Type Hints & Mypy
8
+
9
+ ```python
10
+ # 🚫 Missing type hints
11
+ def process(data):
12
+ return data['value'] * 2
13
+
14
+ # ✅ Proper type hints
15
+ from typing import TypedDict
16
+
17
+ class DataInput(TypedDict):
18
+ value: int
19
+
20
+ def process(data: DataInput) -> int:
21
+ return data['value'] * 2
22
+ ```
23
+
24
+ ```python
25
+ # 🚫 Using Any unnecessarily
26
+ from typing import Any
27
+ def handler(event: Any) -> Any: ...
28
+
29
+ # ✅ Proper typing with generics
30
+ from typing import TypeVar, Generic
31
+ T = TypeVar('T')
32
+ def handler(event: Event[T]) -> Response[T]: ...
33
+ ```
34
+
35
+ ### Context Managers
36
+
37
+ ```python
38
+ # 🚫 Resource leak
39
+ file = open('data.txt')
40
+ data = file.read()
41
+ # file never closed if exception
42
+
43
+ # ✅ Proper context manager
44
+ with open('data.txt') as file:
45
+ data = file.read()
46
+ ```
47
+
48
+ ```python
49
+ # 🚫 Manual lock management
50
+ lock.acquire()
51
+ try:
52
+ do_work()
53
+ finally:
54
+ lock.release()
55
+
56
+ # ✅ Context manager
57
+ with lock:
58
+ do_work()
59
+ ```
60
+
61
+ ### Generators & Memory
62
+
63
+ ```python
64
+ # 🚫 Loading all into memory
65
+ def get_users():
66
+ return [process(u) for u in db.query_all_users()] # Millions of users!
67
+
68
+ # ✅ Generator for streaming
69
+ def get_users():
70
+ for user in db.query_users_cursor():
71
+ yield process(user)
72
+ ```
73
+
74
+ ```python
75
+ # 🚫 String concatenation in loop
76
+ result = ""
77
+ for item in large_list:
78
+ result += str(item) # O(n²) memory copies
79
+
80
+ # ✅ Join pattern
81
+ result = "".join(str(item) for item in large_list)
82
+ ```
83
+
84
+ ### Mutable Default Arguments
85
+
86
+ ```python
87
+ # 🚫 CRITICAL BUG: Mutable default
88
+ def add_item(item, items=[]):
89
+ items.append(item)
90
+ return items
91
+ # add_item(1) → [1]
92
+ # add_item(2) → [1, 2] # Shared state!
93
+
94
+ # ✅ None default
95
+ def add_item(item, items=None):
96
+ if items is None:
97
+ items = []
98
+ items.append(item)
99
+ return items
100
+ ```
101
+
102
+ ### Mutable Class Attributes (Critical Hidden Bug)
103
+
104
+ ```python
105
+ # 🚫 CRITICAL BUG: Class attribute shared across ALL instances
106
+ class User:
107
+ permissions = [] # 💀 Shared across all instances!
108
+ tags = {} # 💀 Same problem with dict
109
+
110
+ user1 = User()
111
+ user2 = User()
112
+ user1.permissions.append("admin")
113
+ print(user2.permissions) # ['admin'] - user2 also has admin!
114
+
115
+ # ✅ Initialize in __init__
116
+ class User:
117
+ def __init__(self):
118
+ self.permissions = [] # Each instance gets its own list
119
+ self.tags = {}
120
+
121
+ # ✅ Or use dataclasses with field()
122
+ from dataclasses import dataclass, field
123
+
124
+ @dataclass
125
+ class User:
126
+ permissions: list = field(default_factory=list)
127
+ tags: dict = field(default_factory=dict)
128
+ ```
129
+
130
+ **Detection command**:
131
+ ```bash
132
+ # Search for class-level mutable attributes
133
+ grep -rn "class.*:" --include="*.py" -A 10 | grep -E "^\s+\w+\s*=\s*(\[\]|\{\}|set\(\))"
134
+ ```
135
+
136
+ ### Exception Handling
137
+
138
+ ```python
139
+ # 🚫 Bare except
140
+ try:
141
+ risky_operation()
142
+ except: # Catches KeyboardInterrupt, SystemExit!
143
+ pass
144
+
145
+ # ✅ Specific exceptions
146
+ try:
147
+ risky_operation()
148
+ except (ValueError, TypeError) as e:
149
+ logger.error(f"Operation failed: {e}")
150
+ raise
151
+ ```
152
+
153
+ ```python
154
+ # 🚫 Lost traceback
155
+ try:
156
+ risky_operation()
157
+ except Exception as e:
158
+ raise CustomError(str(e)) # Loses original traceback
159
+
160
+ # ✅ Chain exceptions
161
+ try:
162
+ risky_operation()
163
+ except Exception as e:
164
+ raise CustomError(f"Operation failed") from e
165
+ ```
166
+
167
+ ### Asyncio Issues
168
+
169
+ ```python
170
+ # 🚫 Blocking in async code
171
+ async def fetch_data():
172
+ response = requests.get(url) # Blocks event loop!
173
+ return response.json()
174
+
175
+ # ✅ Use async libraries
176
+ async def fetch_data():
177
+ async with aiohttp.ClientSession() as session:
178
+ async with session.get(url) as response:
179
+ return await response.json()
180
+ ```
181
+
182
+ ```python
183
+ # 🚫 Creating tasks without awaiting
184
+ async def handler():
185
+ asyncio.create_task(background_job()) # Fire and forget, errors lost
186
+
187
+ # ✅ Track tasks
188
+ async def handler():
189
+ task = asyncio.create_task(background_job())
190
+ # Either await or add error handler
191
+ task.add_done_callback(handle_task_result)
192
+ ```
193
+
194
+ ```python
195
+ # 🚫 Sequential async calls
196
+ async def fetch_all():
197
+ user = await get_user()
198
+ posts = await get_posts() # Waits for user first
199
+
200
+ # ✅ Concurrent execution
201
+ async def fetch_all():
202
+ user, posts = await asyncio.gather(
203
+ get_user(),
204
+ get_posts()
205
+ )
206
+ ```
207
+
208
+ ## Django Patterns
209
+
210
+ ### ORM Issues
211
+
212
+ ```python
213
+ # 🚫 N+1 Query
214
+ def get_posts():
215
+ posts = Post.objects.all()
216
+ for post in posts:
217
+ print(post.author.name) # Query per iteration!
218
+
219
+ # ✅ Select related
220
+ def get_posts():
221
+ posts = Post.objects.select_related('author').all()
222
+ for post in posts:
223
+ print(post.author.name) # Single query
224
+ ```
225
+
226
+ ```python
227
+ # 🚫 Prefetch without optimization
228
+ posts = Post.objects.prefetch_related('comments').all()
229
+ for post in posts:
230
+ recent = post.comments.filter(created__gt=cutoff) # New query!
231
+
232
+ # ✅ Prefetch with filter
233
+ from django.db.models import Prefetch
234
+ posts = Post.objects.prefetch_related(
235
+ Prefetch('comments', queryset=Comment.objects.filter(created__gt=cutoff))
236
+ ).all()
237
+ ```
238
+
239
+ ```python
240
+ # 🚫 Counting with len()
241
+ count = len(Post.objects.all()) # Fetches all objects!
242
+
243
+ # ✅ Use count()
244
+ count = Post.objects.count() # COUNT(*) query
245
+ ```
246
+
247
+ ### Security
248
+
249
+ ```python
250
+ # 🚫 Raw SQL injection
251
+ Post.objects.raw(f"SELECT * FROM posts WHERE title = '{user_input}'")
252
+
253
+ # ✅ Parameterized query
254
+ Post.objects.raw("SELECT * FROM posts WHERE title = %s", [user_input])
255
+ ```
256
+
257
+ ```python
258
+ # 🚫 Missing CSRF protection
259
+ @csrf_exempt # Why?
260
+ def update_profile(request): ...
261
+
262
+ # ✅ Only exempt when necessary (e.g., API with token auth)
263
+ @csrf_exempt
264
+ @require_api_key # Alternative protection
265
+ def api_webhook(request): ...
266
+ ```
267
+
268
+ ### Views
269
+
270
+ ```python
271
+ # 🚫 Business logic in views
272
+ def create_order(request):
273
+ order = Order.objects.create(user=request.user)
274
+ order.total = sum(item.price for item in cart)
275
+ # Send email
276
+ # Update inventory
277
+ # 200 lines later...
278
+
279
+ # ✅ Service layer
280
+ def create_order(request):
281
+ order = OrderService.create_from_cart(request.user, cart)
282
+ return JsonResponse(OrderSerializer(order).data)
283
+ ```
284
+
285
+ ## FastAPI Patterns
286
+
287
+ ### Dependency Injection
288
+
289
+ ```python
290
+ # 🚫 Hardcoded dependencies
291
+ @app.get("/users")
292
+ async def get_users():
293
+ db = Database() # Created every request
294
+ return await db.get_users()
295
+
296
+ # ✅ Dependency injection
297
+ async def get_db():
298
+ async with AsyncSession() as session:
299
+ yield session
300
+
301
+ @app.get("/users")
302
+ async def get_users(db: AsyncSession = Depends(get_db)):
303
+ return await db.execute(select(User))
304
+ ```
305
+
306
+ ### Validation
307
+
308
+ ```python
309
+ # 🚫 Manual validation
310
+ @app.post("/users")
311
+ async def create_user(request: Request):
312
+ data = await request.json()
313
+ if 'email' not in data:
314
+ raise HTTPException(400, "Email required")
315
+
316
+ # ✅ Pydantic models
317
+ class UserCreate(BaseModel):
318
+ email: EmailStr
319
+ name: str = Field(min_length=1, max_length=100)
320
+
321
+ @app.post("/users")
322
+ async def create_user(user: UserCreate):
323
+ # Validated automatically
324
+ return await UserService.create(user)
325
+ ```
326
+
327
+ ### Background Tasks
328
+
329
+ ```python
330
+ # 🚫 Long operation in request
331
+ @app.post("/reports")
332
+ async def generate_report():
333
+ report = await heavy_computation() # Client timeout!
334
+ return report
335
+
336
+ # ✅ Background task
337
+ @app.post("/reports")
338
+ async def generate_report(background_tasks: BackgroundTasks):
339
+ task_id = str(uuid4())
340
+ background_tasks.add_task(generate_report_task, task_id)
341
+ return {"task_id": task_id, "status": "processing"}
342
+ ```
343
+
344
+ ## Python Security
345
+
346
+ ### Dangerous Functions
347
+
348
+ ```python
349
+ # 🚫 CRITICAL: eval/exec with user input
350
+ result = eval(user_expression) # Remote code execution!
351
+
352
+ # ✅ Use safe alternatives
353
+ import ast
354
+ result = ast.literal_eval(user_expression) # Only literals
355
+
356
+ # Or use a proper expression parser
357
+ from simpleeval import simple_eval
358
+ result = simple_eval(user_expression)
359
+ ```
360
+
361
+ ```python
362
+ # 🚫 Pickle with untrusted data
363
+ import pickle
364
+ data = pickle.loads(user_data) # Arbitrary code execution!
365
+
366
+ # ✅ Use JSON or safe formats
367
+ import json
368
+ data = json.loads(user_data)
369
+ ```
370
+
371
+ ```python
372
+ # 🚫 Subprocess with shell=True
373
+ import subprocess
374
+ subprocess.run(f"ls {user_path}", shell=True) # Command injection!
375
+
376
+ # ✅ Pass args as list
377
+ subprocess.run(["ls", user_path])
378
+ ```
379
+
380
+ ### Path Traversal
381
+
382
+ ```python
383
+ # 🚫 Path traversal vulnerability
384
+ def read_file(filename):
385
+ with open(f"/data/{filename}") as f: # ../../../etc/passwd
386
+ return f.read()
387
+
388
+ # ✅ Validate and resolve path
389
+ from pathlib import Path
390
+
391
+ def read_file(filename):
392
+ base = Path("/data").resolve()
393
+ file_path = (base / filename).resolve()
394
+ if not file_path.is_relative_to(base):
395
+ raise ValueError("Invalid path")
396
+ return file_path.read_text()
397
+ ```
398
+
399
+ ## Performance Patterns
400
+
401
+ ### List Comprehensions vs Loops
402
+
403
+ ```python
404
+ # 🚫 Slow loop with append
405
+ result = []
406
+ for item in items:
407
+ if item.active:
408
+ result.append(item.value)
409
+
410
+ # ✅ List comprehension (faster)
411
+ result = [item.value for item in items if item.active]
412
+
413
+ # ✅ Generator for large data
414
+ result = (item.value for item in items if item.active)
415
+ ```
416
+
417
+ ### Dictionary Operations
418
+
419
+ ```python
420
+ # 🚫 Checking then getting
421
+ if key in dictionary:
422
+ value = dictionary[key]
423
+ else:
424
+ value = default
425
+
426
+ # ✅ get() method
427
+ value = dictionary.get(key, default)
428
+
429
+ # 🚫 Multiple key lookups
430
+ for key in keys:
431
+ if key in large_dict:
432
+ process(large_dict[key])
433
+
434
+ # ✅ Use items() or single lookup
435
+ for key in keys:
436
+ value = large_dict.get(key)
437
+ if value is not None:
438
+ process(value)
439
+ ```
440
+
441
+ ### Caching
442
+
443
+ ```python
444
+ # 🚫 Repeated expensive computation
445
+ def get_expensive_result(user_id):
446
+ return expensive_computation(user_id) # Called every time
447
+
448
+ # ✅ Use functools.lru_cache
449
+ from functools import lru_cache
450
+
451
+ @lru_cache(maxsize=1000)
452
+ def get_expensive_result(user_id):
453
+ return expensive_computation(user_id)
454
+ ```
455
+
456
+ ## Testing Patterns
457
+
458
+ ### Fixtures
459
+
460
+ ```python
461
+ # 🚫 Test database pollution
462
+ def test_create_user():
463
+ user = User.objects.create(email="test@test.com")
464
+ # Persists after test!
465
+
466
+ # ✅ Use pytest fixtures with cleanup
467
+ @pytest.fixture
468
+ def user(db):
469
+ user = User.objects.create(email="test@test.com")
470
+ yield user
471
+ user.delete()
472
+
473
+ # Or use transactional tests
474
+ @pytest.mark.django_db(transaction=True)
475
+ def test_create_user():
476
+ # Rolled back after test
477
+ ```
478
+
479
+ ### Mocking
480
+
481
+ ```python
482
+ # 🚫 Mocking too deep
483
+ @patch('myapp.services.user.repository.db.session')
484
+ def test_create_user(mock_session):
485
+ # Testing implementation, not behavior
486
+
487
+ # ✅ Mock at boundaries
488
+ @patch('myapp.services.user.external_api.verify_email')
489
+ def test_create_user(mock_verify):
490
+ mock_verify.return_value = True
491
+ result = UserService.create(user_data)
492
+ assert result.verified
493
+ ```
494
+