django-ctct 0.0.1.dev3__tar.gz → 0.0.1.dev5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/PKG-INFO +29 -14
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/README.md +22 -9
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/django_ctct/admin.py +192 -75
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/django_ctct/apps.py +1 -1
- django_ctct-0.0.1.dev5/django_ctct/management/commands/import_ctct.py +314 -0
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/django_ctct/managers.py +323 -535
- django_ctct-0.0.1.dev5/django_ctct/migrations/0001_initial.py +241 -0
- django_ctct-0.0.1.dev5/django_ctct/migrations/__init__.py +0 -0
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/django_ctct/models.py +553 -235
- django_ctct-0.0.1.dev5/django_ctct/signals.py +93 -0
- django_ctct-0.0.1.dev5/django_ctct/utils.py +43 -0
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/django_ctct/vendor.py +2 -1
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/django_ctct/views.py +1 -1
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/pyproject.toml +11 -4
- django_ctct-0.0.1.dev3/django_ctct/management/commands/import_ctct.py +0 -259
- django_ctct-0.0.1.dev3/django_ctct/signals.py +0 -69
- django_ctct-0.0.1.dev3/django_ctct/utils.py +0 -30
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/LICENSE +0 -0
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/django_ctct/__init__.py +0 -0
- {django_ctct-0.0.1.dev3 → django_ctct-0.0.1.dev5}/django_ctct/urls.py +0 -0
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: django-ctct
|
|
3
|
-
Version: 0.0.1.
|
|
3
|
+
Version: 0.0.1.dev5
|
|
4
4
|
Summary: A Django interface for the Constant Contact API
|
|
5
5
|
License: MIT
|
|
6
|
+
License-File: LICENSE
|
|
6
7
|
Author: Geoffrey Eisenbarth
|
|
7
8
|
Author-email: geoffrey.eisenbarth@gmail.com
|
|
8
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.10
|
|
9
10
|
Classifier: License :: OSI Approved :: MIT License
|
|
10
11
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.10
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
14
14
|
Classifier: Programming Language :: Python :: 3.12
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
17
|
Requires-Dist: django (>=3.2.0,<6.0.0)
|
|
17
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: mypy (>=1.19.0,<2.0.0)
|
|
19
|
+
Requires-Dist: pyjwt[crypto] (>=2.10.1,<3.0.0)
|
|
18
20
|
Requires-Dist: ratelimit (>=2.2.1,<3.0.0)
|
|
19
21
|
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
|
20
22
|
Requires-Dist: tqdm (>=4.67.1,<5.0.0)
|
|
@@ -26,7 +28,9 @@ Description-Content-Type: text/markdown
|
|
|
26
28
|
|
|
27
29
|
This Django app provides a seamless interface to the Constant Contact API, allowing you to manage contacts, email campaigns, and other Constant Contact functionalities directly from your Django project.
|
|
28
30
|
|
|
29
|
-
**Warning:** This package is under active development.
|
|
31
|
+
**Warning:** This package is under active development.
|
|
32
|
+
While it is our intention to develop with a consistent API going forward, we will not make promises until a later version is released.
|
|
33
|
+
|
|
30
34
|
|
|
31
35
|
## Installation
|
|
32
36
|
|
|
@@ -34,6 +38,7 @@ This Django app provides a seamless interface to the Constant Contact API, allow
|
|
|
34
38
|
pip install django-ctct
|
|
35
39
|
```
|
|
36
40
|
|
|
41
|
+
|
|
37
42
|
## Configuration
|
|
38
43
|
|
|
39
44
|
1) **Add to `INSTALLED_APPS`:**
|
|
@@ -62,6 +67,7 @@ urlpatterns = [
|
|
|
62
67
|
# ... other URL patterns
|
|
63
68
|
]
|
|
64
69
|
```
|
|
70
|
+
|
|
65
71
|
3) **ConstantContact API Credentials:**
|
|
66
72
|
|
|
67
73
|
Head to https://app.constantcontact.com/pages/dma/portal/ to set up your application with ConstantContact.
|
|
@@ -111,6 +117,7 @@ CTCT_SYNC_ADMIN = False # Django admin CRUD operations will sync with ctct
|
|
|
111
117
|
* `CTCT_PREVIEW_MESSAGE` will be blank by default.
|
|
112
118
|
|
|
113
119
|
3) **Run Migrations:**
|
|
120
|
+
|
|
114
121
|
```bash
|
|
115
122
|
> ./manage.py makemigrations
|
|
116
123
|
> ./manage.py migrate
|
|
@@ -119,9 +126,10 @@ CTCT_SYNC_ADMIN = False # Django admin CRUD operations will sync with ctct
|
|
|
119
126
|
4) **Create Authenticatin Token:**
|
|
120
127
|
|
|
121
128
|
After the app has been installed and configured, you must generate your first auth token:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
129
|
+
|
|
130
|
+
* Open up the `CTCT_REDIRECT_URI` address in your browser
|
|
131
|
+
* Use your ConstantContact credentials to log in
|
|
132
|
+
* From this point forward `django-ctct` should use refresh tokens, so no need to manually log in again
|
|
125
133
|
|
|
126
134
|
|
|
127
135
|
## Usage
|
|
@@ -131,12 +139,16 @@ If you wish to import data from ConstantContact.com into your local database (re
|
|
|
131
139
|
> ./manage.py import_ctct
|
|
132
140
|
```
|
|
133
141
|
|
|
134
|
-
You will be asked before each model type is imported.
|
|
142
|
+
You will be asked before each model type is imported.
|
|
143
|
+
**Note** ConstantContact does not provide a bulk API endpoint for fetching Campaign Activities, so depending on the size of your account, this might take some time and possible put you over their 10,000 request per day limit if you run it regularly.
|
|
135
144
|
|
|
136
|
-
Since ConstantContact does not offer any webhooks, you will need to set up a cron job if you want your account to remain syncronized with ConstantContact's database.
|
|
145
|
+
Since ConstantContact does not offer any webhooks, you will need to set up a cron job if you want your account to remain syncronized with ConstantContact's database.
|
|
146
|
+
You can use the `--no-input` flag to bypass the interactive questions.
|
|
147
|
+
The `--stats-only` flag is useful for running a cron job to keep EmailCampaign statistics updated.
|
|
137
148
|
|
|
138
149
|
If you wish to use the Django admin to interact with ConstantContact, you must explicitly set the `CTCT_USE_ADMIN` and `CTCT_SYNC_ADMIN` settings to `True`.
|
|
139
150
|
|
|
151
|
+
|
|
140
152
|
## Testing
|
|
141
153
|
|
|
142
154
|
To install dev dependencies:
|
|
@@ -156,13 +168,16 @@ To run tests:
|
|
|
156
168
|
> poetry run coverage report
|
|
157
169
|
```
|
|
158
170
|
|
|
171
|
+
|
|
159
172
|
## Contributing
|
|
160
173
|
|
|
161
174
|
Once version 0.0.1 is released on PyPI, we hope to implement the following new features (in no particular order):
|
|
162
175
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
176
|
+
* Support for API syncing using signals (`post_save`, `pre_delete`, `m2m_changed`, etc).
|
|
177
|
+
This will be controlled by the `CTCT_SYNC_SIGNALS` setting.
|
|
178
|
+
**Update** This probably won't work as desired since the primary object will be saved before related objects are.
|
|
179
|
+
* Background task support using `django-tasks` (which hopefully will merge into Django). This will be controlled by the `CTCT_ENQUEUE_DEFAULT` setting.
|
|
180
|
+
* Add `models.CheckConstraint` and `models.UniqueConstraint` constraints that are currently commented out.
|
|
166
181
|
|
|
167
182
|
|
|
168
183
|
I'm always open to new suggestions, so please reach out on GitHub: https://github.com/geoffrey-eisenbarth/django-ctct/
|
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
This Django app provides a seamless interface to the Constant Contact API, allowing you to manage contacts, email campaigns, and other Constant Contact functionalities directly from your Django project.
|
|
6
6
|
|
|
7
|
-
**Warning:** This package is under active development.
|
|
7
|
+
**Warning:** This package is under active development.
|
|
8
|
+
While it is our intention to develop with a consistent API going forward, we will not make promises until a later version is released.
|
|
9
|
+
|
|
8
10
|
|
|
9
11
|
## Installation
|
|
10
12
|
|
|
@@ -12,6 +14,7 @@ This Django app provides a seamless interface to the Constant Contact API, allow
|
|
|
12
14
|
pip install django-ctct
|
|
13
15
|
```
|
|
14
16
|
|
|
17
|
+
|
|
15
18
|
## Configuration
|
|
16
19
|
|
|
17
20
|
1) **Add to `INSTALLED_APPS`:**
|
|
@@ -40,6 +43,7 @@ urlpatterns = [
|
|
|
40
43
|
# ... other URL patterns
|
|
41
44
|
]
|
|
42
45
|
```
|
|
46
|
+
|
|
43
47
|
3) **ConstantContact API Credentials:**
|
|
44
48
|
|
|
45
49
|
Head to https://app.constantcontact.com/pages/dma/portal/ to set up your application with ConstantContact.
|
|
@@ -89,6 +93,7 @@ CTCT_SYNC_ADMIN = False # Django admin CRUD operations will sync with ctct
|
|
|
89
93
|
* `CTCT_PREVIEW_MESSAGE` will be blank by default.
|
|
90
94
|
|
|
91
95
|
3) **Run Migrations:**
|
|
96
|
+
|
|
92
97
|
```bash
|
|
93
98
|
> ./manage.py makemigrations
|
|
94
99
|
> ./manage.py migrate
|
|
@@ -97,9 +102,10 @@ CTCT_SYNC_ADMIN = False # Django admin CRUD operations will sync with ctct
|
|
|
97
102
|
4) **Create Authenticatin Token:**
|
|
98
103
|
|
|
99
104
|
After the app has been installed and configured, you must generate your first auth token:
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
105
|
+
|
|
106
|
+
* Open up the `CTCT_REDIRECT_URI` address in your browser
|
|
107
|
+
* Use your ConstantContact credentials to log in
|
|
108
|
+
* From this point forward `django-ctct` should use refresh tokens, so no need to manually log in again
|
|
103
109
|
|
|
104
110
|
|
|
105
111
|
## Usage
|
|
@@ -109,12 +115,16 @@ If you wish to import data from ConstantContact.com into your local database (re
|
|
|
109
115
|
> ./manage.py import_ctct
|
|
110
116
|
```
|
|
111
117
|
|
|
112
|
-
You will be asked before each model type is imported.
|
|
118
|
+
You will be asked before each model type is imported.
|
|
119
|
+
**Note** ConstantContact does not provide a bulk API endpoint for fetching Campaign Activities, so depending on the size of your account, this might take some time and possible put you over their 10,000 request per day limit if you run it regularly.
|
|
113
120
|
|
|
114
|
-
Since ConstantContact does not offer any webhooks, you will need to set up a cron job if you want your account to remain syncronized with ConstantContact's database.
|
|
121
|
+
Since ConstantContact does not offer any webhooks, you will need to set up a cron job if you want your account to remain syncronized with ConstantContact's database.
|
|
122
|
+
You can use the `--no-input` flag to bypass the interactive questions.
|
|
123
|
+
The `--stats-only` flag is useful for running a cron job to keep EmailCampaign statistics updated.
|
|
115
124
|
|
|
116
125
|
If you wish to use the Django admin to interact with ConstantContact, you must explicitly set the `CTCT_USE_ADMIN` and `CTCT_SYNC_ADMIN` settings to `True`.
|
|
117
126
|
|
|
127
|
+
|
|
118
128
|
## Testing
|
|
119
129
|
|
|
120
130
|
To install dev dependencies:
|
|
@@ -134,13 +144,16 @@ To run tests:
|
|
|
134
144
|
> poetry run coverage report
|
|
135
145
|
```
|
|
136
146
|
|
|
147
|
+
|
|
137
148
|
## Contributing
|
|
138
149
|
|
|
139
150
|
Once version 0.0.1 is released on PyPI, we hope to implement the following new features (in no particular order):
|
|
140
151
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
152
|
+
* Support for API syncing using signals (`post_save`, `pre_delete`, `m2m_changed`, etc).
|
|
153
|
+
This will be controlled by the `CTCT_SYNC_SIGNALS` setting.
|
|
154
|
+
**Update** This probably won't work as desired since the primary object will be saved before related objects are.
|
|
155
|
+
* Background task support using `django-tasks` (which hopefully will merge into Django). This will be controlled by the `CTCT_ENQUEUE_DEFAULT` setting.
|
|
156
|
+
* Add `models.CheckConstraint` and `models.UniqueConstraint` constraints that are currently commented out.
|
|
144
157
|
|
|
145
158
|
|
|
146
159
|
I'm always open to new suggestions, so please reach out on GitHub: https://github.com/geoffrey-eisenbarth/django-ctct/
|