edX Automated Communication Engine (A.C.E.)
###########################################
|License: AGPL v3| |Python CI| |Publish package to PyPi| |Status| |pypi-badge| |travis-badge| |codecov-badge|
|doc-badge| |pyversions-badge|
Purpose
=======
The `automated communication engine <https://edx-ace.readthedocs.io/en/latest/>`_, A.C.E. for short, is a Django app
for messaging learners on the Open edX platform. This
app can be installed in any Open edX project, but has only been tested with ``edx-platform``. Email delivery
(via Sailthru and Django Email)
are the currently supported delivery channels. In the future we may add support for other delivery channels such as push
notifications.
Getting Started
===============
For instructions on starting local development, see `Getting Started <https://github.com/openedx/edx-ace/blob/master/docs/getting_started.rst>`_.
Getting Help
============
Documentation
-------------
See `the documentation`_. If you need more help see below.
.. _the documentation: https://edx-ace.readthedocs.io/en/latest/
More Help
----------
If you're having trouble, we have discussion forums at
https://discuss.openedx.org where you can connect with others in the
community.
Our real-time conversations are on Slack. You can request a `Slack
invitation`_, then join our `community Slack workspace`_.
For anything non-trivial, the best path is to open an issue in this
repository with as many details about the issue you are facing as you
can provide.
https://github.com/openedx/edx-ace/issues
For more information about these options, see the `Getting Help`_ page.
.. _Slack invitation: https://openedx.org/slack
.. _community Slack workspace: https://openedx.slack.com/
.. _Getting Help: https://openedx.org/getting-help
License
=======
The code in this repository is licensed under the AGPL 3.0 unless
otherwise noted.
Please see ``LICENSE.txt`` for details.
Contributing
============
Contributions are very welcome.
Please read `How To Contribute <https://openedx.org/r/how-to-contribute>`_ for details.
Even though they were written with ``edx-platform`` in mind, the guidelines
should be followed for Open edX code in general.
PR description template should be automatically applied if you are sending PR from github interface; otherwise you
can find it
at `PULL_REQUEST_TEMPLATE.md <https://github.com/openedx/edx-ace/blob/master/.github/PULL_REQUEST_TEMPLATE.md>`_
Issue report template should be automatically applied if you are sending it from github UI as well; otherwise you
can find it at `ISSUE_TEMPLATE.md <https://github.com/openedx/edx-ace/blob/master/.github/ISSUE_TEMPLATE.md>`_
The Open edX Code of Conduct
============================
All community members are expected to follow the `Open edX Code of Conduct`_.
.. _Open edX Code of Conduct: https://openedx.org/code-of-conduct/
People
======
The assigned maintainers for this component and other project details may be
found in `Backstage`_. Backstage pulls this data from the ``catalog-info.yaml``
file in this repo.
.. _Backstage: https://open-edx-backstage.herokuapp.com/catalog/default/component/edx-ace
Reporting Security Issues
=========================
Please do not report security issues in public. Please email security@openedx.org.
.. |pypi-badge| image:: https://img.shields.io/pypi/v/edx-ace.svg
:target: https://pypi.python.org/pypi/edx-ace/
:alt: PyPI
.. |travis-badge| image:: https://travis-ci.com/edx/edx-ace.svg?branch=master
:target: https://travis-ci.com/edx/edx-ace
:alt: Travis
.. |codecov-badge| image:: http://codecov.io/github/edx/edx-ace/coverage.svg?branch=master
:target: http://codecov.io/github/edx/edx-ace?branch=master
:alt: Codecov
.. |doc-badge| image:: https://readthedocs.org/projects/edx-ace/badge/?version=latest
:target: http://edx-ace.readthedocs.io/en/latest/
:alt: Documentation
.. |pyversions-badge| image:: https://img.shields.io/pypi/pyversions/edx-ace.svg
:target: https://pypi.python.org/pypi/edx-ace/
:alt: Supported Python versions
.. |license-badge| image:: https://img.shields.io/github/license/edx/edx-ace.svg
:target: https://github.com/openedx/edx-ace/blob/master/LICENSE.txt
:alt: License
.. |License: AGPL v3| image:: https://img.shields.io/badge/License-AGPL_v3-blue.svg
:target: https://www.gnu.org/licenses/agpl-3.0
.. |Python CI| image:: https://github.com/openedx/edx-ace/actions/workflows/ci.yml/badge.svg
:target: https://github.com/openedx/edx-ace/actions/workflows/ci.yml
.. |Publish package to PyPi| image:: https://github.com/openedx/edx-ace/actions/workflows/pypi-publish.yml/badge.svg
:target: https://github.com/openedx/edx-ace/actions/workflows/pypi-release.yml
.. |Status| image:: https://img.shields.io/badge/Status-Maintained-brightgreen
Change Log
----------
..
All enhancements and patches to edx_ace will be documented
in this file. It adheres to the structure of http://keepachangelog.com/ ,
but in reStructuredText instead of Markdown (for ease of incorporation into
Sphinx documentation and the PyPI description).
This project adheres to Semantic Versioning (http://semver.org/).
.. There should always be an "Unreleased" section for changes pending release.
Unreleased
~~~~~~~~~~
[1.8.0] - 2024-03-06
~~~~~~~~~~~~~~~~~~~~
* Added support for ``Python 3.12``
* Dropped support for ``Django 3.2``
[1.7.0] - 2023-07-21
~~~~~~~~~~~~~~~~~~~~
* Switch from ``edx-sphinx-theme`` to ``sphinx-book-theme`` since the former is
deprecated
* Added support for django 4.2
[1.6.1] - 2023-02-07
~~~~~~~~~~~~~~~~~~~~
* Updated code coverage target in https://github.com/openedx/edx-ace/pull/189
* Updated Python Requirements in https://github.com/openedx/edx-ace/pull/199
* **Full Changelog**: https://github.com/openedx/edx-ace/compare/v1.6.0...v1.6.1
[1.5.0] - 2022-02-15
~~~~~~~~~~~~~~~~~~~~
* Added support for Django40
* Removed support for Django22, 30 and 31
[1.4.1] - 2021-12-06
~~~~~~~~~~~~~~~~~~~~
* Adds in the ability to override frequency caps for Braze emails. Can be accessed via
Message options using the key ``override_frequency_capping``. All emails containing the
``transactional`` Message option will also override frequency caps.
[1.4.0] - 2021-11-08
~~~~~~~~~~~~~~~~~~~~
* Deprecate the action_links property
* Add a get_action_links method and template tag to allow passing arguments to action links
[1.3.1] - 2021-08-17
~~~~~~~~~~~~~~~~~~~~
* Adjust name ``handles_delivery_for_message`` to ``overrides_delivery_for_message``
[1.3.0] - 2021-08-16
~~~~~~~~~~~~~~~~~~~~
* New channel method ``handles_delivery_for_message`` for allowing a default channel
to claim a message, even if it would normally be delivered to the configured
transactional channel.
* Braze: Will handle any message defined in ``ACE_CHANNEL_BRAZE_CAMPAIGNS`` (using the
above new feature) to steal campaign messages from the transactional channel as
needed.
[1.2.0] - 2021-07-16
~~~~~~~~~~~~~~~~~~~~
* Added support for django 3.2
[1.1.1] - 2021-07-09
~~~~~~~~~~~~~~~~~~~~
* Removed upper constraint from Django
[1.1.0] - 2021-03-26
~~~~~~~~~~~~~~~~~~~~
* Braze: Add ACE_CHANNEL_BRAZE_FROM_EMAIL setting to override the normal from address
* Sailthru: Remove Braze rollout waffle flag
[1.0.1] - 2021-03-15
~~~~~~~~~~~~~~~~~~~~
* Braze: Add an unsubscribe action link
* Braze: Don't ask Braze to inline css, as ACE templates already have inline css
[1.0.0] - 2021-03-11
~~~~~~~~~~~~~~~~~~~~
* BREAKING: Recipient objects now take `lms_user_id` instead of `username`
* New `braze_email` backend, needing the following new configuration:
* ACE_CHANNEL_BRAZE_API_KEY
* ACE_CHANNEL_BRAZE_APP_ID
* ACE_CHANNEL_BRAZE_REST_ENDPOINT (like `rest.iad-01.braze.com`)
* ACE_CHANNEL_BRAZE_CAMPAIGNS (an optional dictionary of ACE message names to Braze campaign identifiers)
[0.1.18] - 2020-11-19
~~~~~~~~~~~~~~~~~~~~~
* Updated he travis-badge in README.rst to point to travis-ci.com
[0.1.17] - 2020-10-19
~~~~~~~~~~~~~~~~~~~~~
* Use IntEnum to avoid silent failure in value comparisons
[0.1.16] - 2020-10-17
~~~~~~~~~~~~~~~~~~~~~
* Fixed Enum usage for Python 3.8 to avoid TypeError when comparing values
[0.1.15] - 2020-03-11
~~~~~~~~~~~~~~~~~~~~~
* Added support for Python 3.8
* Removed support for Django 2.0 and 2.1
[0.1.14] - 2020-03-11
~~~~~~~~~~~~~~~~~~~~~
* Fix trivial warning from deprecated use of attr library.
[0.1.13] - 2019-12-06
~~~~~~~~~~~~~~~~~~~~~
* Django22 Support.
[0.1.12] - 2019-10-16
~~~~~~~~~~~~~~~~~~~~~
* Reply_to field added in emails.
[0.1.10] - 2018-11-01
~~~~~~~~~~~~~~~~~~~~~
* Django lazy text translations are handled properly.
[0.1.9] - 2018-07-13
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* Updated delivery logging
[0.1.0] - 2017-08-08
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Added
_____
* First release on PyPI.
Raw data
{
"_id": null,
"home_page": "https://github.com/openedx/edx-ace",
"name": "edx-ace",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "Django edx",
"author": "edX",
"author_email": "oscm@edx.org",
"download_url": "https://files.pythonhosted.org/packages/df/35/a53ac56da415449f23f5f8bd82a2bb65603b1ad89d246c16a4cb349dde39/edx-ace-1.11.3.tar.gz",
"platform": null,
"description": "edX Automated Communication Engine (A.C.E.)\n###########################################\n\n|License: AGPL v3| |Python CI| |Publish package to PyPi| |Status| |pypi-badge| |travis-badge| |codecov-badge|\n|doc-badge| |pyversions-badge|\n\nPurpose\n=======\n\nThe `automated communication engine <https://edx-ace.readthedocs.io/en/latest/>`_, A.C.E. for short, is a Django app\nfor messaging learners on the Open edX platform. This\napp can be installed in any Open edX project, but has only been tested with ``edx-platform``. Email delivery\n(via Sailthru and Django Email)\nare the currently supported delivery channels. In the future we may add support for other delivery channels such as push\nnotifications.\n\nGetting Started\n===============\n\nFor instructions on starting local development, see `Getting Started <https://github.com/openedx/edx-ace/blob/master/docs/getting_started.rst>`_.\n\nGetting Help\n============\n\nDocumentation\n-------------\n\nSee `the documentation`_. If you need more help see below.\n\n.. _the documentation: https://edx-ace.readthedocs.io/en/latest/\n\nMore Help\n----------\n\nIf you're having trouble, we have discussion forums at\nhttps://discuss.openedx.org where you can connect with others in the\ncommunity.\n\nOur real-time conversations are on Slack. You can request a `Slack\ninvitation`_, then join our `community Slack workspace`_.\n\nFor anything non-trivial, the best path is to open an issue in this\nrepository with as many details about the issue you are facing as you\ncan provide.\n\nhttps://github.com/openedx/edx-ace/issues\n\nFor more information about these options, see the `Getting Help`_ page.\n\n.. _Slack invitation: https://openedx.org/slack\n.. _community Slack workspace: https://openedx.slack.com/\n.. _Getting Help: https://openedx.org/getting-help\n\nLicense\n=======\n\nThe code in this repository is licensed under the AGPL 3.0 unless\notherwise noted.\n\nPlease see ``LICENSE.txt`` for details.\n\nContributing\n============\n\nContributions are very welcome.\n\nPlease read `How To Contribute <https://openedx.org/r/how-to-contribute>`_ for details.\n\nEven though they were written with ``edx-platform`` in mind, the guidelines\nshould be followed for Open edX code in general.\n\nPR description template should be automatically applied if you are sending PR from github interface; otherwise you\ncan find it\nat `PULL_REQUEST_TEMPLATE.md <https://github.com/openedx/edx-ace/blob/master/.github/PULL_REQUEST_TEMPLATE.md>`_\n\nIssue report template should be automatically applied if you are sending it from github UI as well; otherwise you\ncan find it at `ISSUE_TEMPLATE.md <https://github.com/openedx/edx-ace/blob/master/.github/ISSUE_TEMPLATE.md>`_\n\nThe Open edX Code of Conduct\n============================\n\nAll community members are expected to follow the `Open edX Code of Conduct`_.\n\n.. _Open edX Code of Conduct: https://openedx.org/code-of-conduct/\n\nPeople\n======\n\nThe assigned maintainers for this component and other project details may be\nfound in `Backstage`_. Backstage pulls this data from the ``catalog-info.yaml``\nfile in this repo.\n\n.. _Backstage: https://open-edx-backstage.herokuapp.com/catalog/default/component/edx-ace\n\nReporting Security Issues\n=========================\n\nPlease do not report security issues in public. Please email security@openedx.org.\n\n.. |pypi-badge| image:: https://img.shields.io/pypi/v/edx-ace.svg\n :target: https://pypi.python.org/pypi/edx-ace/\n :alt: PyPI\n\n.. |travis-badge| image:: https://travis-ci.com/edx/edx-ace.svg?branch=master\n :target: https://travis-ci.com/edx/edx-ace\n :alt: Travis\n\n.. |codecov-badge| image:: http://codecov.io/github/edx/edx-ace/coverage.svg?branch=master\n :target: http://codecov.io/github/edx/edx-ace?branch=master\n :alt: Codecov\n\n.. |doc-badge| image:: https://readthedocs.org/projects/edx-ace/badge/?version=latest\n :target: http://edx-ace.readthedocs.io/en/latest/\n :alt: Documentation\n\n.. |pyversions-badge| image:: https://img.shields.io/pypi/pyversions/edx-ace.svg\n :target: https://pypi.python.org/pypi/edx-ace/\n :alt: Supported Python versions\n\n.. |license-badge| image:: https://img.shields.io/github/license/edx/edx-ace.svg\n :target: https://github.com/openedx/edx-ace/blob/master/LICENSE.txt\n :alt: License\n\n.. |License: AGPL v3| image:: https://img.shields.io/badge/License-AGPL_v3-blue.svg\n :target: https://www.gnu.org/licenses/agpl-3.0\n\n.. |Python CI| image:: https://github.com/openedx/edx-ace/actions/workflows/ci.yml/badge.svg\n :target: https://github.com/openedx/edx-ace/actions/workflows/ci.yml\n\n.. |Publish package to PyPi| image:: https://github.com/openedx/edx-ace/actions/workflows/pypi-publish.yml/badge.svg\n :target: https://github.com/openedx/edx-ace/actions/workflows/pypi-release.yml\n\n.. |Status| image:: https://img.shields.io/badge/Status-Maintained-brightgreen\n\n\nChange Log\n----------\n\n..\n All enhancements and patches to edx_ace will be documented\n in this file. It adheres to the structure of http://keepachangelog.com/ ,\n but in reStructuredText instead of Markdown (for ease of incorporation into\n Sphinx documentation and the PyPI description).\n\n This project adheres to Semantic Versioning (http://semver.org/).\n\n.. There should always be an \"Unreleased\" section for changes pending release.\n\nUnreleased\n~~~~~~~~~~\n\n[1.8.0] - 2024-03-06\n~~~~~~~~~~~~~~~~~~~~\n* Added support for ``Python 3.12``\n* Dropped support for ``Django 3.2``\n\n\n[1.7.0] - 2023-07-21\n~~~~~~~~~~~~~~~~~~~~\n\n* Switch from ``edx-sphinx-theme`` to ``sphinx-book-theme`` since the former is\n deprecated\n* Added support for django 4.2\n\n[1.6.1] - 2023-02-07\n~~~~~~~~~~~~~~~~~~~~\n\n* Updated code coverage target in https://github.com/openedx/edx-ace/pull/189\n* Updated Python Requirements in https://github.com/openedx/edx-ace/pull/199\n* **Full Changelog**: https://github.com/openedx/edx-ace/compare/v1.6.0...v1.6.1\n\n[1.5.0] - 2022-02-15\n~~~~~~~~~~~~~~~~~~~~\n\n* Added support for Django40\n* Removed support for Django22, 30 and 31\n\n[1.4.1] - 2021-12-06\n~~~~~~~~~~~~~~~~~~~~\n\n* Adds in the ability to override frequency caps for Braze emails. Can be accessed via\n Message options using the key ``override_frequency_capping``. All emails containing the\n ``transactional`` Message option will also override frequency caps.\n\n[1.4.0] - 2021-11-08\n~~~~~~~~~~~~~~~~~~~~\n\n* Deprecate the action_links property\n* Add a get_action_links method and template tag to allow passing arguments to action links\n\n[1.3.1] - 2021-08-17\n~~~~~~~~~~~~~~~~~~~~\n\n* Adjust name ``handles_delivery_for_message`` to ``overrides_delivery_for_message``\n\n[1.3.0] - 2021-08-16\n~~~~~~~~~~~~~~~~~~~~\n\n* New channel method ``handles_delivery_for_message`` for allowing a default channel\n to claim a message, even if it would normally be delivered to the configured\n transactional channel.\n* Braze: Will handle any message defined in ``ACE_CHANNEL_BRAZE_CAMPAIGNS`` (using the\n above new feature) to steal campaign messages from the transactional channel as\n needed.\n\n[1.2.0] - 2021-07-16\n~~~~~~~~~~~~~~~~~~~~\n\n* Added support for django 3.2\n\n[1.1.1] - 2021-07-09\n~~~~~~~~~~~~~~~~~~~~\n\n* Removed upper constraint from Django\n\n[1.1.0] - 2021-03-26\n~~~~~~~~~~~~~~~~~~~~\n\n* Braze: Add ACE_CHANNEL_BRAZE_FROM_EMAIL setting to override the normal from address\n* Sailthru: Remove Braze rollout waffle flag\n\n[1.0.1] - 2021-03-15\n~~~~~~~~~~~~~~~~~~~~\n\n* Braze: Add an unsubscribe action link\n* Braze: Don't ask Braze to inline css, as ACE templates already have inline css\n\n[1.0.0] - 2021-03-11\n~~~~~~~~~~~~~~~~~~~~\n\n* BREAKING: Recipient objects now take `lms_user_id` instead of `username`\n* New `braze_email` backend, needing the following new configuration:\n\n * ACE_CHANNEL_BRAZE_API_KEY\n * ACE_CHANNEL_BRAZE_APP_ID\n * ACE_CHANNEL_BRAZE_REST_ENDPOINT (like `rest.iad-01.braze.com`)\n * ACE_CHANNEL_BRAZE_CAMPAIGNS (an optional dictionary of ACE message names to Braze campaign identifiers)\n\n[0.1.18] - 2020-11-19\n~~~~~~~~~~~~~~~~~~~~~\n\n* Updated he travis-badge in README.rst to point to travis-ci.com\n\n[0.1.17] - 2020-10-19\n~~~~~~~~~~~~~~~~~~~~~\n\n* Use IntEnum to avoid silent failure in value comparisons\n\n[0.1.16] - 2020-10-17\n~~~~~~~~~~~~~~~~~~~~~\n\n* Fixed Enum usage for Python 3.8 to avoid TypeError when comparing values\n\n[0.1.15] - 2020-03-11\n~~~~~~~~~~~~~~~~~~~~~\n\n* Added support for Python 3.8\n* Removed support for Django 2.0 and 2.1\n\n[0.1.14] - 2020-03-11\n~~~~~~~~~~~~~~~~~~~~~\n\n* Fix trivial warning from deprecated use of attr library.\n\n[0.1.13] - 2019-12-06\n~~~~~~~~~~~~~~~~~~~~~\n\n* Django22 Support.\n\n[0.1.12] - 2019-10-16\n~~~~~~~~~~~~~~~~~~~~~\n\n* Reply_to field added in emails.\n\n[0.1.10] - 2018-11-01\n~~~~~~~~~~~~~~~~~~~~~\n\n* Django lazy text translations are handled properly.\n\n\n[0.1.9] - 2018-07-13\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n* Updated delivery logging\n\n\n[0.1.0] - 2017-08-08\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nAdded\n_____\n\n* First release on PyPI.\n\n\n",
"bugtrack_url": null,
"license": "AGPL 3.0",
"summary": "Framework for Messaging",
"version": "1.11.3",
"project_urls": {
"Homepage": "https://github.com/openedx/edx-ace"
},
"split_keywords": [
"django",
"edx"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "0b169403ee613afe01efe21f0e897b933e7c533f4bea646d6cf3b68de0cb1efe",
"md5": "81352a97374be9b822a345802bbc4fdb",
"sha256": "0053be0bc125192d0f267807758f6f6cca5dfbcc14685ca562cba3ba61d22540"
},
"downloads": -1,
"filename": "edx_ace-1.11.3-py2.py3-none-any.whl",
"has_sig": false,
"md5_digest": "81352a97374be9b822a345802bbc4fdb",
"packagetype": "bdist_wheel",
"python_version": "py2.py3",
"requires_python": null,
"size": 65402,
"upload_time": "2024-10-14T08:56:15",
"upload_time_iso_8601": "2024-10-14T08:56:15.974347Z",
"url": "https://files.pythonhosted.org/packages/0b/16/9403ee613afe01efe21f0e897b933e7c533f4bea646d6cf3b68de0cb1efe/edx_ace-1.11.3-py2.py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "df35a53ac56da415449f23f5f8bd82a2bb65603b1ad89d246c16a4cb349dde39",
"md5": "51804c5b3fa94f1e3790c748f198f4d6",
"sha256": "d46aa7743641f00ea941cec9bdc8a4e6d9b94b190846494179dbed056064a324"
},
"downloads": -1,
"filename": "edx-ace-1.11.3.tar.gz",
"has_sig": false,
"md5_digest": "51804c5b3fa94f1e3790c748f198f4d6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 57001,
"upload_time": "2024-10-14T08:56:17",
"upload_time_iso_8601": "2024-10-14T08:56:17.260033Z",
"url": "https://files.pythonhosted.org/packages/df/35/a53ac56da415449f23f5f8bd82a2bb65603b1ad89d246c16a4cb349dde39/edx-ace-1.11.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-14 08:56:17",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "openedx",
"github_project": "edx-ace",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"tox": true,
"lcname": "edx-ace"
}