copy.replace loses slot-backed CSV dialect options
Mantenedores costumam responder em até 1 dia
Avaliação
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Facilidade para iniciantes
- 34/100
Direção de pesquisa
The report identifies Dialect.__replace__() and provides a reproducer, but names no source or test files. Start by locating that method and the CSV dialect tests, then reproduce the example on CPython 3.16. Done means copy.replace() preserves the slot-backed delimiter and both readers return [['alpha', 'beta']]; the reporter says they have already prepared a local fix and regression tests.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Bug report
copy.replace() loses slot-backed attributes of csv.Dialect subclasses. This can silently change how CSV data is parsed, even when the delimiter was not replaced.
Reproduced with CPython 3.16.0a1. The same implementation is present on main at 31a7d994a559a421814ca9e8edfcab21ae4a5b36.
import copy
import csv
class SemicolonDialect(csv.excel):
__slots__ = ('delimiter',)
def __init__(self):
self.delimiter = ';'
super().__init__()
dialect = SemicolonDialect()
replacement = copy.replace(dialect, quoting=csv.QUOTE_ALL)
print(list(csv.reader(['alpha;beta'], dialect)))
print(list(csv.reader(['alpha;beta'], replacement)))
Actual output:
[['alpha', 'beta']]
[['alpha;beta']]
Expected: both readers produce [['alpha', 'beta']], since only the quoting setting was replaced.
Dialect.__replace__() copies only __dict__, losing attributes stored in slots. The replacement therefore lacks its delimiter, and csv.reader falls back to the default comma delimiter.
I have prepared a local fix and regression tests.
CPython versions tested on:
3.16
Operating systems tested on:
No response
- Linguagem predominante
- Python
- Estrelas
- 77.7k
- Forks
- 38.3k
- Merge médio
- 13h 43min
- PRs com merge (30d)
- 704
Preparar o ambiente
Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de python/cpython
-
topic-socket type-bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
python/cpython#160561 · 7 comentários ·
Mantenedores costumam responder em até 1 dia
-
tests topic-profiling type-bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
python/cpython#160334 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
`iso2022_jp_3` encodes U+9B1D but decodes the result as U+9B1CTalvez já em andamento @kinqsradio assumiu há 1 dia. Abertaextension-modules type-bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Mantenedores costumam responder em até 1 dia
-
Remove unused FVS_* macrosAbertainterpreter-core type-feature
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
python/cpython#160109 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
extension-modules type-bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
python/cpython#160001 · 3 comentários ·
Mantenedores costumam responder em até 1 dia
Todas as issues de python/cpython
Issues semelhantes
-
component:benchmark
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
agentic-os-org/ANOLISA#9177 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
distrochooser/distrochooser#520 ·
Mantenedores costumam responder em até 2 dias
-
Status: Needs confirmation Status: Needs triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 64/100
Mantenedores costumam responder em até 1 dia
-
[BUG] Published Docker images lack the redis extra: HEADROOM_COMPRESS_SESSION_STORE stops startupTalvez já em andamento @AlessandroSpallina assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
headroomlabs-ai/headroom#4513 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 65/100
codespell-project/codespell#4060 ·
Mantenedores costumam responder em até 1 dia