Metadata-Version: 2.4
Name: enterprise-integrated-channels
Version: 0.1.36
Summary: An integrated channel is an abstraction meant to represent a third-party system                 which provides an API that can be used to transmit EdX data to the third-party system.
Home-page: https://github.com/openedx/enterprise-integrated-channels
Author: Open edX Project
Author-email: oscm@openedx.org
License: AGPL 3.0
Keywords: Python edx
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: Django
Classifier: Framework :: Django :: 4.2
Classifier: Framework :: Django :: 5.2
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Requires-Python: >=3.11
Description-Content-Type: text/x-rst
License-File: LICENSE
License-File: LICENSE.txt
Requires-Dist: Django>=4.2
Requires-Dist: celery
Requires-Dist: django-config-models
Requires-Dist: django-fernet-fields-v2
Requires-Dist: django-model-utils
Requires-Dist: django-oauth-toolkit
Requires-Dist: django-object-actions
Requires-Dist: django-simple-history
Requires-Dist: edx-drf-extensions
Requires-Dist: edx-opaque-keys[django]
Requires-Dist: edx-rbac
Requires-Dist: edx-rest-api-client
Requires-Dist: edx-tincan-py35
Requires-Dist: edx_django_utils
Requires-Dist: jsonfield
Requires-Dist: openedx-atlas
Requires-Dist: pytz
Requires-Dist: requests
Requires-Dist: slumber
Requires-Dist: snowflake-connector-python<4.0.0,>=3.18.0
Requires-Dist: unicodecsv
Dynamic: author
Dynamic: author-email
Dynamic: classifier
Dynamic: description
Dynamic: description-content-type
Dynamic: home-page
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

enterprise-integrated-channels
##############################

|pypi-badge| |ci-badge| |codecov-badge| |doc-badge| |pyversions-badge|
|license-badge| |status-badge|

Purpose
*******

An integrated channel is an abstraction meant to represent a third-party system which provides an API that can be used to transmit EdX data to the third-party system. The most common example of such a third-party system is an enterprise-level learning management system (LMS). LMS users are able to discover content made available by many different content providers and manage the learning outcomes that are produced by interaction with the content providers. In such a scenario, EdX would be the content provider while a system like SAP SuccessFactors would be the integrated channel.


Getting Started with Development
********************************

Please see the Open edX documentation for `guidance on Python development`_ in this repo.

.. _guidance on Python development: https://docs.openedx.org/en/latest/developers/how-tos/get-ready-for-python-dev.html

Running tests locally
*********************

Once inside an LMS Devstack container, you'll want to run unit tests via tox::

  tox

tox will run tests via the ``pytest`` inside a virtual environment. If you want to pass
arguments to ``pytest``, you can pass them after a ``--`` in the command::

  tox -- tests/test_channel_integrations/test_api/test_base_views.py -v

It's necessary to use ``tox`` both because of its use of a python virtual environment (which helps
stay isolated from the edxapp python virtual environment), and because it adds the ``mock_apps/``
directory to the ``PYTHONPATH``.

Getting Help
************

Documentation
=============

Start by going through `the documentation`_.  If you need more help see below.

.. _the documentation: https://github.com/openedx/enterprise-integrated-channels/blob/main/channel_integrations/README.md


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/enterprise-integrated-channels/issues

For more information about these options, see the `Getting Help <https://openedx.org/getting-help>`__ page.

.. _Slack invitation: https://openedx.org/slack
.. _community Slack workspace: https://openedx.slack.com/

License
*******

The code in this repository is licensed under the AGPL 3.0 unless
otherwise noted.

Please see `LICENSE.txt <LICENSE.txt>`_ for details.

Contributing
************

Contributions are very welcome.
Please read `How To Contribute <https://openedx.org/r/how-to-contribute>`_ for details.

This project is currently accepting all types of contributions, bug fixes,
security fixes, maintenance work, or new features.  However, please make sure
to discuss your new feature idea with the maintainers before beginning development
to maximize the chances of your change being accepted.
You can start a conversation by creating a new issue on this repo summarizing
your idea.

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://backstage.openedx.org/catalog/default/component/enterprise-integrated-channels

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/enterprise-integrated-channels.svg
    :target: https://pypi.python.org/pypi/enterprise-integrated-channels/
    :alt: PyPI

.. |ci-badge| image:: https://github.com/openedx/enterprise-integrated-channels/workflows/Python%20CI/badge.svg?branch=main
    :target: https://github.com/openedx/enterprise-integrated-channels/actions
    :alt: CI

.. |codecov-badge| image:: https://codecov.io/github/openedx/enterprise-integrated-channels/coverage.svg?branch=main
    :target: https://codecov.io/github/openedx/enterprise-integrated-channels?branch=main
    :alt: Codecov

.. |doc-badge| image:: https://readthedocs.org/projects/enterprise-integrated-channels/badge/?version=latest
    :target: https://docs.openedx.org/projects/enterprise-integrated-channels
    :alt: Documentation

.. |pyversions-badge| image:: https://img.shields.io/pypi/pyversions/enterprise-integrated-channels.svg
    :target: https://pypi.python.org/pypi/enterprise-integrated-channels/
    :alt: Supported Python versions

.. |license-badge| image:: https://img.shields.io/github/license/openedx/enterprise-integrated-channels.svg
    :target: https://github.com/openedx/enterprise-integrated-channels/blob/main/LICENSE.txt
    :alt: License

