Feature Release
Changes from v3.2.0:
New features:
- Added full docker 🐳 support with automatic deployments
Breaking changes:
- Changed config from python file (
conf.py
) to.env
file (for update instructions see below)
Bugfixes:
- Fixed missing gender error #29
- Fixed an issue where a raw birthday format produced an exception instead of beeing skipped
- Fixed an issue where some contacts have been unintentionally skipped during delta sync
- Fixed an issue where a new Google token would not have a
refresh_token
for non-interactive token refresh - Fixed an issue where OAuth scopes have been parsed wrong during Google token refresh
- Fixed an issue where a deleted contact does not get removed from the database (=> failing database check)
- Fixed a rare issue where database check could fail
- Fixed and improved some logging issues
Background changes (no effects on functionality):
- Added instructions for setting up a GCP People API project
- Added fully automated tests of every command and environment using GitHub Actions
- Added SonarCloud SAST CI
- Added CodeQL SAST CI
- Added a new command-line switch for specifying config location path
- Introduced
black
codestyle - Introduced
flake8
linting - Introduced
bandit
security check - Introduced
mypy
type checking - Introduced
isort
import sorting - Reduced code complexity and duplication
- Introduced snake_case naming convention
- Added custom exceptions (better error handling)
- Changed initial Google authorization flow from
local_webserver
toconsole
(more robust) - Changed pickling format from
binary
tobase64
to be readable characters (file updates automatically on next script run)
Update instructions from v3.x.x:
- Automatic: Do a
pip install -r requirements.txt
, then runGMSync.py -u
once. This converts yourconf.py
into a.env
file and moves your credential files into the right subfolders. - Manual: Create a new
.env
file (use.env.example
as template). Then move yourcredentials.json
andtoken.pickle
files into a newdata
subfolder. Do apip install -r requirements.txt
afterwards.