coding-standards

Python Coding Standards

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "coding-standards" with this command: npx skills add sylla-bv/sylla-skills/sylla-bv-sylla-skills-coding-standards

Python Coding Standards

Sylla-specific standards for the Python data-engine codebase. All rules are settled and enforced in code review. Full rationale and code examples for every rule are in references/standards.md .

How to Apply This Skill

  • For quick lookups (rule name, convention), use the Quick Reference tables below.

  • For rationale, code examples, or edge cases, consult references/standards.md .

  • When reviewing code, run through the Code Smell Checklist at the bottom of this file.

All work must satisfy readability, KISS, DRY, YAGNI, and security — specifically: no eval /exec /pickle , T | None over Optional[T] , explicit return types on public functions, and @property for computed attributes.

Quick Reference

Type Annotations

Rule Standard

Optional types T | None — never Optional[T]

Return types on public functions Required

Return types on internal helpers Inferred is acceptable

Computed attributes @property — never get_x() methods

Generics list[str] , dict[str, int] — never List , Dict from typing

Datetime datetime.now(timezone.utc) — never datetime.utcnow()

Imports & Modules

Rule Standard

Import location Top of module always

Function-level imports Only to break circular dependencies

Import order stdlib > third-party > local (isort enforced)

Unused imports Remove — never comment out

Functions & Classes

Rule Standard

Docstrings Google-style on public APIs

Max function length ~50 lines — split if longer

Nesting Max 3 levels — use early returns

Abstract base classes ABC

  • @abstractmethod for shared contracts

Protocols Use for structural typing when ABC is too rigid

Error Handling

Rule Standard

Bare except

Banned

Broad except Exception

Only at top-level boundaries with logging

Silent except: pass

Banned

Logging library structlog with bound loggers

Error messages Include context (IDs, operation name)

Custom exceptions Inherit from domain-specific base, not bare Exception

Async Patterns

Rule Standard

Parallel async calls asyncio.gather(*tasks)

HTTP client httpx.AsyncClient with explicit timeouts

Sync calls in async Banned — use asyncio.to_thread() if unavoidable

Client lifecycle Context managers (async with ) for connection pools

Pydantic Models

Rule Standard

Extra fields model_config = ConfigDict(extra="forbid")

Field metadata Field(description="...") on every field

Computed attributes @property — never get_x()

Enums in models Use StrEnum for string enums

Naming

Thing Convention

Files & folders snake_case

Variables & functions snake_case

Classes PascalCase

Constants SCREAMING_SNAKE_CASE

Private attributes Single leading underscore _name

Type variables PascalCase (T , ResponseT )

Boolean variables is_ , has_ , can_ prefix

Tooling

Tool Config

Black line-length 88, target py311

isort profile "black", line_length 88

MyPy strict — disallow_untyped_defs = true , warn_return_any = true

Pytest pythonpath = ["."] , testpaths = ["tests"]

Flake8 Ignore E203, W503 (Black-incompatible rules)

Code Smell Checklist

Before opening a PR, check:

  • Optional[T] — change to T | None

  • datetime.utcnow() — change to datetime.now(timezone.utc)

  • get_x() method for a simple computed attribute — change to @property

  • Import inside a function body (no circular dependency reason) — move to top of module

  • Function >~50 lines — split it

  • 3 levels of nesting — use early returns

  • Bare except or except: pass — catch specific exceptions, log the error

  • except Exception in non-boundary code — narrow the exception type

  • Magic number/string — extract to SCREAMING_SNAKE_CASE constant

  • typing.List , typing.Dict , typing.Tuple — use built-in list , dict , tuple

  • Missing return type on public function — add explicit annotation

  • eval() , exec() , pickle.loads() — find a safe alternative

  • HTTP request without timeout — add explicit timeout

  • datetime.utcnow() — use datetime.now(timezone.utc)

  • Sync blocking call inside async function — use asyncio.to_thread()

  • N+1 query pattern (DB/API call inside loop) — batch or use asyncio.gather

  • Pydantic model missing ConfigDict(extra="forbid") — add it

  • get_x() method that is a simple property — convert to @property

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

ticket-creator

No summary provided by upstream source.

Repository SourceNeeds Review
General

pr-sweep

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

coding-standards

No summary provided by upstream source.

Repository SourceNeeds Review