Skip to content

Release v0.6.0 - #8

Merged
tech4242 merged 1 commit into
masterfrom
release/v0.6.0
Sep 24, 2026
Merged

tech4242 merged 1 commit into
masterfrom
release/v0.6.0

Conversation

@tech4242

@tech4242 tech4242 commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Summary

Spec-compliant vCard output, vCard 2.1 support, RFC 9554 fields and several data-loss fixes. Full details in CHANGELOG.md.

Fixes

  • Contacts with the same name no longer overwrite each other (smith_john_2.vcf, ...)
  • The UTF-8 BOM (Excel "CSV UTF-8") no longer drops the first column
  • Line breaks in any cell can no longer inject vCard properties
  • CRLF line endings (also on Windows) and 75-octet line folding
  • vCard 4.0: data: URIs for PHOTO/LOGO/KEY, valid tel: URIs, CATEGORIES/NICKNAME lists kept intact
  • vCard 3.0: no CHARSET parameter, correct data: URI photos, TZ;VALUE=text for zone names
  • Invalid geo coordinates and dates are skipped with a warning instead of written
  • --strict fails on malformed rows and undecodable bytes

Features

  • vCard 2.1 output (-V 2.1)
  • PRONOUNS, SOCIALPROFILE and LANG in vCard 4.0
  • Stable UIDs (from name, org and email, or a uid column), so re-imports update instead of duplicating
  • Numbered multi-value columns (email_2, Phone 3, ...)
  • --keep-unmapped writes unknown columns as X- properties
  • Organization-only rows become company cards (KIND:org, X-ABSHOWAS:COMPANY)
  • Looser header matching (First Name = first_name), more date formats, csv2vcard --version

Behavior changes

  • mobile / cell columns map to TEL;TYPE=CELL instead of the work phone
  • A location column is no longer treated as geo coordinates
  • Python 3.10+ required (3.9 is EOL); 3.14 added

Packaging and CI

  • Removed stale setup.py; requires setuptools >= 77
  • CI runs mypy and tests Python 3.10 to 3.14
  • Release workflow publishes via PyPI Trusted Publishing; action-gh-release v2

Fixes:
- same-name contacts no longer overwrite each other (suffix _2, _3, ...)
- UTF-8 BOM (Excel "CSV UTF-8") no longer drops the first column
- newlines in any cell can no longer inject vCard properties
- CRLF line endings (also on Windows) and 75-octet line folding
- vCard 4.0: data: URIs for PHOTO/LOGO/KEY, valid tel: URIs,
  CATEGORIES/NICKNAME list separators kept
- vCard 3.0: drop CHARSET param, proper data: URI photos, TZ;VALUE=text
- invalid geo/dates skipped with warnings; iter_contacts streams rows

Features:
- vCard 2.1 output (quoted-printable, 2.1 base64 layout)
- PRONOUNS, SOCIALPROFILE, LANG (vCard 4.0)
- deterministic UIDs (name/org/email or uid column)
- numbered multi-value columns (email_2, Phone 3, ...)
- --keep-unmapped: unmapped columns as X- properties
- organization cards (KIND:org / X-ABSHOWAS), PRODID
- looser header matching, more date formats, top-level --version

Packaging/CI: drop setup.py and Python 3.9, add 3.14, setuptools>=77,
mypy in CI, PyPI trusted publishing, action-gh-release v2, CHANGELOG
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.22383% with 32 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.33%. Comparing base (b9db558) to head (cde6556).

Files with missing lines Patch % Lines
csv2vcard/create_vcard.py 91.39% 26 Missing ⚠️
csv2vcard/models.py 96.61% 2 Missing ⚠️
csv2vcard/cli.py 90.90% 1 Missing ⚠️
csv2vcard/parse_csv.py 97.50% 1 Missing ⚠️
csv2vcard/utils.py 98.38% 1 Missing ⚠️
csv2vcard/validators.py 93.33% 1 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##           master       #8      +/-   ##
==========================================
+ Coverage   84.81%   90.33%   +5.51%     
==========================================
  Files          12       13       +1     
  Lines         764     1107     +343     
==========================================
+ Hits          648     1000     +352     
+ Misses        116      107       -9     
Flag Coverage Δ
unittests 90.33% <94.22%> (+5.51%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
csv2vcard/__init__.py 100.00% <100.00%> (ø)
csv2vcard/_version.py 100.00% <100.00%> (ø)
csv2vcard/csv2vcard.py 95.94% <100.00%> (+8.44%) ⬆️
csv2vcard/export_vcard.py 89.71% <100.00%> (+0.09%) ⬆️
csv2vcard/mapping.py 96.15% <100.00%> (+2.40%) ⬆️
csv2vcard/cli.py 74.19% <90.90%> (+4.35%) ⬆️
csv2vcard/parse_csv.py 76.92% <97.50%> (+7.02%) ⬆️
csv2vcard/utils.py 98.57% <98.38%> (-1.43%) ⬇️
csv2vcard/validators.py 94.73% <93.33%> (-1.52%) ⬇️
csv2vcard/models.py 98.41% <96.61%> (+1.63%) ⬆️
... and 1 more
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@tech4242
tech4242 merged commit 04a9966 into master Sep 24, 2026
7 checks passed
@tech4242
tech4242 deleted the release/v0.6.0 branch September 24, 2026 07:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants