Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

Add `to_upper` and `to_lower` to `msgspec.Meta` for `str` objects

Aperta
#858 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
35/100
Tipo di issue
Funzionalità
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
python

Direzione di ricerca

Inizia con i vincoli esistenti di msgspec.Meta e il percorso json.Decoder descritto nell’issue, quindi esamina l’issue #782 per il relativo contesto di progettazione. Implementa il supporto per to_upper e to_lower nei metadati di str, mantenendo i vincoli di lunghezza e pattern richiesti, e verifica che l’esempio decodifichi prefix come "msg-spec".

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

Description

I have a struct that wants a str input that has whitespace stripped, is in all lowercase, is below a max length, is above a minimum length, and matches a regex pattern. This repository already has an issue for stripping whitespace through msgspec.Meta, that being #782. This is possible through __post_init__, but I don't see why this couldn't just be on Meta instead. Plus, using __post_init__ means more boilerplate. Here's an example of what this might look like in code:

from msgspec import Struct, Meta, json
from typing import Annotated

class Repository(Struct, kw_only=True):
  owner: str
  name: str
  prefix: Annotated[str, Meta(min_length=3, max_length=30, to_lower=True, pattern=r"^[\w\-]+$")]

decoder = json.Decoder(Repository)
raw = '{"owner": "jcrist", "name": "msgspec", "prefix": "Msg-Spec"}'
repo = decoder.decode(raw)
print(repo.prefix)
# msg-spec

Versus what has to be done now (not too bad but still unnecessary boilerplate):

from msgspec import Struct, Meta, json
from typing import Annotated

class Repository(Struct, kw_only=True):
  owner: str
  name: str
  prefix: Annotated[str, Meta(min_length=3, max_length=30, pattern=r"^[\w\-]+$")]

  def __post_init__(self) -> None:
    self.prefix = self.prefix.lower()

decoder = json.Decoder(Repository)
raw = '{"owner": "jcrist", "name": "msgspec", "prefix": "Msg-Spec"}'
repo = decoder.decode(raw)
print(repo.prefix)
# msg-spec
Lingua principale
Python
Stelle
4.2k
Fork
216
Merge medio
2g 21h
PR unite (30g)
53

Preparare l'ambiente

Apri in Codespaces

Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di msgspec/msgspec

Tutte le issue di msgspec/msgspec

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.