Title: csv: support multi-character lineterminator in writer · Issue #8321 · RustPython/RustPython · GitHub
Open Graph Title: csv: support multi-character lineterminator in writer · Issue #8321 · RustPython/RustPython
X Title: csv: support multi-character lineterminator in writer · Issue #8321 · RustPython/RustPython
Description: 배경 csv.writer는 임의의 문자열을 lineterminator로 받을 수 있어야 한다 (CPython 호환). 현재 RustPython은 lineterminator를 단일 바이트(csv_core::Terminator)로만 저장하기 때문에 '\r\n', '\n', '\r', '\0' 등 단일/이중 바이트 케이스는 통과하지만 '!@#' 같은 멀티캐릭터 종결자는 저장·출력하지 못한다. 그 결과 Lib/test/test_...
Open Graph Description: 배경 csv.writer는 임의의 문자열을 lineterminator로 받을 수 있어야 한다 (CPython 호환). 현재 RustPython은 lineterminator를 단일 바이트(csv_core::Terminator)로만 저장하기 때문에 '\r\n', '\n', '\r', '\0' 등 단일/이중 바이트 케이스는 통과하지만 '!@#' 같은 멀티캐...
X Description: 배경 csv.writer는 임의의 문자열을 lineterminator로 받을 수 있어야 한다 (CPython 호환). 현재 RustPython은 lineterminator를 단일 바이트(csv_core::Terminator)로만 저장하기 때문에 '\r\n', '\n', '\r', '\0' 등 단...
Opengraph URL: https://github.com/RustPython/RustPython/issues/8321
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"csv: support multi-character lineterminator in writer","articleBody":"## 배경\n\n`csv.writer`는 임의의 문자열을 `lineterminator`로 받을 수 있어야 한다 (CPython 호환). 현재 RustPython은 `lineterminator`를 단일 바이트(`csv_core::Terminator`)로만 저장하기 때문에 `'\\r\\n'`, `'\\n'`, `'\\r'`, `'\\0'` 등 단일/이중 바이트 케이스는 통과하지만 `'!@#'` 같은 **멀티캐릭터** 종결자는 저장·출력하지 못한다.\n\n그 결과 `Lib/test/test_csv.py`의 `test_write_lineterminator`가 `@unittest.expectedFailure`로 마킹되어 있다. (해당 테스트는 `'!@#'` 서브케이스에서만 실패)\n\n```python\nimport csv, io\ns = io.StringIO()\ncsv.writer(s, lineterminator=\"!@#\").writerow([\"a\", \"b\"])\n# 기대: 'a,b!@#'\n```\n\n## 목표\n\n- writer가 멀티캐릭터 `lineterminator`를 온전히 저장하고 출력하도록 한다.\n- `test_write_lineterminator`(test_csv.py:266)의 `@unittest.expectedFailure # TODO: RUSTPYTHON` 마킹을 제거(언마크)한다.\n\n## 스코프\n\n멀티캐릭터 **lineterminator에 한정**한다. 아래는 이 이슈에서 제외하고 별도 후속으로 다룬다.\n\n- lineterminator 검증 파리티 (빈 종결자, delimiter/quotechar/escapechar 충돌 ValueError, None/int 에러 메시지)\n- delimiter/quotechar/escapechar의 비ASCII(Unicode) 문자 지원 (#8310 관련)\n- reader 시맨틱 (CPython reader는 lineterminator를 무시하고 CR/LF만 인식) — 이번엔 현행 유지, 시맨틱 변경은 후속\n\n## 수용 기준\n\n- `cargo run --release -- -m test test_csv`에서 `test_write_lineterminator` 통과 및 마킹 제거.\n- 기존 통과 케이스(`'\\r\\n'`, `'\\n'`, `'\\r'`, `'\\0'`) 회귀 없음.\n- `test_lineterminator`(1280), `test_writer_dialect_attrs`(175) 회귀 없음.\n- QUOTE_ALL / QUOTE_NONNUMERIC 경로에서도 멀티캐릭터 종결자가 절단되지 않음.\n\n## 참고\n\n- 관련 아키텍처 RFC: #8310\n- 선행 PR: #8315 (single/CRLF lineterminator quoting)","author":{"url":"https://github.com/jinmay","@type":"Person","name":"jinmay"},"datePublished":"2026-07-19T12:09:44.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/8321/RustPython/issues/8321"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:ba7ec318-d507-f516-c101-99dad34fe09d |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | AC5C:1D24C2:74D3AF:9AE2BF:6A6002BF |
| html-safe-nonce | 6d0f1f50dcfa9e28116cdd06f464c1b93f520a3e6768cb9683654d5bac84cb11 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBQzVDOjFEMjRDMjo3NEQzQUY6OUFFMkJGOjZBNjAwMkJGIiwidmlzaXRvcl9pZCI6Ijg3NjgzMTk0MjQ2OTk1NjQ3MzUiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 602cea24513ffb14af83d5313faf3f7fcf3a6278b5e2c112d6995fe3052ee7f2 |
| hovercard-subject-tag | issue:4922601686 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/RustPython/RustPython/8321/issue_layout |
| twitter:image | https://opengraph.githubassets.com/46752b38dc7ff50645bfa2e25a67f5a375fef290a0f41a229ee7b29bdc0425ea/RustPython/RustPython/issues/8321 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/46752b38dc7ff50645bfa2e25a67f5a375fef290a0f41a229ee7b29bdc0425ea/RustPython/RustPython/issues/8321 |
| og:image:alt | 배경 csv.writer는 임의의 문자열을 lineterminator로 받을 수 있어야 한다 (CPython 호환). 현재 RustPython은 lineterminator를 단일 바이트(csv_core::Terminator)로만 저장하기 때문에 '\r\n', '\n', '\r', '\0' 등 단일/이중 바이트 케이스는 통과하지만 '!@#' 같은 멀티캐... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | jinmay |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5789899e92b20db289de946d86eb20bf5c9626276695d68f58a8c47cdda699b7 |
| turbo-cache-control | no-preview |
| go-import | github.com/RustPython/RustPython git https://github.com/RustPython/RustPython.git |
| octolytics-dimension-user_id | 39710557 |
| octolytics-dimension-user_login | RustPython |
| octolytics-dimension-repository_id | 135201145 |
| octolytics-dimension-repository_nwo | RustPython/RustPython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 135201145 |
| octolytics-dimension-repository_network_root_nwo | RustPython/RustPython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 6ddc048ddf80664b9b33547b619db10313c482f1 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width