django-cfg 1.1.81__tar.gz → 1.1.82__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_cfg-1.1.81 → django_cfg-1.1.82}/MANIFEST.in +5 -6
- {django_cfg-1.1.81 → django_cfg-1.1.82}/PKG-INFO +1 -1
- {django_cfg-1.1.81 → django_cfg-1.1.82}/pyproject.toml +3 -9
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/__init__.py +1 -1
- django_cfg-1.1.82/src/django_cfg/modules/django_twilio/templates/guide.md +266 -0
- django_cfg-1.1.81/@docs/dramatiq/README.md +0 -153
- django_cfg-1.1.81/@sources/django_dramatiq/CHANGELOG.md +0 -354
- django_cfg-1.1.81/@sources/django_dramatiq/README.md +0 -385
- django_cfg-1.1.81/@sources/django_dramatiq/examples/basic/README.md +0 -9
- django_cfg-1.1.81/@sources/dramatiq/README.md +0 -88
- django_cfg-1.1.81/@sources/dramatiq/benchmarks/README.md +0 -27
- django_cfg-1.1.81/@sources/dramatiq/examples/basic/README.md +0 -17
- django_cfg-1.1.81/@sources/dramatiq/examples/composition/README.md +0 -17
- django_cfg-1.1.81/@sources/dramatiq/examples/crawler/README.md +0 -20
- django_cfg-1.1.81/@sources/dramatiq/examples/long_running/README.md +0 -16
- django_cfg-1.1.81/@sources/dramatiq/examples/persistent/README.md +0 -19
- django_cfg-1.1.81/@sources/dramatiq/examples/results/README.md +0 -17
- django_cfg-1.1.81/@sources/dramatiq/examples/scheduling/README.md +0 -19
- django_cfg-1.1.81/@sources/dramatiq/examples/time_limit/README.md +0 -16
- django_cfg-1.1.81/django_sample/README.md +0 -374
- django_cfg-1.1.81/django_sample/devops/README.md +0 -287
- django_cfg-1.1.81/django_sample/docker/README.md +0 -190
- django_cfg-1.1.81/django_sample/node_modules/.ignored/@hey-api/openapi-ts/README.md +0 -347
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/@hey-api/json-schema-ref-parser/README.md +0 -138
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/@jsdevtools/ono/CHANGELOG.md +0 -122
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/@jsdevtools/ono/README.md +0 -392
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/@types/json-schema/README.md +0 -15
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/js-yaml/CHANGELOG.md +0 -616
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/js-yaml/README.md +0 -246
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/lodash/README.md +0 -39
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/@hey-api/openapi-ts/README.md +0 -347
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/ansi-colors/README.md +0 -315
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/c12/README.md +0 -471
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/color-support/README.md +0 -129
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/semver/README.md +0 -664
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/typescript/README.md +0 -50
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/CHANGELOG.md +0 -954
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/README.md +0 -282
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/argparse@2.0.1/node_modules/argparse/CHANGELOG.md +0 -216
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/argparse@2.0.1/node_modules/argparse/README.md +0 -84
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/chokidar/README.md +0 -305
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/confbox/README.md +0 -191
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/defu/README.md +0 -171
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/dotenv/CHANGELOG.md +0 -520
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/dotenv/README.md +0 -645
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/giget/README.md +0 -248
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/jiti/README.md +0 -243
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/mlly/README.md +0 -561
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/ohash/README.md +0 -173
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/pathe/README.md +0 -69
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/perfect-debounce/README.md +0 -92
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/pkg-types/README.md +0 -167
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/c12@2.0.1/node_modules/rc9/README.md +0 -201
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/chokidar@4.0.3/node_modules/readdirp/README.md +0 -120
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/chownr@2.0.0/node_modules/chownr/README.md +0 -3
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/citty@0.1.6/node_modules/citty/README.md +0 -134
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/citty@0.1.6/node_modules/consola/README.md +0 -352
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/destr@2.0.5/node_modules/destr/README.md +0 -132
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/fs-minipass@2.1.0/node_modules/fs-minipass/README.md +0 -70
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/fs-minipass@2.1.0/node_modules/minipass/README.md +0 -728
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/giget@1.2.5/node_modules/node-fetch-native/README.md +0 -225
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/giget@1.2.5/node_modules/nypm/README.md +0 -147
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/giget@1.2.5/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/giget@1.2.5/node_modules/tar/README.md +0 -1080
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/handlebars@4.7.8/node_modules/minimist/CHANGELOG.md +0 -298
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/handlebars@4.7.8/node_modules/minimist/README.md +0 -121
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/handlebars@4.7.8/node_modules/neo-async/README.md +0 -273
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/handlebars@4.7.8/node_modules/source-map/CHANGELOG.md +0 -301
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/handlebars@4.7.8/node_modules/source-map/README.md +0 -742
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/handlebars@4.7.8/node_modules/uglify-js/README.md +0 -1479
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/minipass@3.3.6/node_modules/yallist/README.md +0 -204
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/minipass@5.0.0/node_modules/minipass/README.md +0 -769
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/minizlib@2.1.2/node_modules/minizlib/README.md +0 -60
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp/CHANGELOG.md +0 -15
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/mlly@1.8.0/node_modules/ufo/README.md +0 -466
- django_cfg-1.1.81/django_sample/node_modules/.pnpm/node_modules/tinyexec/README.md +0 -256
- django_cfg-1.1.81/django_sample/node_modules/@hey-api/json-schema-ref-parser/README.md +0 -138
- django_cfg-1.1.81/django_sample/node_modules/@jsdevtools/ono/CHANGELOG.md +0 -122
- django_cfg-1.1.81/django_sample/node_modules/@jsdevtools/ono/README.md +0 -392
- django_cfg-1.1.81/django_sample/node_modules/@types/json-schema/README.md +0 -15
- django_cfg-1.1.81/django_sample/node_modules/acorn/CHANGELOG.md +0 -954
- django_cfg-1.1.81/django_sample/node_modules/acorn/README.md +0 -282
- django_cfg-1.1.81/django_sample/node_modules/ansi-colors/README.md +0 -315
- django_cfg-1.1.81/django_sample/node_modules/argparse/CHANGELOG.md +0 -216
- django_cfg-1.1.81/django_sample/node_modules/argparse/README.md +0 -84
- django_cfg-1.1.81/django_sample/node_modules/c12/README.md +0 -471
- django_cfg-1.1.81/django_sample/node_modules/chokidar/README.md +0 -305
- django_cfg-1.1.81/django_sample/node_modules/chownr/README.md +0 -3
- django_cfg-1.1.81/django_sample/node_modules/citty/README.md +0 -134
- django_cfg-1.1.81/django_sample/node_modules/color-support/README.md +0 -129
- django_cfg-1.1.81/django_sample/node_modules/confbox/README.md +0 -191
- django_cfg-1.1.81/django_sample/node_modules/consola/README.md +0 -352
- django_cfg-1.1.81/django_sample/node_modules/defu/README.md +0 -171
- django_cfg-1.1.81/django_sample/node_modules/destr/README.md +0 -132
- django_cfg-1.1.81/django_sample/node_modules/dotenv/CHANGELOG.md +0 -520
- django_cfg-1.1.81/django_sample/node_modules/dotenv/README.md +0 -645
- django_cfg-1.1.81/django_sample/node_modules/fs-minipass/README.md +0 -70
- django_cfg-1.1.81/django_sample/node_modules/fs-minipass/node_modules/minipass/README.md +0 -728
- django_cfg-1.1.81/django_sample/node_modules/giget/README.md +0 -248
- django_cfg-1.1.81/django_sample/node_modules/giget/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/django_sample/node_modules/jiti/README.md +0 -243
- django_cfg-1.1.81/django_sample/node_modules/js-yaml/CHANGELOG.md +0 -616
- django_cfg-1.1.81/django_sample/node_modules/js-yaml/README.md +0 -246
- django_cfg-1.1.81/django_sample/node_modules/lodash/README.md +0 -39
- django_cfg-1.1.81/django_sample/node_modules/minimist/CHANGELOG.md +0 -298
- django_cfg-1.1.81/django_sample/node_modules/minimist/README.md +0 -121
- django_cfg-1.1.81/django_sample/node_modules/minipass/README.md +0 -769
- django_cfg-1.1.81/django_sample/node_modules/minizlib/README.md +0 -60
- django_cfg-1.1.81/django_sample/node_modules/minizlib/node_modules/minipass/README.md +0 -728
- django_cfg-1.1.81/django_sample/node_modules/mkdirp/CHANGELOG.md +0 -15
- django_cfg-1.1.81/django_sample/node_modules/mlly/README.md +0 -561
- django_cfg-1.1.81/django_sample/node_modules/mlly/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/django_sample/node_modules/neo-async/README.md +0 -273
- django_cfg-1.1.81/django_sample/node_modules/node-fetch-native/README.md +0 -225
- django_cfg-1.1.81/django_sample/node_modules/nypm/README.md +0 -147
- django_cfg-1.1.81/django_sample/node_modules/nypm/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/django_sample/node_modules/ohash/README.md +0 -173
- django_cfg-1.1.81/django_sample/node_modules/pathe/README.md +0 -69
- django_cfg-1.1.81/django_sample/node_modules/perfect-debounce/README.md +0 -92
- django_cfg-1.1.81/django_sample/node_modules/pkg-types/README.md +0 -167
- django_cfg-1.1.81/django_sample/node_modules/pkg-types/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/django_sample/node_modules/rc9/README.md +0 -201
- django_cfg-1.1.81/django_sample/node_modules/readdirp/README.md +0 -120
- django_cfg-1.1.81/django_sample/node_modules/semver/README.md +0 -664
- django_cfg-1.1.81/django_sample/node_modules/source-map/CHANGELOG.md +0 -301
- django_cfg-1.1.81/django_sample/node_modules/source-map/README.md +0 -742
- django_cfg-1.1.81/django_sample/node_modules/tar/README.md +0 -1080
- django_cfg-1.1.81/django_sample/node_modules/tinyexec/README.md +0 -256
- django_cfg-1.1.81/django_sample/node_modules/typescript/README.md +0 -50
- django_cfg-1.1.81/django_sample/node_modules/ufo/README.md +0 -466
- django_cfg-1.1.81/django_sample/node_modules/uglify-js/README.md +0 -1479
- django_cfg-1.1.81/django_sample/node_modules/yallist/README.md +0 -204
- django_cfg-1.1.81/node_modules/.ignored/@hey-api/openapi-ts/README.md +0 -347
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/@hey-api/json-schema-ref-parser/README.md +0 -138
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/@jsdevtools/ono/CHANGELOG.md +0 -122
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/@jsdevtools/ono/README.md +0 -392
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/@types/json-schema/README.md +0 -15
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/js-yaml/CHANGELOG.md +0 -616
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/js-yaml/README.md +0 -246
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+json-schema-ref-parser@1.0.6/node_modules/lodash/README.md +0 -39
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/@hey-api/openapi-ts/README.md +0 -347
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/ansi-colors/README.md +0 -315
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/c12/README.md +0 -471
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/color-support/README.md +0 -129
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/semver/README.md +0 -664
- django_cfg-1.1.81/node_modules/.pnpm/@hey-api+openapi-ts@0.80.18_typescript@5.9.2/node_modules/typescript/README.md +0 -50
- django_cfg-1.1.81/node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/CHANGELOG.md +0 -954
- django_cfg-1.1.81/node_modules/.pnpm/acorn@8.15.0/node_modules/acorn/README.md +0 -282
- django_cfg-1.1.81/node_modules/.pnpm/argparse@2.0.1/node_modules/argparse/CHANGELOG.md +0 -216
- django_cfg-1.1.81/node_modules/.pnpm/argparse@2.0.1/node_modules/argparse/README.md +0 -84
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/chokidar/README.md +0 -305
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/confbox/README.md +0 -191
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/defu/README.md +0 -171
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/dotenv/CHANGELOG.md +0 -520
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/dotenv/README.md +0 -645
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/giget/README.md +0 -248
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/jiti/README.md +0 -243
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/mlly/README.md +0 -561
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/ohash/README.md +0 -173
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/pathe/README.md +0 -69
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/perfect-debounce/README.md +0 -92
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/pkg-types/README.md +0 -167
- django_cfg-1.1.81/node_modules/.pnpm/c12@2.0.1/node_modules/rc9/README.md +0 -201
- django_cfg-1.1.81/node_modules/.pnpm/chokidar@4.0.3/node_modules/readdirp/README.md +0 -120
- django_cfg-1.1.81/node_modules/.pnpm/chownr@2.0.0/node_modules/chownr/README.md +0 -3
- django_cfg-1.1.81/node_modules/.pnpm/citty@0.1.6/node_modules/citty/README.md +0 -134
- django_cfg-1.1.81/node_modules/.pnpm/citty@0.1.6/node_modules/consola/README.md +0 -352
- django_cfg-1.1.81/node_modules/.pnpm/destr@2.0.5/node_modules/destr/README.md +0 -132
- django_cfg-1.1.81/node_modules/.pnpm/fs-minipass@2.1.0/node_modules/fs-minipass/README.md +0 -70
- django_cfg-1.1.81/node_modules/.pnpm/fs-minipass@2.1.0/node_modules/minipass/README.md +0 -728
- django_cfg-1.1.81/node_modules/.pnpm/giget@1.2.5/node_modules/node-fetch-native/README.md +0 -225
- django_cfg-1.1.81/node_modules/.pnpm/giget@1.2.5/node_modules/nypm/README.md +0 -147
- django_cfg-1.1.81/node_modules/.pnpm/giget@1.2.5/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/node_modules/.pnpm/giget@1.2.5/node_modules/tar/README.md +0 -1080
- django_cfg-1.1.81/node_modules/.pnpm/handlebars@4.7.8/node_modules/minimist/CHANGELOG.md +0 -298
- django_cfg-1.1.81/node_modules/.pnpm/handlebars@4.7.8/node_modules/minimist/README.md +0 -121
- django_cfg-1.1.81/node_modules/.pnpm/handlebars@4.7.8/node_modules/neo-async/README.md +0 -273
- django_cfg-1.1.81/node_modules/.pnpm/handlebars@4.7.8/node_modules/source-map/CHANGELOG.md +0 -301
- django_cfg-1.1.81/node_modules/.pnpm/handlebars@4.7.8/node_modules/source-map/README.md +0 -742
- django_cfg-1.1.81/node_modules/.pnpm/handlebars@4.7.8/node_modules/uglify-js/README.md +0 -1479
- django_cfg-1.1.81/node_modules/.pnpm/minipass@3.3.6/node_modules/yallist/README.md +0 -204
- django_cfg-1.1.81/node_modules/.pnpm/minipass@5.0.0/node_modules/minipass/README.md +0 -769
- django_cfg-1.1.81/node_modules/.pnpm/minizlib@2.1.2/node_modules/minizlib/README.md +0 -60
- django_cfg-1.1.81/node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp/CHANGELOG.md +0 -15
- django_cfg-1.1.81/node_modules/.pnpm/mlly@1.8.0/node_modules/ufo/README.md +0 -466
- django_cfg-1.1.81/node_modules/.pnpm/node_modules/tinyexec/README.md +0 -256
- django_cfg-1.1.81/node_modules/@hey-api/json-schema-ref-parser/README.md +0 -138
- django_cfg-1.1.81/node_modules/@jsdevtools/ono/CHANGELOG.md +0 -122
- django_cfg-1.1.81/node_modules/@jsdevtools/ono/README.md +0 -392
- django_cfg-1.1.81/node_modules/@types/json-schema/README.md +0 -15
- django_cfg-1.1.81/node_modules/acorn/CHANGELOG.md +0 -954
- django_cfg-1.1.81/node_modules/acorn/README.md +0 -282
- django_cfg-1.1.81/node_modules/ansi-colors/README.md +0 -315
- django_cfg-1.1.81/node_modules/argparse/CHANGELOG.md +0 -216
- django_cfg-1.1.81/node_modules/argparse/README.md +0 -84
- django_cfg-1.1.81/node_modules/c12/README.md +0 -471
- django_cfg-1.1.81/node_modules/chokidar/README.md +0 -305
- django_cfg-1.1.81/node_modules/chownr/README.md +0 -3
- django_cfg-1.1.81/node_modules/citty/README.md +0 -134
- django_cfg-1.1.81/node_modules/color-support/README.md +0 -129
- django_cfg-1.1.81/node_modules/confbox/README.md +0 -191
- django_cfg-1.1.81/node_modules/consola/README.md +0 -352
- django_cfg-1.1.81/node_modules/defu/README.md +0 -171
- django_cfg-1.1.81/node_modules/destr/README.md +0 -132
- django_cfg-1.1.81/node_modules/dotenv/CHANGELOG.md +0 -520
- django_cfg-1.1.81/node_modules/dotenv/README.md +0 -645
- django_cfg-1.1.81/node_modules/fs-minipass/README.md +0 -70
- django_cfg-1.1.81/node_modules/fs-minipass/node_modules/minipass/README.md +0 -728
- django_cfg-1.1.81/node_modules/giget/README.md +0 -248
- django_cfg-1.1.81/node_modules/giget/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/node_modules/jiti/README.md +0 -243
- django_cfg-1.1.81/node_modules/js-yaml/CHANGELOG.md +0 -616
- django_cfg-1.1.81/node_modules/js-yaml/README.md +0 -246
- django_cfg-1.1.81/node_modules/lodash/README.md +0 -39
- django_cfg-1.1.81/node_modules/minimist/CHANGELOG.md +0 -298
- django_cfg-1.1.81/node_modules/minimist/README.md +0 -121
- django_cfg-1.1.81/node_modules/minipass/README.md +0 -769
- django_cfg-1.1.81/node_modules/minizlib/README.md +0 -60
- django_cfg-1.1.81/node_modules/minizlib/node_modules/minipass/README.md +0 -728
- django_cfg-1.1.81/node_modules/mkdirp/CHANGELOG.md +0 -15
- django_cfg-1.1.81/node_modules/mlly/README.md +0 -561
- django_cfg-1.1.81/node_modules/mlly/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/node_modules/neo-async/README.md +0 -273
- django_cfg-1.1.81/node_modules/node-fetch-native/README.md +0 -225
- django_cfg-1.1.81/node_modules/nypm/README.md +0 -147
- django_cfg-1.1.81/node_modules/nypm/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/node_modules/ohash/README.md +0 -173
- django_cfg-1.1.81/node_modules/pathe/README.md +0 -69
- django_cfg-1.1.81/node_modules/perfect-debounce/README.md +0 -92
- django_cfg-1.1.81/node_modules/pkg-types/README.md +0 -167
- django_cfg-1.1.81/node_modules/pkg-types/node_modules/pathe/README.md +0 -73
- django_cfg-1.1.81/node_modules/rc9/README.md +0 -201
- django_cfg-1.1.81/node_modules/readdirp/README.md +0 -120
- django_cfg-1.1.81/node_modules/semver/README.md +0 -664
- django_cfg-1.1.81/node_modules/source-map/CHANGELOG.md +0 -301
- django_cfg-1.1.81/node_modules/source-map/README.md +0 -742
- django_cfg-1.1.81/node_modules/tar/README.md +0 -1080
- django_cfg-1.1.81/node_modules/tinyexec/README.md +0 -256
- django_cfg-1.1.81/node_modules/typescript/README.md +0 -50
- django_cfg-1.1.81/node_modules/ufo/README.md +0 -466
- django_cfg-1.1.81/node_modules/uglify-js/README.md +0 -1479
- django_cfg-1.1.81/node_modules/yallist/README.md +0 -204
- django_cfg-1.1.81/scripts/README.md +0 -136
- django_cfg-1.1.81/src/django_cfg/apps/tasks/@docs/README.md +0 -195
- {django_cfg-1.1.81 → django_cfg-1.1.82}/.gitignore +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/LICENSE +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/requirements-dev.txt +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/requirements-test.txt +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/requirements.txt +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/activity.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/filters.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/group.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/inlines.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/otp.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/registration_source.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/resources.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/twilio_response.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/admin/user.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/apps.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/management/commands/test_otp.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/managers/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/managers/user_manager.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/migrations/0001_initial.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/migrations/0003_twilioresponse.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/migrations/0004_delete_twilioresponse.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/migrations/0005_twilioresponse.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/migrations/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/models.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/serializers/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/serializers/otp.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/serializers/profile.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/serializers/webhook.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/services/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/services/activity_service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/services/otp_service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/signals.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/templates/emails/base_email.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/templates/emails/base_email.txt +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/templates/emails/otp_email.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/templates/emails/otp_email.txt +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/templates/emails/welcome_email.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/templates/emails/welcome_email.txt +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/utils/notifications.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/views/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/views/otp.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/views/profile.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/accounts/views/webhook.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/api/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/api/commands/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/api/commands/urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/api/commands/views.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/api/health/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/api/health/urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/api/health/views.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/admin/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/admin/leads_admin.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/admin/resources.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/apps.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/migrations/0001_initial.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/migrations/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/models.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/serializers.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/signals.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/tests.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/leads/views.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/admin/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/admin/filters.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/admin/newsletter_admin.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/admin/resources.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/apps.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/management/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/management/commands/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/managers/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/managers/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/migrations/0001_initial.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/migrations/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/models.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/serializers.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/services/email_service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/signals.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/utils/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/views/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/views/campaigns.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/views/emails.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/views/newsletters.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/views/subscriptions.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/newsletter/views/tracking.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/admin/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/admin/filters.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/admin/resources.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/admin/support_admin.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/apps.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/managers/message_manager.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/managers/ticket_manager.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/migrations/0001_initial.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/migrations/0002_alter_message_ticket.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/migrations/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/models.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/serializers.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/signals.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/templates/support/chat/access_denied.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/templates/support/chat/ticket_chat.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/utils/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/utils/support_email_service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/views/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/views/admin.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/views/api.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/support/views/chat.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/admin.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/apps.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/serializers.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/static/tasks/js/api.js +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/static/tasks/js/modals.js +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/static/tasks/js/theme.js +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/base.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/status_cards.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/tasks/views.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps/urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/apps.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/archive/django_sample.zip +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/cli/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/cli/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/cli/commands/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/cli/commands/create_project.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/cli/commands/info.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/cli/main.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/cli/utils.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/core/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/core/config.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/core/environment.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/core/generation.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/core/validation.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/exceptions.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/integration.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/check_settings.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/clear_constance.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/create_token.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/generate.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/list_urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/migrate_all.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/migrator.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/rundramatiq.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/runserver_ngrok.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/script.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/show_config.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/show_urls.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/superuser.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/task_clear.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/task_status.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/test_email.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/test_telegram.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/test_twilio.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/tree.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/management/commands/validate_config.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/middleware/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/middleware/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/middleware/public_endpoints.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/middleware/user_activity.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/cache.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/constance.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/database.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/drf.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/jwt.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/limits.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/ngrok.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/revolution.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/services.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/tasks.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/models/unfold.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/base.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_currency/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_currency/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_currency/cache.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_currency/converter.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_currency/service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_email.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/example.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/llm/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/llm/cache.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/llm/client.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/llm/costs.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/llm/extractor.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/llm/models.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/llm/models_cache.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/llm/tokenizer.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/translator/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/translator/cache.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_llm/translator/translator.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_logger.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_ngrok.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_tasks.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_telegram.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/README.md +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/exceptions.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/models.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/sendgrid_service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/simple_service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/templates/sendgrid_test_data.json +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/django_twilio/twilio_service.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/dramatiq_setup.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/logger.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/unfold/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/unfold/callbacks.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/unfold/dashboard.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/unfold/models.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/unfold/system_monitor.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/modules/unfold/tailwind.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/pyproject.toml +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/routers.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/constance/change_list.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/constance/includes/default_value.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/constance/includes/fieldset_header.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/constance/includes/results_list.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/constance/includes/setting_row.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/constance/includes/table_headers.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/index.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/charts_section.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/django_commands.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/quick_actions.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/recent_activity.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/stats_cards.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/system_health.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/system_metrics.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/components/user_permissions.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/admin/snippets/zones/zones_table.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/templates/emails/base_email.html +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/utils/__init__.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/utils/path_resolution.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/utils/smart_defaults.py +0 -0
- {django_cfg-1.1.81 → django_cfg-1.1.82}/src/django_cfg/version_check.py +0 -0
@@ -1,3 +1,7 @@
|
|
1
|
+
# Exclude all markdown files except main README.md and CHANGELOG.md
|
2
|
+
recursive-exclude * *.md
|
3
|
+
include README.md
|
4
|
+
include CHANGELOG.md
|
1
5
|
include LICENSE
|
2
6
|
include MANIFEST.in
|
3
7
|
include requirements*.txt
|
@@ -37,9 +41,4 @@ exclude .gitignore
|
|
37
41
|
# Exclude Node.js files
|
38
42
|
exclude package*.json
|
39
43
|
exclude yarn*.lock
|
40
|
-
recursive-exclude node_modules *
|
41
|
-
|
42
|
-
# Exclude all markdown files except main README.md and CHANGELOG.md
|
43
|
-
recursive-exclude * *.md
|
44
|
-
include README.md
|
45
|
-
include CHANGELOG.md
|
44
|
+
recursive-exclude node_modules *
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: django-cfg
|
3
|
-
Version: 1.1.
|
3
|
+
Version: 1.1.82
|
4
4
|
Summary: 🚀 Production-ready Django configuration framework with type-safe settings, smart automation, and modern developer experience
|
5
5
|
Project-URL: Homepage, https://github.com/markolofsen/django-cfg
|
6
6
|
Project-URL: Documentation, https://django-cfg.readthedocs.io
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "django-cfg"
|
7
|
-
version = "1.1.
|
7
|
+
version = "1.1.82"
|
8
8
|
description = "🚀 Production-ready Django configuration framework with type-safe settings, smart automation, and modern developer experience"
|
9
9
|
readme = "README.md"
|
10
10
|
license = {text = "MIT"}
|
@@ -194,10 +194,7 @@ django-cfg = "django_cfg.cli.main:main"
|
|
194
194
|
packages = ["src/django_cfg"]
|
195
195
|
exclude = [
|
196
196
|
"django_sample", # Exclude django_sample directory (use archive instead)
|
197
|
-
"scripts/",
|
198
|
-
"**/*.md", # Exclude all markdown files from wheel
|
199
|
-
"!README.md", # But include main README.md
|
200
|
-
"!CHANGELOG.md", # But include CHANGELOG.md
|
197
|
+
"scripts/", # Exclude scripts from wheel package
|
201
198
|
]
|
202
199
|
|
203
200
|
[tool.hatch.metadata]
|
@@ -218,10 +215,7 @@ exclude = [
|
|
218
215
|
"scripts", # Exclude development scripts
|
219
216
|
"*.log",
|
220
217
|
".env*",
|
221
|
-
"django_sample",
|
222
|
-
"**/*.md", # Exclude all markdown files
|
223
|
-
"!README.md", # But include main README.md
|
224
|
-
"!CHANGELOG.md", # But include CHANGELOG.md
|
218
|
+
"django_sample", # Exclude django_sample directory (use archive instead)
|
225
219
|
]
|
226
220
|
|
227
221
|
# Black configuration
|
@@ -38,7 +38,7 @@ default_app_config = "django_cfg.apps.DjangoCfgConfig"
|
|
38
38
|
from typing import TYPE_CHECKING
|
39
39
|
|
40
40
|
# Version information
|
41
|
-
__version__ = "1.1.
|
41
|
+
__version__ = "1.1.82"
|
42
42
|
__author__ = "Unrealos Team"
|
43
43
|
__email__ = "info@unrealos.com"
|
44
44
|
__license__ = "MIT"
|
@@ -0,0 +1,266 @@
|
|
1
|
+
# 🚀 Django CFG Twilio Integration - Complete Setup Guide
|
2
|
+
|
3
|
+
## 📋 Overview
|
4
|
+
|
5
|
+
Django CFG Twilio provides seamless integration for:
|
6
|
+
- 📱 **WhatsApp OTP** via Twilio Verify API
|
7
|
+
- 📱 **SMS OTP** via Twilio Verify API
|
8
|
+
- 📧 **Email OTP** via SendGrid
|
9
|
+
- 🔧 **Testing Suite** with management commands
|
10
|
+
- 📧 **HTML Email Templates** with customization
|
11
|
+
|
12
|
+
## 🛠️ Quick Setup (5 minutes)
|
13
|
+
|
14
|
+
### 1. Install Dependencies
|
15
|
+
```bash
|
16
|
+
pip install django-cfg[twilio]
|
17
|
+
# or
|
18
|
+
poetry add django-cfg[twilio]
|
19
|
+
```
|
20
|
+
|
21
|
+
### 2. Configure Twilio Services
|
22
|
+
|
23
|
+
#### A. Create Twilio Verify Service
|
24
|
+
1. Go to [Twilio Console > Verify > Services](https://console.twilio.com/us1/develop/verify/services)
|
25
|
+
2. Click **Create new Service**
|
26
|
+
3. Name: `YourApp OTP Service`
|
27
|
+
4. **Enable channels**: WhatsApp ✅, SMS ✅
|
28
|
+
5. Copy the **Service SID** (starts with `VA...`)
|
29
|
+
|
30
|
+
#### B. Get SendGrid API Key (Optional)
|
31
|
+
1. Go to [SendGrid Console > API Keys](https://app.sendgrid.com/settings/api_keys)
|
32
|
+
2. Create new API key with **Mail Send** permissions
|
33
|
+
3. Copy the API key (starts with `SG.`)
|
34
|
+
|
35
|
+
### 3. Update Configuration Files
|
36
|
+
|
37
|
+
#### `config.dev.yaml`
|
38
|
+
```yaml
|
39
|
+
twilio:
|
40
|
+
account_sid: "AC_YOUR_ACCOUNT_SID"
|
41
|
+
auth_token: "YOUR_AUTH_TOKEN"
|
42
|
+
whatsapp_from: "+14155238886" # Twilio sandbox
|
43
|
+
sms_from: "+YOUR_SMS_NUMBER"
|
44
|
+
sendgrid_api_key: "SG.YOUR_SENDGRID_API_KEY"
|
45
|
+
verify_service_sid: "VA_YOUR_VERIFY_SERVICE_SID"
|
46
|
+
```
|
47
|
+
|
48
|
+
#### `config.py`
|
49
|
+
```python
|
50
|
+
from django_cfg.modules.django_twilio.models import SendGridConfig, TwilioVerifyConfig, TwilioChannelType
|
51
|
+
|
52
|
+
class YourProjectConfig(DjangoConfig):
|
53
|
+
# Admin emails for testing
|
54
|
+
admin_emails: List[str] = ["admin@yourdomain.com"]
|
55
|
+
|
56
|
+
# Twilio configuration
|
57
|
+
twilio: Optional[TwilioConfig] = TwilioConfig(
|
58
|
+
account_sid=env.twilio.account_sid,
|
59
|
+
auth_token=SecretStr(env.twilio.auth_token),
|
60
|
+
|
61
|
+
# Verify API for OTP
|
62
|
+
verify=TwilioVerifyConfig(
|
63
|
+
service_sid=env.twilio.verify_service_sid,
|
64
|
+
service_name=env.app.name,
|
65
|
+
default_channel=TwilioChannelType.WHATSAPP,
|
66
|
+
fallback_channels=[TwilioChannelType.SMS],
|
67
|
+
code_length=6,
|
68
|
+
ttl_seconds=600, # 10 minutes
|
69
|
+
max_attempts=5,
|
70
|
+
) if env.twilio.verify_service_sid else None,
|
71
|
+
|
72
|
+
# SendGrid for email
|
73
|
+
sendgrid=SendGridConfig(
|
74
|
+
api_key=SecretStr(env.twilio.sendgrid_api_key),
|
75
|
+
from_email="noreply@yourdomain.com",
|
76
|
+
from_name=env.app.name,
|
77
|
+
default_subject=f"Your {env.app.name} verification code",
|
78
|
+
) if env.twilio.sendgrid_api_key else None,
|
79
|
+
) if env.twilio.account_sid and env.twilio.auth_token else None
|
80
|
+
```
|
81
|
+
|
82
|
+
## 🧪 Testing Everything
|
83
|
+
|
84
|
+
### Quick Test Command
|
85
|
+
```bash
|
86
|
+
# Test all services
|
87
|
+
python manage.py test_twilio --mode=all
|
88
|
+
|
89
|
+
# Test OTP only
|
90
|
+
python manage.py test_twilio --mode=test-otp --phone="+1234567890"
|
91
|
+
|
92
|
+
# Interactive mode
|
93
|
+
python manage.py test_twilio --interactive
|
94
|
+
|
95
|
+
# Check configuration
|
96
|
+
python manage.py test_twilio --mode=setup
|
97
|
+
```
|
98
|
+
|
99
|
+
### Expected Output
|
100
|
+
```
|
101
|
+
🚀 Django CFG Twilio Test Suite
|
102
|
+
==================================================
|
103
|
+
📧 Using admin email from config: admin@yourdomain.com
|
104
|
+
|
105
|
+
🔧 Configuration Check
|
106
|
+
------------------------------
|
107
|
+
✅ Admin emails configured
|
108
|
+
✅ Twilio configuration found
|
109
|
+
✅ Verify API configured
|
110
|
+
✅ SendGrid configured
|
111
|
+
✅ Email configuration found
|
112
|
+
|
113
|
+
🔐 Testing OTP Functionality
|
114
|
+
------------------------------
|
115
|
+
📱 Testing WhatsApp OTP to +1234567890...
|
116
|
+
✅ OTP sent via WhatsApp to ***7890
|
117
|
+
|
118
|
+
📧 Testing Email OTP to admin@yourdomain.com...
|
119
|
+
✅ Email OTP sent (code: 123456)
|
120
|
+
|
121
|
+
🎉 All tests completed!
|
122
|
+
```
|
123
|
+
|
124
|
+
## 🔌 API Usage
|
125
|
+
|
126
|
+
### Basic OTP Request
|
127
|
+
```python
|
128
|
+
from django_cfg.modules.django_twilio import send_whatsapp_otp, verify_otp
|
129
|
+
|
130
|
+
# Send WhatsApp OTP
|
131
|
+
success, message = send_whatsapp_otp("+1234567890")
|
132
|
+
|
133
|
+
# Verify OTP
|
134
|
+
is_valid, message = verify_otp("+1234567890", "123456")
|
135
|
+
```
|
136
|
+
|
137
|
+
### Email OTP
|
138
|
+
```python
|
139
|
+
from django_cfg.modules.django_twilio import send_otp_email
|
140
|
+
|
141
|
+
# Send email OTP
|
142
|
+
success, message, otp_code = send_otp_email("user@example.com")
|
143
|
+
```
|
144
|
+
|
145
|
+
### REST API Endpoints
|
146
|
+
```bash
|
147
|
+
# Request OTP
|
148
|
+
curl -X POST http://localhost:8000/api/accounts/otp/request/ \
|
149
|
+
-H "Content-Type: application/json" \
|
150
|
+
-d '{"identifier": "+1234567890", "channel": "phone"}'
|
151
|
+
|
152
|
+
# Verify OTP
|
153
|
+
curl -X POST http://localhost:8000/api/accounts/otp/verify/ \
|
154
|
+
-H "Content-Type: application/json" \
|
155
|
+
-d '{"identifier": "+1234567890", "otp": "123456", "channel": "phone"}'
|
156
|
+
```
|
157
|
+
|
158
|
+
## 📧 Email Templates
|
159
|
+
|
160
|
+
### Template Structure
|
161
|
+
```
|
162
|
+
django_cfg/modules/django_twilio/templates/
|
163
|
+
├── email_otp_template.html # Main HTML template
|
164
|
+
├── email_otp_test_data.json # Test data
|
165
|
+
└── email_otp_rendered.html # Generated preview
|
166
|
+
```
|
167
|
+
|
168
|
+
### Template Variables
|
169
|
+
- `{{app_name}}` - Your app name
|
170
|
+
- `{{user_name}}` - User's name
|
171
|
+
- `{{otp_code}}` - 6-digit OTP code
|
172
|
+
- `{{otp_link}}` - Verification link
|
173
|
+
- `{{expires_minutes}}` - Expiry time
|
174
|
+
|
175
|
+
### Generate Templates
|
176
|
+
```bash
|
177
|
+
python manage.py test_twilio --mode=generate-templates
|
178
|
+
```
|
179
|
+
|
180
|
+
## 🚨 Troubleshooting
|
181
|
+
|
182
|
+
### Common Issues
|
183
|
+
|
184
|
+
#### 1. WhatsApp Not Working
|
185
|
+
```
|
186
|
+
❌ Error: Unable to create record: Delivery channel disabled: WHATSAPP
|
187
|
+
```
|
188
|
+
**Solution**: Enable WhatsApp channel in [Twilio Console > Verify > Services](https://console.twilio.com/us1/develop/verify/services)
|
189
|
+
|
190
|
+
#### 2. SMS to International Numbers
|
191
|
+
```
|
192
|
+
❌ Error: Message cannot be sent with current 'To' and 'From' parameters
|
193
|
+
```
|
194
|
+
**Solution**: Use Verify API (automatic) or upgrade Twilio account for international SMS
|
195
|
+
|
196
|
+
#### 3. SendGrid Not Working
|
197
|
+
```
|
198
|
+
❌ Error: SendGrid configuration not found
|
199
|
+
```
|
200
|
+
**Solution**: Add `sendgrid_api_key` to your YAML config and enable in `config.py`
|
201
|
+
|
202
|
+
#### 4. Email Not Sending
|
203
|
+
```
|
204
|
+
❌ Error: Email backend not configured
|
205
|
+
```
|
206
|
+
**Solution**: Check email configuration in `config.py` and ensure SMTP settings are correct
|
207
|
+
|
208
|
+
### Debug Mode
|
209
|
+
```python
|
210
|
+
# Enable detailed logging
|
211
|
+
twilio: TwilioConfig = TwilioConfig(
|
212
|
+
debug_logging=True, # Shows all API requests/responses
|
213
|
+
test_mode=True, # Uses test credentials
|
214
|
+
)
|
215
|
+
```
|
216
|
+
|
217
|
+
## 📱 Production Checklist
|
218
|
+
|
219
|
+
### Before Going Live:
|
220
|
+
|
221
|
+
#### Twilio Setup
|
222
|
+
- [ ] **Account verified** and upgraded from trial
|
223
|
+
- [ ] **Phone numbers verified** for SMS
|
224
|
+
- [ ] **WhatsApp Business approved** (if using production WhatsApp)
|
225
|
+
- [ ] **Verify Service** created and channels enabled
|
226
|
+
- [ ] **Webhook URLs** configured (optional)
|
227
|
+
|
228
|
+
#### SendGrid Setup
|
229
|
+
- [ ] **Domain authentication** completed
|
230
|
+
- [ ] **Sender identity** verified
|
231
|
+
- [ ] **API key** with proper permissions
|
232
|
+
- [ ] **Email templates** tested and approved
|
233
|
+
|
234
|
+
#### Security
|
235
|
+
- [ ] **Environment variables** for sensitive data
|
236
|
+
- [ ] **Rate limiting** configured
|
237
|
+
- [ ] **Admin emails** updated for production
|
238
|
+
- [ ] **Error monitoring** setup (Sentry, etc.)
|
239
|
+
|
240
|
+
#### Testing
|
241
|
+
- [ ] **All OTP channels** tested with real numbers
|
242
|
+
- [ ] **Email delivery** tested with real addresses
|
243
|
+
- [ ] **Error handling** tested with invalid inputs
|
244
|
+
- [ ] **Load testing** completed for expected volume
|
245
|
+
|
246
|
+
## 🔗 Useful Links
|
247
|
+
|
248
|
+
- [Twilio Console](https://console.twilio.com/)
|
249
|
+
- [Twilio Verify API Docs](https://www.twilio.com/docs/verify/api)
|
250
|
+
- [SendGrid Console](https://app.sendgrid.com/)
|
251
|
+
- [Django CFG Documentation](https://github.com/your-repo/django-cfg)
|
252
|
+
|
253
|
+
## 💡 Pro Tips
|
254
|
+
|
255
|
+
1. **Use Verify API** for professional OTP instead of custom solutions
|
256
|
+
2. **Enable both WhatsApp and SMS** for better delivery rates
|
257
|
+
3. **Test with real numbers** in different countries
|
258
|
+
4. **Monitor delivery rates** in Twilio Console
|
259
|
+
5. **Use admin_emails** for easy testing configuration
|
260
|
+
6. **Keep templates simple** for better email client compatibility
|
261
|
+
|
262
|
+
---
|
263
|
+
|
264
|
+
🎉 **You're all set!** Your Django CFG Twilio integration is ready for production use.
|
265
|
+
|
266
|
+
For support, check the troubleshooting section or create an issue on GitHub.
|
@@ -1,153 +0,0 @@
|
|
1
|
-
# 🎭 Dramatiq Integration for Django-CFG
|
2
|
-
|
3
|
-
## 📚 Documentation Index
|
4
|
-
|
5
|
-
This directory contains comprehensive documentation for Dramatiq integration in Django-CFG.
|
6
|
-
|
7
|
-
### 📖 Available Documents
|
8
|
-
|
9
|
-
| Document | Description | Target Audience |
|
10
|
-
|----------|-------------|-----------------|
|
11
|
-
| **[DRAMATIQ_INTEGRATION.md](./DRAMATIQ_INTEGRATION.md)** | Complete technical documentation following @DOCS_MODULE.md methodology | Developers, Architects |
|
12
|
-
| **[IMPLEMENTATION_PLAN.md](./IMPLEMENTATION_PLAN.md)** | Detailed 6-week implementation roadmap | Project Managers, Developers |
|
13
|
-
| **[EXAMPLES.md](./EXAMPLES.md)** | Real-world usage examples and patterns | Developers, DevOps |
|
14
|
-
|
15
|
-
## 🎯 Quick Navigation
|
16
|
-
|
17
|
-
### For Developers
|
18
|
-
- **Getting Started** → [DRAMATIQ_INTEGRATION.md#usage-examples](./DRAMATIQ_INTEGRATION.md#-usage-examples)
|
19
|
-
- **Configuration** → [DRAMATIQ_INTEGRATION.md#data-models](./DRAMATIQ_INTEGRATION.md#-data-models-pydantic-2--typescript)
|
20
|
-
- **Task Patterns** → [EXAMPLES.md#task-definition-examples](./EXAMPLES.md#-task-definition-examples)
|
21
|
-
- **Error Handling** → [EXAMPLES.md#error-handling-examples](./EXAMPLES.md#-error-handling-examples)
|
22
|
-
|
23
|
-
### For Project Managers
|
24
|
-
- **Implementation Timeline** → [IMPLEMENTATION_PLAN.md#timeline](./IMPLEMENTATION_PLAN.md#-timeline)
|
25
|
-
- **Resource Requirements** → [IMPLEMENTATION_PLAN.md#technical-implementation-details](./IMPLEMENTATION_PLAN.md#-technical-implementation-details)
|
26
|
-
- **Risk Assessment** → [IMPLEMENTATION_PLAN.md#risk-mitigation](./IMPLEMENTATION_PLAN.md#-risk-mitigation)
|
27
|
-
|
28
|
-
### For DevOps Engineers
|
29
|
-
- **Production Setup** → [EXAMPLES.md#management-commands-usage](./EXAMPLES.md#-management-commands-usage)
|
30
|
-
- **Monitoring** → [EXAMPLES.md#monitoring-and-observability](./EXAMPLES.md#-monitoring-and-observability)
|
31
|
-
- **Deployment** → [DRAMATIQ_INTEGRATION.md#production-considerations](./DRAMATIQ_INTEGRATION.md#priority-high-production-considerations)
|
32
|
-
|
33
|
-
## 🚀 Key Features
|
34
|
-
|
35
|
-
### ✅ What's Included
|
36
|
-
- **Zero Configuration** - Works out of the box with Redis
|
37
|
-
- **Type Safety** - Full Pydantic v2 validation
|
38
|
-
- **Production Ready** - Comprehensive middleware stack
|
39
|
-
- **Redis Reuse** - Leverages existing cache configuration
|
40
|
-
- **Optional Dependency** - Install only when needed
|
41
|
-
|
42
|
-
### 🎯 Use Cases
|
43
|
-
- **Background Tasks** - Email sending, report generation
|
44
|
-
- **Async Processing** - File uploads, data processing
|
45
|
-
- **Scheduled Jobs** - Cleanup tasks, periodic reports
|
46
|
-
- **High Reliability** - Payment processing, critical operations
|
47
|
-
|
48
|
-
## 📋 Implementation Status
|
49
|
-
|
50
|
-
| Component | Status | Documentation |
|
51
|
-
|-----------|--------|---------------|
|
52
|
-
| **Core Models** | 📝 Designed | [DRAMATIQ_INTEGRATION.md](./DRAMATIQ_INTEGRATION.md) |
|
53
|
-
| **Service Layer** | 📝 Designed | [DRAMATIQ_INTEGRATION.md](./DRAMATIQ_INTEGRATION.md) |
|
54
|
-
| **Django Integration** | 📝 Designed | [IMPLEMENTATION_PLAN.md](./IMPLEMENTATION_PLAN.md) |
|
55
|
-
| **Management Commands** | 📝 Designed | [EXAMPLES.md](./EXAMPLES.md) |
|
56
|
-
| **Testing Strategy** | 📝 Planned | [IMPLEMENTATION_PLAN.md](./IMPLEMENTATION_PLAN.md) |
|
57
|
-
| **Production Examples** | ✅ Complete | [EXAMPLES.md](./EXAMPLES.md) |
|
58
|
-
|
59
|
-
## 🔧 Quick Start
|
60
|
-
|
61
|
-
### 1. Installation
|
62
|
-
```bash
|
63
|
-
# Install Django-CFG with task support
|
64
|
-
pip install django-cfg[tasks]
|
65
|
-
```
|
66
|
-
|
67
|
-
### 2. Configuration
|
68
|
-
```python
|
69
|
-
# config.py
|
70
|
-
from django_cfg import DjangoConfig
|
71
|
-
from django_cfg.models.tasks import TaskConfig
|
72
|
-
|
73
|
-
class MyConfig(DjangoConfig):
|
74
|
-
project_name: str = "MyApp"
|
75
|
-
|
76
|
-
# Redis for cache + tasks
|
77
|
-
cache_default: CacheBackend = CacheBackend(redis_url="redis://localhost:6379/0")
|
78
|
-
|
79
|
-
# Enable tasks with zero configuration
|
80
|
-
tasks: TaskConfig = TaskConfig()
|
81
|
-
|
82
|
-
config = MyConfig()
|
83
|
-
```
|
84
|
-
|
85
|
-
### 3. Define Tasks
|
86
|
-
```python
|
87
|
-
# tasks.py
|
88
|
-
import dramatiq
|
89
|
-
|
90
|
-
@dramatiq.actor
|
91
|
-
def send_email(user_id: int):
|
92
|
-
# Task implementation
|
93
|
-
pass
|
94
|
-
```
|
95
|
-
|
96
|
-
### 4. Use Tasks
|
97
|
-
```python
|
98
|
-
# views.py
|
99
|
-
send_email.send(user.id) # Queue task
|
100
|
-
```
|
101
|
-
|
102
|
-
### 5. Run Workers
|
103
|
-
```bash
|
104
|
-
python manage.py rundramatiq
|
105
|
-
```
|
106
|
-
|
107
|
-
## 📊 Architecture Overview
|
108
|
-
|
109
|
-
```
|
110
|
-
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
111
|
-
│ Django-CFG │ │ Redis │ │ Dramatiq │
|
112
|
-
│ TaskConfig │───▶│ Message │◀───│ Workers │
|
113
|
-
│ │ │ Broker │ │ │
|
114
|
-
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
115
|
-
│ │ │
|
116
|
-
▼ ▼ ▼
|
117
|
-
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
118
|
-
│ Pydantic │ │ Queue │ │ Task │
|
119
|
-
│ Validation │ │ Management │ │ Execution │
|
120
|
-
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
121
|
-
```
|
122
|
-
|
123
|
-
## 🤝 Contributing
|
124
|
-
|
125
|
-
### Documentation Standards
|
126
|
-
- Follow [@DOCS_MODULE.md](../@docs.ai/DOCS_MODULE.md) methodology
|
127
|
-
- Keep files under 1000 lines
|
128
|
-
- Include working code examples
|
129
|
-
- Use AI-friendly markers (%%PRIORITY:HIGH%%, etc.)
|
130
|
-
|
131
|
-
### Code Standards
|
132
|
-
- Type hints for all functions
|
133
|
-
- Pydantic v2 for configuration
|
134
|
-
- Comprehensive error handling
|
135
|
-
- Production-ready defaults
|
136
|
-
|
137
|
-
## 📞 Support
|
138
|
-
|
139
|
-
### Issues and Questions
|
140
|
-
- **Technical Issues** → Create GitHub issue with `dramatiq` label
|
141
|
-
- **Configuration Help** → Check [EXAMPLES.md](./EXAMPLES.md)
|
142
|
-
- **Performance Issues** → See [Production Considerations](./DRAMATIQ_INTEGRATION.md#priority-high-production-considerations)
|
143
|
-
|
144
|
-
### Community Resources
|
145
|
-
- **Django-CFG Discussions** → GitHub Discussions
|
146
|
-
- **Dramatiq Documentation** → https://dramatiq.io/
|
147
|
-
- **Redis Documentation** → https://redis.io/documentation
|
148
|
-
|
149
|
-
---
|
150
|
-
|
151
|
-
**Made with ❤️ by the Django-CFG Team**
|
152
|
-
|
153
|
-
*Dramatiq Integration: Because background tasks should be simple, safe, and powerful.*
|