.. TODO: Choose one of the statuses below and remove the other status-badge lines.
.. |status-badge| image:: https://img.shields.io/badge/Status-Experimental-yellow
.. .. |status-badge| image:: https://img.shields.io/badge/Status-Maintained-brightgreen
.. .. |status-badge| image:: https://img.shields.io/badge/Status-Deprecated-orange
.. .. |status-badge| image:: https://img.shields.io/badge/Status-Unsupported-red


Change Log
##########

..
   All enhancements and patches to channel_integrations will be documented
   in this file.  It adheres to the structure of https://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 (https://semver.org/).

.. There should always be an "Unreleased" section for changes pending release.

Unreleased
**********

0.1.36 – 2026-01-30
*******************

Changed
=======

* Optional features for webhook integration

0.1.35 – 2026-01-28
*******************

Changed
=======

* Add missing app_label to models


0.1.34 – 2026-01-27
*******************

Changed
=======

* Switched from consuming events via the event bus to listening to in process Django signals directly.

0.1.33 – 2026-01-20
*******************

Changed
=======

* chore: upgrade python requirements

0.1.32 – 2026-01-19
*******************

Changed
=======

* chore: Add Django>=4.2 constraint to support both Django 4.2 and 5.x
* fix: Constrain social-auth-app-django<5.5 for Django 4.2 compatibility

0.1.31 – 2026-01-19
*******************

Changed
=======

* chore: Update snowflake-connector-python from 3.7.0 to >=3.18.0,<4.0.0 for compatibility with edx-platform

0.1.30 – 2026-01-19
*******************

Added
=====

* feat: Add webhook learning time enrichment from Snowflake with dedicated Celery queue
* test: Add comprehensive test coverage for webhook task routing and branch conditions

0.1.29 – 2026-01-17
*******************

Added
=====

* chore: add logging to track sending course completion xAPI statements

0.1.28 – 2026-01-13
*******************

Fixed
=====

* fix: change webhook model id fields to AutoField for edx-platform compatibility

0.1.27 – 2026-01-12
*******************

Added
=====

* feat: Region-aware webhook system for enterprise course completion
* chore: add logging for track sending course completion xAPI statements

Fixed
=====

* fix: update pip-tools to 7.5.2
* See issue https://github.com/openedx/public-engineering/issues/440 for details.

[0.1.26] - 2026-01-08
*********************

Added
=====

0.1.25 – 2025-11-28
*******************

Added
=====

* feat: fetch SAP userid by remote_id_field_name

0.1.24 – 2025-11-24
*******************

Added
=====

*  Feat: Update Moodle serialiser to accomodates changes made in edx-enterprise

0.1.23 – 2025-10-30
*******************

Added
=====

*  Upgrade Python Requirements

0.1.22 – 2025-10-23
*******************

Added
=====

*  feat: Optimize data migration command by implementing bulk inserts for improved performance.
*  feat: Add management command to truncate non-empty destination tables before data migration.

0.1.21 – 2025-10-22
*******************

Added
=====

*  Upgrade Python Requirements
*  fix: Convert UUIDField columns to uuid type for MariaDB

0.1.20 – 2025-10-19
*******************

Added
=====

*  Upgrade Python Requirements

0.1.19 – 2025-10-09
*******************

Added
=====

*  Upgrade Python Requirements


0.1.18 – 2025-10-03
*******************

Added
=====

*  Upgrade Python Requirements


0.1.17 – 2025-09-26
*******************

Added
=====

*  Upgrade Python Requirements


0.1.16 – 2025-09-15
*******************

Added
=====

*  Enhances the migration command with customer-specific functionality to support targeted data migration during the integrated channels transition.


0.1.15 – 2025-09-01
*******************

Added
=====

*  Add explicit index naming for SAP SuccessFactors audit table and corresponding database migration.


0.1.14 – 2025-08-13
*******************

Added
=====

*  Upgrade Python Requirements


0.1.13 – 2025-07-23
*******************

Added
=====

*  Add ``__init__.py`` to ``api/v1/`` directory to ensure it is recognized as a package.


0.1.12 – 2025-07-22
*******************

Added
=====

*  Upgrade Python Requirements

0.1.11 – 2025-07-15
*******************

Added
=====

*  Update CHANGELOG and README


0.1.10 – 2025-07-15
*******************

Added
=====

*  Fix admin redirects for various channel integrations to use the correct app namespace.
*  Upgrade Python Requirements


0.1.9 – 2025-07-04
******************

Added
=====

*  Upgrade Python Requirements


0.1.8 – 2025-06-26
******************

Added
=====

*  fix ``test_migrations_are_in_sync`` test on edx-platform


0.1.7 – 2025-06-25
******************

Added
=====

*  add migrations for various channel integrations


0.1.6 – 2025-06-25
******************

Added
=====

*  Upgrade Python Requirements


0.1.5 – 2025-06-16
******************

Added
=====

*  Rename xAPI management commands to avoid conflicts with existing commands in edx-enterprise.


0.1.4 – 2025-06-11
******************

Added
=====

*  Added django52 support.


0.1.3 – 2025-06-10
******************

Added
=====

*  Add DB migrations against ``index_together`` changes.


0.1.2 – 2025-05-30
******************

Added
=====

* Added management command to copy data from legacy tables to new tables.
* Added ``(Experimental)`` tag to app name in the admin interface.

0.1.1 – 2025-05-20
******************

Added
=====

* Renamed jobs to avoid conflicts with existing jobs in edx-enterprise.


0.1.0 – 2025-01-16
******************

Added
=====

* First release on PyPI.
* Created ``mock_apps`` for testing purposes.
* Updated requirements in ``base.in`` and run ``make requirements``.
* Migrated ``integrated_channel`` app from edx-enterprise.
