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@tcril.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.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.