{"id":20944243,"url":"https://github.com/hotkit/django-pubsubpull","last_synced_at":"2025-05-14T01:31:09.105Z","repository":{"id":30749801,"uuid":"34306280","full_name":"hotkit/django-pubsubpull","owner":"hotkit","description":"Publish/subscribe with extra bells and whistles (for decoupling micro-services)","archived":false,"fork":false,"pushed_at":"2016-10-26T03:15:51.000Z","size":108,"stargazers_count":1,"open_issues_count":0,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-13T14:06:49.209Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hotkit.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-04-21T05:27:34.000Z","updated_at":"2019-09-10T03:51:12.000Z","dependencies_parsed_at":"2022-09-08T22:33:12.516Z","dependency_job_id":null,"html_url":"https://github.com/hotkit/django-pubsubpull","commit_stats":null,"previous_names":["kayess/django-pubsubpull"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotkit%2Fdjango-pubsubpull","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotkit%2Fdjango-pubsubpull/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotkit%2Fdjango-pubsubpull/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hotkit%2Fdjango-pubsubpull/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hotkit","download_url":"https://codeload.github.com/hotkit/django-pubsubpull/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225268520,"owners_count":17447356,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-18T23:39:48.877Z","updated_at":"2024-11-18T23:39:49.604Z","avatar_url":"https://github.com/hotkit.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Django PubSubPull #\n\n[![Build Status](https://travis-ci.org/KayEss/django-pubsubpull.svg?branch=master)](https://travis-ci.org/KayEss/django-pubsubpull)\n\n`django-pubsubpull` is intended to help you decouple micro-services. It provides mechanisms that allow services to publish changes, subscribe to change notifications, and pull records.\n\nIn practice what we'll end up with is along the lines of:\n\n* Use Django slumber and async to provide a load of basic infrastructure this is going to need.\n* Provide new models for tracking database level changes to certain tables (models), and database triggers to ensure that they are properly recorded.\n* All operations will be based on HTTP using GET, PUT and DELETE only.\n* Django middleware to capture as much information about the request and the underlying changes we can and to tie that in to the records of database changes recorded there.\n* Support for Django 1.0 through 1.7. We may support 1.8 and later if we can make our middleware subsume the functionality of the old transaction middleware.\n* Only support Postgres 9.4 and later.\n\nThe use cases we envisage include:\n\n* A service needs to locally cache a copy of some attributes of an object held in another micro-service, generally for performance reasons (for example, a billing service needing copies of a customer's location so that it can choose the correct rates).\n* A service needs to record meta-data about user instructed changes for audit trail purposes (for example, any change to a customer email subscription is recorded with full details of who made the change and when it was made).\n* A service needs to be notified of certain API calls so that it can in turn trigger other behaviours (for example, a comms service sending a welcome email when a new user is created).\n\nThe three parts are:\n\n* Publish: A service will notify it's subscribers about any changes to the requested model instances. Ultimately the publish will hook into a database trigger to ensure that changes are always properly recorded no matter how it occurs.\n* Subscribe: A service can request change notifications be sent to it from the publishing service. The subscriber is able to specify a URL that is used for a PUT request when changes are notified.\n* Pull: A service can iterate over all of the instances of a particular model and then periodically iterate over new ones.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhotkit%2Fdjango-pubsubpull","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhotkit%2Fdjango-pubsubpull","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhotkit%2Fdjango-pubsubpull/lists"}