René's URL Explorer Experiment


Title: Drop bytes input in 2.0; require str · Issue #245 · derek73/python-nameparser · GitHub

Open Graph Title: Drop bytes input in 2.0; require str · Issue #245 · derek73/python-nameparser

X Title: Drop bytes input in 2.0; require str · Issue #245 · derek73/python-nameparser

Description: Summary 2.0 should stop accepting bytes anywhere and require str, making decoding the caller's job. The bytes tolerance is a Python 2 legacy, and — verified below — it is already inconsistent to the point of being half-broken: bytes inpu...

Open Graph Description: Summary 2.0 should stop accepting bytes anywhere and require str, making decoding the caller's job. The bytes tolerance is a Python 2 legacy, and — verified below — it is already inconsistent to th...

X Description: Summary 2.0 should stop accepting bytes anywhere and require str, making decoding the caller's job. The bytes tolerance is a Python 2 legacy, and — verified below — it is already inconsistent t...

Opengraph URL: https://github.com/derek73/python-nameparser/issues/245

X: @github

direct link

Domain: github.com


Hey, it has json ld scripts:
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Drop bytes input in 2.0; require str","articleBody":"## Summary\n\n2.0 should stop accepting `bytes` anywhere and require `str`, making decoding the caller's job. The bytes tolerance is a Python 2 legacy, and — verified below — it is already inconsistent to the point of being half-broken: bytes input currently gets a different behavior depending on which door it walks through.\n\n## Current state (verified)\n\n| Entry point | Behavior with bytes |\n|---|---|\n| `HumanName(b'John Smith')` | works — decoded with the `encoding` kwarg; emits `DeprecationWarning` since 1.3.0 |\n| `hn.first = b'Jane'` / `HumanName(first=b'Jane')` | **crashes** — `_set_list` explicitly accepts bytes, then `parse_pieces` fails deep inside with the confusing inverse error `TypeError: a bytes-like object is required, not 'str'` (`bytes.split(' ')`) |\n| `SetManager.add(b'esq')` | works — decoded, but see the stdin sniffing below; emits `DeprecationWarning` since 1.3.0 |\n| `SetManager(b'esq')` / `SetManager([b'esq'])` | already rejected loudly with a decode hint (1.3.0: #238, PR #240) |\n\nSo the \"feature\" is: two paths that decode, one that crashes confusingly despite an isinstance check that promises support, and one that's already banned. Nobody can be relying on the full surface, because part of it doesn't function.\n\n## Additional defect: environment-dependent decoding\n\n`SetManager.add_with_encoding` resolves the encoding as `encoding or sys.stdin.encoding or DEFAULT_ENCODING`. The encoding of the process's stdin has no relationship to an arbitrary `bytes` argument, so the same call can decode differently depending on how the process was launched (terminal vs. pipe vs. embedded with `sys.stdin = None`). Library behavior should not vary with the runtime environment.\n\n## What's removed in 2.0\n\n- `full_name: str | bytes` and `original: str | bytes` become `str`\n- The `encoding` constructor kwarg and `self.encoding` attribute\n- The bytes branch in `_set_list` and the bytes tolerance in `parse_pieces` (accepting what later crashes)\n- `add_with_encoding()` — `add()` becomes str-only, raising the same decode-hint `TypeError` the constructor already raises; the stdin sniffing goes with it\n\n## Migration\n\nOne line at the boundary: `HumanName(raw.decode('utf-8'))` — the caller knows the real encoding; the library never did. Everything else is the same call with `str`.\n\n## Bridge\n\n- [x] `DeprecationWarning` when bytes reaches `full_name` or `SetManager.add()`, naming the decode-first replacement — shipped in 1.3.0 (#253)\n\n\n- [ ] 1.4: `DeprecationWarning` on every `add_with_encoding()` call regardless of argument type, naming `add()` as the replacement — the str path is silent today, so the method's removal is otherwise unwarned (bytes callers additionally get the existing decode-first warning; two distinct migrations). Tracked in #263.\n","author":{"url":"https://github.com/derek73","@type":"Person","name":"derek73"},"datePublished":"2026-07-06T01:56:33.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/245/python-nameparser/issues/245"}

