Releases: move-coop/parsons
v4.0.0
New Contributors
- @retacg made their first contribution in #1134
- @lisamessier made their first contribution in #1141
Welcome and thank you! 🎉🎊🥳
And of course, huge thanks to all our returning contributors: @austinweisgrau @KasiaHinkson @strangeways @anzelpwj @sharinetmc @sjwmoveon @SorenSpicknall @ydamit @bmos @shaunagm @IanRFerguson @willyraedy @codygordon and @salice
What's Changed
Breaking changes
- Parsons no longer supports Python 3.8. Your Parsons scripts may still run on 3.8 but we strongly recommend updating. More in #1192
- Allow ActionNetwork upsert_person to not change mobile opt-in status by @austinweisgrau in #1212
- We've added a ten minute timeout for calls to the CatalistMatch sftp server. More in #1149
Prior behavior opted-in all phone numbers by default, and the only alternative would be to opt-out phone numbers sent to the API. This update allows for not changing the opt-in status of the number, and changes the default from opt-in to no change. This is a more reasonable and legally compliant default behavior than opting-in.
This causes a change in behavior! If users are currently relying on the default opt-in behavior of this connector's upsert_person method, this change will break their workflow. However, it is generally not legally compliant to opt-in by default, and more likely is that many users are unknowingly setting opt-in status to "subscribed" by default in a legally non-compliant way. The new configuration will require users to explicitly pass opt-in status if they want that status to be changed in ActionNetwork.
- We incorporated a patch in Python that changes how email addresses are validated. If your Parsons script starts giving you weird email validation errors please reach out and we'll help you debug. More in #1146
- This is technically not a breaking change either, but a heads up: newmode has made major changes to their API and is deprecating their old API next month. @sharinetmc has updated our connector accordingly in #1227 - if you use newmode with Parsons (or any API) watch out for this change!
User-facing
New connectors
- Kasiah/community dot com connector by @KasiaHinkson in #1112
- Kasiah/empower connector by @KasiaHinkson in #1191
- Airmeet Event Details connector with tests and documentation by @strangeways in #1077
Other enhancements and features
- Allow to_gcs_csv function to accept a gcs instance instead of creating one by @KasiaHinkson in #1109
- SFTP utility can include timeout by @austinweisgrau in #1081
- Enable GZIP on BigQuery extract to GCS by @austinweisgrau in #1110
- Add skipMatching to apply_response() by @retacg in #1134
- BigQuery copy method can convert dict column to JSON string by @austinweisgrau in #1143
- Allow setting gcs_tmp_bucket on GoogleBigQuery class by @austinweisgrau in #1147
- Allow passing google auth Credentials directly to GCS connector by @austinweisgrau in #1148
- Postgres copy explicates columns and column order by @austinweisgrau in #1137
- Add email and contact notes to NGPVAN docs by @anzelpwj in #1131
- Update Dockerfile by @KasiaHinkson in #1186
- add method and test webinar report by @sharinetmc in #1213
- Add unique ID list creation to ActionNetwork handler by @sjwmoveon in #1241
- Add newmode v2 by @sharinetmc in #1227
Bugfixes and other changes
- Update old reference to Parsons API key type by @SorenSpicknall in #1103
- Restore functionality of Google Sheets API tests by @SorenSpicknall in #1104
- Bug fix: pass custom delimiter from Table.from_csv to BigQuery load by @austinweisgrau in #1083
- updated README with correct instructions for installing from Github by @lisamessier in #1141
- email parse depends on python patch version by @austinweisgrau in #1146
- Remove entity from campaign method by @ydamit in #1140
- Fix NGPVAN _people_search arbitrary fields feature by @austinweisgrau in #1150
Not user-facing (ideally! things can always go wrong!)
Internal infrastructure changes
- Restore minimal CONTRIBUTING.md that treats website as source of truth by @SorenSpicknall in #1106
- Step security changes by @anzelpwj in #1120
- Implement Windows testing by @bmos in #1119
- circleci updates by @bmos in #1122
- #1091 ruff added to pre-commit, pyproject.toml, requirements-dev.txt, ruff linting differences by @salice in #1108
- Use UV for package install and dependency resolution by @bmos in #1016
- Create security_scorecard.yml by @shaunagm in #1116
- Use ruff's recommended github output format by @bmos in #1117
- Update Dockerfile with uv by @bmos in #1135
- Github Actions Rebuild by @bmos in #1132
Dependency updates
- Version bump for certain packages by @anzelpwj in #1121
- Update requests version by @anzelpwj in #1130
- Bump github/codeql-action from 3.26.6 to 3.26.12 by @dependabot in #1151
- Bump actions/checkout from 4.1.1 to 4.2.1 by @dependabot in #1152
- Bump google-cloud-bigquery from 3.23.1 to 3.26.0 in /docs by @dependabot in #1153
- Bump xmltodict from 0.11.0 to 0.14.1 in /docs by @dependabot in #1155
- Bump install-pinned/uv from de03c60d508703a83d3f8f49afcf1249590ecda1 to 03a68782c27167b267490a9392ac24d6b93a2f14 by @dependabot in #1154
- Bump step-security/harden-runner from 2.9.1 to 2.10.1 by @dependabot in #1156
- Bump pygithub from 1.51 to 2.4.0 by @dependabot in #1157
- Revert "Bump install-pinned/uv from de03c60d508703a83d3f8f49afcf1249590ecda1 to 03a68782c27167b267490a9392ac24d6b93a2f14" by @shaunagm in #1168
- Bump ossf/scorecard-action from 2.3.1 to 2.4.0 by @dependabot in #1158
- Update sqlalchemy requirement from !=1.4.33,<2.0.0,>=1.4.22 to >=1.4.22,!=1.4.33,<3.0.0 by @dependabot in #1164
- Bump censusgeocode from 0.4.3.post1 to 0.5.2 by @dependabot in #1165
- Bump mysql-connector-python from 8.0.18 to 9.1.0 by @dependabot in #1169
- Bump gspread from 3.7.0 to 6.1.4 in /docs by @dependabot in #1172
- Bump suds-py3 from 1.4.4.1 to 1.4.5.0 in /docs by @dependabot in #1171
- Bump actions/checkout from 4.2.1 to 4.2.2 by @dependabot in #1178
- Bump actions/setup-python from 5.2.0 to 5.3.0 by @dependabot in #1176
- Bump github/codeql-action from 3.26.12 to 3.27.5 by @dependabot in #1194
- Bump install-pinned/uv from de03c60d508703a83d3f8f49afcf1249590ecda1 to ffec6b0ac55e0000217a14a4b1f838c941e88ce3 by @dependabot in #1197
- Bump grpcio from 1.62.2 to 1.68.1 in /docs by @dependabot in #1196
- Remove google-resumable-media from requirements.txt by @shaunagm in #1209
- Bump twilio from 8.2.1 to 9.3.8 by @dependabot in #1200
- Bump braintree from 4.17.1 to 4.31.0 in /docs by @dependabot in #1202
- Bump google-api-core from 2.19.2 to 2.23.0 in /docs by @dependabot in #1203
- Bump bs4 from 0.0.1 to 0.0.2 in /docs by @dependabot in #1204
- Bump install-pinned/uv from ffec6b0ac55e0000217a14a4b1f838c941e88ce3 to 79cef4cccc47c7fb191b653a4184e34d83437a8b by @dependabot in #1205
- Bump github/codeql-action from 3.27.5 to 3.27.6 by @dependabot in #1206
- Bump actions/dependency-review-action from 4.3.4 to 4.5.0 by @dependabot in https://github.co...
v3.2.0
What's Changed
This release includes enhancements to existing connectors, including our Action Network, NGPVAN, and Google Sheets connectors, bug fixes, a few updates, and a change in our base image to Python 3.8!
Also, a special shout-out to @anzelpwj, @jdw25, @strangeways, and @jeffjrodriguez for contributing their first parsons PR!
Enhancements and New Features
- Adding a data paste function to Google Sheets by @anzelpwj in #1045
- Allow passing google auth Credentials directly to BQ connector by @austinweisgrau in #1042
- EveryAction: Add email endpoint methods to retrieve email stats from TargetedEmail by @matthewkrausse in #1003
- Update GET helper function, add custom columns to create profile by @cmdelrio in #1055
- added encoding to s3_copy function in redshift class by @sharinetmc in #827
- New Feature: DBSync can upsert or append updated rows by @austinweisgrau in #1029
- [Enhancement] - Adding Create Ticket Function To Freshdesk by @NirTatcher in #1057
- Add option to disaggregate A/B test emails by @anzelpwj in #1065
- Add methods to update phone, order user detail, and import action by @technicalex in #1074
- Add ActionKit methods to add a phone number, create and update event fields, and search events in a campaign by @strangeways in #1076
- BigQuery extract table method by @austinweisgrau in #1041
- Features - ActionNetwork API - Unique ID Lists routes support + SQL Mirror support by @NirTatcher in #1025
- adding unique id lists support in ActionNetwork module by @NirTatcher in #1101
- ActionNetwork SQL Mirror querying support + general SSH util to query any db through ssh by @NirTatcher in #1102
- VAN Bulk Import Additions by @codygordon in #1078
- Add campaignId parameter to apply_responses method in People class by @matthewkrausse in #1089
Bug Fixes
- Remove self.project reference from GoogleBigQuery.get_columns() query by @coastlines in #1008
- add list data type to mapping by @KasiaHinkson in #1026
- Revert "add list data type to mapping" by @KasiaHinkson in #1027
- Map 'Decimal' type from incomping Table in BQ by @Jason94 in #1010
- Move flake8, black, and pytest configs to pyproject.toml by @bmos in #1013
- Bugfixes by @bmos in #1012
- Return PATCH response when updating AK user by @crayolakat in #1024
- Bump black from 22.12.0 to 24.3.0 by @dependabot in #1022
- Bump setuptools from 68.0.0 to 70.0.0 by @dependabot in #1094
- Change Import to Absolute by @IanRFerguson in #1096
- Revert "Features - ActionNetwork API - Unique ID Lists routes support… by @austinweisgrau in #1100
- Revert "New Feature: DBSync can upsert or append updated rows" by @shaunagm in #1064
- Hot fix for MobileCommons.create_profile() method by @cmdelrio in #1067
- If petl is loaded from a CSV, use the source file, don't re-write by @austinweisgrau in #1062
- Fix VAN create_event location_ids list bug by @codygordon in #1073
- Fix misspecified tests using MagicMock().called_with() by @austinweisgrau in #1072
Documentation
- Add cautionary note about performance in get_row_count method by @matthewkrausse in #998
- Move variable definition outside try/except block by @austinweisgrau in #1030
- Skip empty tables in GSheets append & overwrite methods by @codygordon in #1080
- Support for python3.12: Take 2 by @jdw25 in #1087
- Pass credentials directly to GCP connectors rather than through environment variable by @austinweisgrau in #1040
- Fix typo in environment variable by @austinweisgrau in #1093
- Remove unnecessary dependency by @austinweisgrau in #1088
- Change dict to json by @KasiaHinkson in #1028
Other Changes
- Removes bluelink connector because platform retired March 2024 by @elyse-weiss in #1034
- Update mac runner to macos-12 instead of mac-latest by @shaunagm in #1049
- Psycopg2 version bump by @anzelpwj in #1051
- Sqlalchemy Update to >= 1.4.22 by @matthewkrausse in #1050
- Update version on precommit hook to match requirements-dev, and make … by @shaunagm in #1053
- Bump azure-storage-blob from 12.3.2 to 12.13.0 by @dependabot in #1061
- bump braintree to 4.17.1 by @jdw25 in #1054
- Run upgraded black formatter on all files by @austinweisgrau in #1035
- add script by @sharinetmc in #1063
- Bump urllib3 from 1.26.18 to 1.26.19 by @dependabot in #1079
- Update census_geocoder.py by @jeffjrodriguez in #1085
- Airtable Updates by @codygordon in #1082
- Python3.8 Base Image by @IanRFerguson in #1090
- new release by @sharinetmc in #1107
New Contributors
- @anzelpwj made their first contribution in #1051
- @jdw25 made their first contribution in #1054
- @strangeways made their first contribution in #1076
- @jeffjrodriguez made their first contribution in #1085
Full Changelog: v3.1.0...v3.2.0
v3.1.0
What's Changed
New Connectors
- Census connector by @Charlie-Kramer in #978
- Formstack connector by @Jason94 in #991
New Features
- implement new hustle api call (create_group_membership) by @nmannes in #903
- Added get_representatives_by_address method to Google Civic Connector by @mkrausse-ggtx in #926
- Add utility method to format phone numbers by @mkrausse-ggtx in #928
- Feature/more auth0 functions by @talevy42 in #874
- Add actionnetwork methods by @NirTatcher in #940
- Action Builder Deactivate & Reactivate Connections by @ydamit in #965
- Create new feature for running and logging dbt commands by @austinweisgrau in #841
- Add head and tail methods to Parsons Table by @matthewkrausse in #1001
Bugfixes and other Changes
- Kasiahinkson/extend list blobs by @KasiaHinkson in #953
- Fix bug in NGPVAN apply_canvass_result method by @mkrausse-ggtx in #927
- Fix incorrect documentation on ActionNetwork upsert_person argument by @austinweisgrau in #915
- Explicitly name vars by @sharinetmc in #964
- Bump Multiple Docs Deps Around Sphinx by @SorenSpicknall in #975
- add client_options with default scopes to client by @graemelorimer in #969
- Update get_columns_list() to accept tables with spaces in the name by @coastlines in #973
- Fix ActionKit collect_upload_errors() Bug by @technicalex in #979
- BigQuery returns empty Table on query with no rows returned by @austinweisgrau in #972
- Miscellaneous fixes to BigQuery connector by @austinweisgrau in #959
- Remove doubled up imports to fix linting by @austinweisgrau in #982
- Bump python-dateutil from v2.8.1 to v2.8.2 by @bmos in #966
- Bump paramiko from 2.11.0 to 3.4.0 by @dependabot in #962
- Log progress when putting file through SFTP by @austinweisgrau in #985
- BigQuery - Call .result() regardless of compression by @IanRFerguson in #974
- Generalize the oauth_api_connector to accept authorization kwargs by @austinweisgrau in #918
- Enable email dict to be passed to VAN.upsert_person() by @austinweisgrau in #963
- Bump grpcio from 1.53.0 to 1.53.2 by @dependabot in #990
- BigQuery connector handles queries without return values (create table, create view) by @austinweisgrau in #1000
- Add config to setup.py so README appears on PyPI by @shaunagm in #996
- 992 bug parsons bigquery upsert is broken by @willyraedy in #994
- Simpler use of pip cache in actions by @bmos in #986
- Raise Error for Big Query .copy() when no GCS_TEMP_BUCKET environment variable or tmp_gcs_bucket parameter by @tracy-u in #997
- Refactor Table initialization to avoid iterating over every row by @austinweisgrau in #983
- Bump version number for minor release by @shaunagm in #1006
New Contributors
- @nmannes made their first contribution in #903
- @graemelorimer made their first contribution in #969
- @coastlines made their first contribution in #973
- @bmos made their first contribution in #966
- @Charlie-Kramer made their first contribution in #978
- @tracy-u made their first contribution in #997
Full Changelog: v3.0.0...v3.1.0
v3.0.0
What's Changed
Breaking Changes
3.0.0 is a major release, which means there are some breaking changes. You can see a full list of all PRs included in this release which have implications for breaking changes here.
-
We now parse boolean types by default instead of coercing them into strings by default. We detect boolean column types when copying a parsons Table to a database and create a boolean column in the database. If you want to maintain the old behavior, to convert the boolean columns in the table to strings before uploading it to the database, like this:
table = table.convert(['bool', 'columns', 'here', ...], str)
More: #943 -
We've made some major updates to the BigQuery and GoogleCloudStorage connecters:
GoogleBigQuery
The GoogleBigQuery
connector was written with compatibility in mind, and utilizes many of the same functions as the Amazon Redshift
connector in order to minimize the user experience between the two cloud service providers. GoogleBigQuery
is authenticated with a service account JSON file, which can be generated in the GCP user interface and stored locally.
There are several subtle differences between GoogleBigQuery
and Redshift
, most notably in the .query()
function, which runs asynchronously in Google. We recommend using the .delete_table()
function rather than sending a DELETE TABLE
SQL query through the .query()
function for this reason, as the connector will raise an exception when the asynchronous task completes and the table no longer exists; alternatively, the user can pass in .query(sql=sql, return_values=False)
to prevent this exception from raising.
In addition to the familiar .copy()
function, the GoogleBigQuery
connector includes a .copy_large_compressed_file_from_gcs()
function to handle large files in cloud storage, such as the voter file. BigQuery streams large uncompressed files in batches, but cannot do so when a file in compressed. This function decompresses the file in question using the correct compression type parameter (gzip
is default but zip
is also accepted), copies the file to BigQuery, then deletes the decompressed file from cloud storage.
GoogleCloudStorage
Similarly, the GoogleCloudStorage
connector provides an API to view and manipulate blobs in cloud storage with compatibility to Amazon's S3
connector. Users can create new storage buckets, load blobs into buckets, list their contents, acquire blob metadata, and download blobs from cloud storage to their local environments. This connector handles the decompression steps outlined above in the . copy_large_compressed_file_from_gcs()
function outlined above, and also includes helpful utilities to aid in moving data to and from Google Cloud Storage.
New Connectors
Big thanks to @cmdelrio for adding the new MobileCommons connector (#896) and to @austinweisgrau for the new Catalist Match API connector (#912)!
Other Changes
- Zoom Polls by @IanRFerguson in #886
- Check for empty tables in zoom poll results by @Jason94 in #897
- #741 : Deprecate Slack chat.postMessage
as_user
argument and allow for new authorship arguments by @angloyna in #891 - #816 Airtable.get_records() fields argument can be either str or list by @angloyna in #892
- Nir's actionnetwork changes by @NirTatcher in #900
- Fix airtable.insert_records table arg by @codygordon in #907
- Add canales s3 functions by @sharinetmc in #885
- Enhancement: Action Network Connector: Added unpack_statistics param in get_messages method by @matthewkrausse in #917
- Adding rename_columns method to Parsons Table by @mkrausse-ggtx in #923
- Add http response to update_mailer by @sjwmoveon in #924
- Enable passing arbitrary additional fields to NGPVAN people match API by @austinweisgrau in #916
- Install dependencies for tests based on package install by @austinweisgrau in #951
New Contributors
Cheers to our newest contributors! 🎉 Thanks so much for your help.
- @NirTatcher made their first contribution in #900
- @matthewkrausse made their first contribution in #917
- @dexchan made their first contribution in #920
Full Changelog: v2.1.0...v3.0.0
v2.1.0
What's Changed
Documentation
Other Changes
- Action Builder Entity Record Insert Name Key Hotfix by @ydamit in #887
- Add json as allowable file type to copy_s3 by @KasiaHinkson in #844
- Enable use of "extension" argument to Redshift unload by @austinweisgrau in #871
- Update docs to point to website by @shaunagm in #851
- update zoom docs by @sharinetmc in #888
- Add more ActionKit methods by @crayolakat in #870
- fix: handle 429 error code by @talevy42 in #877
- chore(actionnetwork): Edge case and cleaning up type checking by @talevy42 in #889
- Action Builder Remove Tag Method by @ydamit in #890
- Revert "Enable passing
identifiers
to ActionNetworkupsert_person()
by @austinweisgrau in #876 - Update release by @KasiaHinkson in #894
New Contributors
- @KasiaHinkson made their first contribution in #844
Full Changelog: v2.0.0...v2.1.0
v2.0.0
What's Changed
This release addresses a breaking change to the Zoom
connector. Starting on September 1st, 2023 JWT authentication will no longer be accepted when querying Zoom's REST API; this release moves the Zoom
connector a server-to-server OAuth based authentication.
To query the Zoom API moving forward, users will need to:
- Setup an OAuth application in Zoom's app marketplace, including defining relevant endpoint scopes (meetings, users, etc.)
- Use the client ID, account ID, and account secret values to validate API access
Other Changes
- add release notes yml by @sharinetmc in #878
- Prepping for Major Release by @IanRFerguson in #881
- v2.0.0 by @IanRFerguson in #882
Full Changelog: v1.2.0...v2.0.0
v1.2.0 - New connectors, updates to testing, updates on our dependencies, and many more!
New Features
- Add upsert_user function by @talevy42 in #828
- add exists_ok param to add_column by @talevy42 in #839
- Add support for deleting person from NGPVAN by @sjwmoveon in #834
- feat: add Nation Builder Connector by @gcollazo in #837
- Implement delete actionfield for ActionKit by @crayolakat in #846
- Add nation builder connector by @gcollazo in 848
- Implement, test, and document Parsons Table deduplicate method by @jafayer in #842
- Action Builder connector by @ydamit in #826
- Feature/background processing by @talevy42 in #853
- NewMode - Add bulk
targets
endpoint by @IanRFerguson in #857 - Get and Update ActionKit orderrecurring by @technicalex in #859
- Enable passing
identifiers
to ActionNetworkupsert_person()
by @austinweisgrau in #861 - Add Events Helpers to PDI Connector by @IanRFerguson in #865
Automated Testing
- Add multiple python versions to CI tests by @shaunagm in #858
- Add pre-commit hook config to run flake8 and black on commit by @austinweisgrau in #864
Dependencies
- Update Twilio Package Version by @ydamit in #821
- Bump grpcio from 1.51.1 to 1.53.0 by @dependabot in #852
Others
- Bump requests from 2.25.1 to 2.31.0 by @dependabot in #824
New Contributors
v1.1.0 - Adding Black formatting, some connector features, and lots of bug fixes
New Features
- Enable
__len__
dunder method for parsons Table by @austinweisgrau in #830 - Add NGPVAN bulk apply suppressions function by @codygordon @crayolakat and @sjwmoveon in #823
- Catch File Extensions in S3 Prefix @IanRFerguson in #809
- Add Redash methods by @crayolakat in #802
- MoveOn Shopify / AK changes by @codygordon in #801
Automated Testing
- Use black formatting in addition to flake8 by @austinweisgrau in #796
Bug Fixes
- Remove hardcoded version number from conf.py and correct repo link in setup.py by @SorenSpicknail in #811
- Dependency cascade added to Redshift upsert by @elyse-weiss in #833 (see also #819 & #832)
- chore(Geocoder)L Add more informative error handling to geocode #729 by @talevy42 in #810
- Fix invalid setup.py syntax by @crayolakat in #831
- Merge main into major-release by @Jason94 in #814
- Fix Salesforce query output by @sjwmoveon in #829
- Specify version of slackclient in setup.py by @crayolakat in #825
- Pass use_env_token to to_s3_csv by @codygordon in #822
- Add Default Parameter Flexibility @IanRFerguson #807
- Standardize S3 Prefix Conventions @IanRFerguson #803
Documentation
New Contributors
- @austinweisgrau made their first contribution by adding Black formatting in #796
- @codygordon made their first contribution with updates to Shopify and ActionKit connectors in #801
- @IanRFerguson made their first contribution by standardizing S3 Prefix Conventions in #803
- @talevy42 made their first contribution by adding more informative error handling to geocode in #810
Welcome and thank you to Austin, Cody, Ian and Tal! 🎉🎉🎉
v1.0.0 - Major Release
New Connectors
- feat: scytl connector by @agreenspan24 in #737
- Donorbox connector by @shaunagm in #773
New Features
- Add use_env_token option to S3 object by @sjwmoveon in #745
- Updates to ActionKit, Braintree, and S3 connectors by @crayolakat in #754
- Add get_aliases() function to Google Admin connector by @crayolakat in #769
- merge contacts and test by @mkwoods927 in #776
- Add printed list functionality to VAN connector by @sharinef1 in #778
- Updates to ActionKit, S3, and NGPVan by @crayolakat in #775
- Opt out phones in EA use case and sample script by @mkwoods927 in #670
Automated Testing
- Unit tests for #685 by @alxmrs in #746
- Update cache keys for CircleCI configuration by @SorenSpicknall in #752
- Update CircleCI Docs key fingerprint by @neverett in #785
Bug Fixes
- Fix assert_matching_tables by @crayolakat in #759
- Scytl fix browser headers and requests lib w mock by @agreenspan24 in #762
- GitHub Connector Fix by @SorenSpicknall in #767
- NGPVAN: Saved List Overwrite Bug Fix by @jburchard in #770
- Upgrade dependencies by @crayolakat in #779
- Change release version to 1.0 by @Jason94 in #793
- Fix #780 and #781 - Google Sheets documentation by @ethyoo in #786
Documentation
- Typo fixes for ETL best practices guide. by @alxmrs in #747
- Fix #707 - Parsing of code blocks for Mobilize America documentation by @ethyoo in #749
- Simple docs for the SMTP connector by @AndrewRook in #735
- Update Code of Conduct contact email by @shaunagm in #756
- Update requirements.txt for joblib security vulnerability by @SorenSpicknall in #764
- Add docker image references, logo, scytl connector in sidebar by @shaunagm in #782
New Contributors
- @alxmrs made their first contribution in #747
- @ethyoo made their first contribution in #749
- @agreenspan24 made their first contribution in #737
- @sharinef1 made their first contribution in #778
Full Changelog: v0.21.0...v1.0.0
v0.21.0 - SmartMatch, psycopg2-binary installation fix, and lots of small bugfixes
New Connectors
- TargetSmart SmartMatch connector by @benstroud in #674
Enhancements
- More flexible importing in parsons/init.py by @cmc333333 in #702
- Sendmail connector is now an abstract base class by @AndrewRook in #717
- Convert None to "" in convert_columns_to_str by @Jason94 in #728
- Add upsert_person method to ActionNetwork by @shaunagm in #734
- Allow Subfolders for Temp S3 Bucket in Redshift Operations by @SorenSpicknall in #738
- Always use UTF-8 encoding writing to S3 via the Redshift connector by @Jason94 in #732
Fixes/Improvements
- Remove leading and trailing whitespace from table and schema name in Redshift utility method table_exists_with_connection() by @neverett in #715
- Fix Redshift column alteration bug by @SorenSpicknall in #709
- Fix small bug with postal addresses in Action Network add_person method by @shaunagm in #716
- Bugfix for Redshift upsert alter_varchar_columns cascade issue by @SorenSpicknall in #720
- Fixes for Sendmail tests linting by @SorenSpicknall in #721
- Don't auto-grab AWS session token if it's not passed in by @sjwmoveon in #740
- Update Mobilize connector by @Jason94 in #733
- Update psycopg2-binary from 2.8.5 to 2.9.3 by @shaunagm in #731
Documentation
- Update version number for 0.21.0 release by @SorenSpicknall in #743
New Contributors
- @benstroud made their first contribution in #674
- @sjwmoveon made their first contribution in #740
Full Changelog: v0.20.0...v0.21.0