Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

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

Abierto
#858 1 comentario 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
35/100
Tipo de issue
Nueva funcionalidad
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
python

Línea de trabajo

Comienza con las restricciones existentes de msgspec.Meta y la ruta de json.Decoder descrita en el issue; después, revisa el issue #782 para conocer el contexto de diseño relacionado. Implementa la compatibilidad con to_upper y to_lower en los metadatos de str, conservando las restricciones de longitud y patrón solicitadas, y verifica que el ejemplo decodifique prefix como "msg-spec".

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

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
Lenguaje dominante
Python
Estrellas
4.2k
Forks
209
Merge medio
2 d 3 h
PR fusionados (30 d)
51

Preparar el entorno

Abrir en Codespaces

Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de msgspec/msgspec

Todos los issues de msgspec/msgspec

Issues similares

Más issues de Python

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.