route-pattern/_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format)
route-controllervoltron_issues_fragments
route-actionissue_layout
fetch-noncev2:fb50c1d9-9b3c-674a-beeb-6f539a48798d
current-catalog-service-hash81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114
request-idD9CC:383791:6148F:81859:6A5584F2
html-safe-nonce46e9928378c77e2d8593d7ee8ec92ad5e4d91e43c6add558ef7a09c188e61184
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEOUNDOjM4Mzc5MTo2MTQ4Rjo4MTg1OTo2QTU1ODRGMiIsInZpc2l0b3JfaWQiOiI5MTg4ODMyNzg3ODE3NjYxNjgyIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmac1b78d0169ced57b90f81c22a6e516bdb6f1e32358add99a3f1b661ef2632751d
hovercard-subject-tagissue:4815348393
github-keyboard-shortcutsrepository,issues,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///voltron/issues_fragments/issue_layout
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/derek73/python-nameparser/245/issue_layout
twitter:imagehttps://opengraph.githubassets.com/81aa4c17ca8ef73756eca3849e89f6f4849cafd76f9767a40a80ee87cbce863a/derek73/python-nameparser/issues/245
twitter:cardsummary_large_image
og:imagehttps://opengraph.githubassets.com/81aa4c17ca8ef73756eca3849e89f6f4849cafd76f9767a40a80ee87cbce863a/derek73/python-nameparser/issues/245
og:image:altSummary 2.0 should stop accepting bytes anywhere and require str, making decoding the caller's job. The bytes tolerance is a Python 2 legacy, and — verified below — it is already inconsistent to th...
og:image:width1200
og:image:height600
og:site_nameGitHub
og:typeobject
og:author:usernamederek73
hostnamegithub.com
expected-hostnamegithub.com
Noneb5665c84831ed9ac4fb79519c16c9c5580ba8092fb8bb6e3e72972ec7197348e
turbo-cache-controlno-preview
go-importgithub.com/derek73/python-nameparser git https://github.com/derek73/python-nameparser.git
octolytics-dimension-user_id18306
octolytics-dimension-user_loginderek73
octolytics-dimension-repository_id18353524
octolytics-dimension-repository_nwoderek73/python-nameparser
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id18353524
octolytics-dimension-repository_network_root_nwoderek73/python-nameparser
turbo-body-classeslogged-out env-production page-responsive
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release3215163789b3dc58dba97bd78a30c20c949f477f
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/derek73/python-nameparser/issues/245#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fderek73%2Fpython-nameparser%2Fissues%2F245
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub Copilot appDirect agents from issue to mergehttps://github.com/features/ai/github-app
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
View all resourceshttps://github.com/resources
GitHub SponsorsFund open source developershttps://github.com/open-source/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/open-source/accelerator
GitHub Starshttps://stars.github.com
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/enterprise/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fderek73%2Fpython-nameparser%2Fissues%2F245
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-repo&source_repo=derek73%2Fpython-nameparser
Reloadhttps://github.com/derek73/python-nameparser/issues/245
Reloadhttps://github.com/derek73/python-nameparser/issues/245
Reloadhttps://github.com/derek73/python-nameparser/issues/245
derek73 https://github.com/derek73
python-nameparserhttps://github.com/derek73/python-nameparser
Notifications https://github.com/login?return_to=%2Fderek73%2Fpython-nameparser
Fork 111 https://github.com/login?return_to=%2Fderek73%2Fpython-nameparser
Star 711 https://github.com/login?return_to=%2Fderek73%2Fpython-nameparser
Code https://github.com/derek73/python-nameparser
Issues 22 https://github.com/derek73/python-nameparser/issues
Pull requests 2 https://github.com/derek73/python-nameparser/pulls
Actions https://github.com/derek73/python-nameparser/actions
Projects https://github.com/derek73/python-nameparser/projects
Wiki https://github.com/derek73/python-nameparser/wiki
Security and quality 0 https://github.com/derek73/python-nameparser/security
Insights https://github.com/derek73/python-nameparser/pulse
Code https://github.com/derek73/python-nameparser
Issues https://github.com/derek73/python-nameparser/issues
Pull requests https://github.com/derek73/python-nameparser/pulls
Actions https://github.com/derek73/python-nameparser/actions
Projects https://github.com/derek73/python-nameparser/projects
Wiki https://github.com/derek73/python-nameparser/wiki
Security and quality https://github.com/derek73/python-nameparser/security
Insights https://github.com/derek73/python-nameparser/pulse
Drop bytes input in 2.0; require strhttps://github.com/derek73/python-nameparser/issues/245#top
https://github.com/derek73
breaking-changeBackwards-incompatible API changehttps://github.com/derek73/python-nameparser/issues?q=state%3Aopen%20label%3A%22breaking-change%22
enhancementhttps://github.com/derek73/python-nameparser/issues?q=state%3Aopen%20label%3A%22enhancement%22
v2.0https://github.com/derek73/python-nameparser/milestone/35
https://github.com/derek73
derek73https://github.com/derek73
on Jul 6, 2026https://github.com/derek73/python-nameparser/issues/245#issue-4815348393
#238https://github.com/derek73/python-nameparser/issues/238
#240https://github.com/derek73/python-nameparser/pull/240
Add 2.0 deprecation warnings for bytes input and SetManager legacy surface #253https://github.com/derek73/python-nameparser/pull/253
Add 2.0 deprecation warnings for second-wave removals (1.4 sweep) #263https://github.com/derek73/python-nameparser/issues/263
derek73https://github.com/derek73
breaking-changeBackwards-incompatible API changehttps://github.com/derek73/python-nameparser/issues?q=state%3Aopen%20label%3A%22breaking-change%22
enhancementhttps://github.com/derek73/python-nameparser/issues?q=state%3Aopen%20label%3A%22enhancement%22
v2.0No due datehttps://github.com/derek73/python-nameparser/milestone/35
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.