fix: rename Producer and Consumer child doctypes

This commit is contained in:
Rucha Mahabal 2019-12-26 13:50:33 +05:30
parent f99cbf9690
commit cfe2631864
13 changed files with 58 additions and 54 deletions

View file

@ -1,11 +1,12 @@
{
"actions": [],
"autoname": "field:callback_url",
"creation": "2019-08-26 17:45:15.479530",
"doctype": "DocType",
"editable_grid": 1,
"engine": "InnoDB",
"field_order": [
"subscribed_doctypes",
"consumer_doctypes",
"callback_url",
"section_break_3",
"api_key",
@ -24,13 +25,6 @@
"reqd": 1,
"unique": 1
},
{
"fieldname": "subscribed_doctypes",
"fieldtype": "Table",
"label": "Subscribed Document Types",
"options": "Event Subscribed Document Type",
"reqd": 1
},
{
"fieldname": "api_key",
"fieldtype": "Data",
@ -73,10 +67,18 @@
"hidden": 1,
"label": "In Test",
"read_only": 1
},
{
"fieldname": "consumer_doctypes",
"fieldtype": "Table",
"label": "Event Consumer Document Types",
"options": "Event Consumer Document Type",
"reqd": 1
}
],
"in_create": 1,
"modified": "2019-11-29 00:40:32.875022",
"links": [],
"modified": "2019-12-26 13:05:08.020129",
"modified_by": "Administrator",
"module": "Events Streaming",
"name": "Event Consumer",

View file

@ -15,7 +15,7 @@ from frappe.utils.background_jobs import get_jobs
class EventConsumer(Document):
def validate(self):
if self.in_test:
for entry in self.subscribed_doctypes:
for entry in self.consumer_doctypes:
entry.status = 'Approved'
self.in_test = False
@ -28,17 +28,17 @@ class EventConsumer(Document):
def update_consumer_status(self):
consumer_site = get_consumer_site(self.callback_url)
event_producer = consumer_site.get_doc('Event Producer', get_current_node())
config = event_producer.event_configuration
event_producer.event_configuration = []
config = event_producer.producer_doctypes
event_producer.producer_doctypes = []
for entry in config:
if entry.get('has_mapping'):
ref_doctype = consumer_site.get_value('Document Type Mapping', entry.get('mapping'), 'remote_doctype')
else:
ref_doctype = entry.get('ref_doctype')
entry['status'] = frappe.db.get_value('Event Subscribed Document Type', {'parent': self.name, 'ref_doctype': ref_doctype}, 'status')
entry['status'] = frappe.db.get_value('Event Consumer Document Type', {'parent': self.name, 'ref_doctype': ref_doctype}, 'status')
event_producer.event_configuration = config
event_producer.producer_doctypes = config
# when producer doc is updated it updates the consumer doc, set flag to avoid deadlock
event_producer.incoming_change = True
consumer_site.update(event_producer)
@ -56,10 +56,10 @@ def register_consumer(data):
consumer.callback_url = data['event_consumer']
consumer.user = data['user']
consumer.incoming_change = True
subscribed_doctypes = json.loads(data['subscribed_doctypes'])
consumer_doctypes = json.loads(data['consumer_doctypes'])
for entry in subscribed_doctypes:
consumer.append('subscribed_doctypes', {
for entry in consumer_doctypes:
consumer.append('consumer_doctypes', {
'ref_doctype': entry,
'status': 'Pending'
})
@ -94,7 +94,7 @@ def get_last_update():
@frappe.whitelist()
def notify_event_consumers(doctype):
event_consumers = frappe.get_all('Event Subscribed Document Type', ['parent'], {'ref_doctype': doctype, 'status': 'Approved'})
event_consumers = frappe.get_all('Event Consumer Document Type', ['parent'], {'ref_doctype': doctype, 'status': 'Approved'})
for entry in event_consumers:
consumer = frappe.get_doc('Event Consumer', entry.parent)
consumer.flags.notified = False

View file

@ -30,7 +30,7 @@
"modified": "2019-10-29 15:26:32.436528",
"modified_by": "Administrator",
"module": "Events Streaming",
"name": "Event Subscribed Document Type",
"name": "Event Consumer Document Type",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,

View file

@ -6,5 +6,5 @@ from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
class EventConfiguration(Document):
class EventConsumerDocumentType(Document):
pass

View file

@ -3,7 +3,7 @@
frappe.ui.form.on('Event Producer', {
refresh: function(frm) {
frm.set_query('ref_doctype', 'event_configuration', function() {
frm.set_query('ref_doctype', 'producer_doctypes', function() {
return {
filters: {
issingle: 0,

View file

@ -1,4 +1,5 @@
{
"actions": [],
"autoname": "field:producer_url",
"creation": "2019-08-26 19:17:24.919196",
"doctype": "DocType",
@ -6,7 +7,7 @@
"engine": "InnoDB",
"field_order": [
"producer_url",
"event_configuration",
"producer_doctypes",
"section_break_3",
"api_key",
"api_secret",
@ -49,13 +50,6 @@
"options": "User",
"reqd": 1
},
{
"fieldname": "event_configuration",
"fieldtype": "Table",
"label": "Event Configuration",
"options": "Event Configuration",
"reqd": 1
},
{
"fieldname": "column_break_6",
"fieldtype": "Column Break"
@ -70,9 +64,17 @@
"fieldtype": "Check",
"hidden": 1,
"label": "Incoming Change"
},
{
"fieldname": "producer_doctypes",
"fieldtype": "Table",
"label": "Event Producer Document Types",
"options": "Event Producer Document Type",
"reqd": 1
}
],
"modified": "2019-10-29 14:56:30.854731",
"links": [],
"modified": "2019-12-26 13:04:11.438349",
"modified_by": "Administrator",
"module": "Events Streaming",
"name": "Event Producer",

View file

@ -21,7 +21,7 @@ class EventProducer(Document):
def validate(self):
if frappe.flags.in_test:
for entry in self.event_configuration:
for entry in self.producer_doctypes:
entry.status = 'Approved'
def on_update(self):
@ -46,24 +46,24 @@ class EventProducer(Document):
self.last_update = response['last_update']
def get_request_data(self):
subscribed_doctypes = []
for entry in self.event_configuration:
consumer_doctypes = []
for entry in self.producer_doctypes:
if entry.has_mapping:
#if it has mapping then on event consumer's site it should subscribe to remote doctype
subscribed_doctypes.append(frappe.db.get_value('Document Type Mapping', entry.mapping, 'remote_doctype'))
consumer_doctypes.append(frappe.db.get_value('Document Type Mapping', entry.mapping, 'remote_doctype'))
else:
subscribed_doctypes.append(entry.ref_doctype)
consumer_doctypes.append(entry.ref_doctype)
return {
'event_consumer': get_current_node(),
'subscribed_doctypes': json.dumps(subscribed_doctypes),
'consumer_doctypes': json.dumps(consumer_doctypes),
'user': self.user,
'in_test': frappe.flags.in_test
}
def create_custom_fields(self):
'''create custom field to store remote docname and remote site url'''
for entry in self.event_configuration:
for entry in self.producer_doctypes:
if not entry.use_same_name:
if not frappe.db.exists('Custom Field', {'fieldname': 'remote_docname', 'dt': entry.ref_doctype}):
df = dict(fieldname='remote_docname', label='Remote Document Name', fieldtype='Data', read_only=1, print_hide=1)
@ -77,16 +77,16 @@ class EventProducer(Document):
producer_site = get_producer_site(self.producer_url)
event_consumer = producer_site.get_doc('Event Consumer', get_current_node())
if event_consumer:
config = event_consumer.subscribed_doctypes
event_consumer.subscribed_doctypes = []
for entry in self.event_configuration:
config = event_consumer.consumer_doctypes
event_consumer.consumer_doctypes = []
for entry in self.producer_doctypes:
if entry.has_mapping:
#if it has mapping then on event consumer's site it should subscribe to remote doctype
ref_doctype = frappe.db.get_value('Document Type Mapping', entry.mapping, 'remote_doctype')
else:
ref_doctype = entry.ref_doctype
event_consumer.subscribed_doctypes.append({
event_consumer.consumer_doctypes.append({
'ref_doctype': ref_doctype,
'status': get_approval_status(config, ref_doctype)
})
@ -146,7 +146,7 @@ def pull_from_node(event_producer):
producer_site = get_producer_site(event_producer.producer_url)
last_update = event_producer.last_update
(doctypes, mapping_config, naming_config) = get_config(event_producer.event_configuration)
(doctypes, mapping_config, naming_config) = get_config(event_producer.producer_doctypes)
updates = get_updates(producer_site, last_update, doctypes)

View file

@ -12,11 +12,11 @@ from frappe.events_streaming.doctype.event_producer.event_producer import pull_f
def create_event_producer(producer_url):
event_producer = frappe.new_doc('Event Producer')
event_producer.producer_url = producer_url
event_producer.append('event_configuration', {
event_producer.append('producer_doctypes', {
'ref_doctype': 'ToDo',
'use_same_name': 1
})
event_producer.append('event_configuration', {
event_producer.append('producer_doctypes', {
'ref_doctype': 'Note',
'use_same_name': 1
})
@ -117,8 +117,8 @@ class TestEventProducer(unittest.TestCase):
def test_dynamic_link_dependencies_synced(self):
#unsubscribe for Note to check whether dependency is fulfilled
event_producer = frappe.get_doc('Event Producer', self.producer_url)
event_producer.event_configuration = []
event_producer.append('event_configuration', {
event_producer.producer_doctypes = []
event_producer.append('producer_doctypes', {
'ref_doctype': 'ToDo',
'use_same_name': 1
})
@ -142,7 +142,7 @@ class TestEventProducer(unittest.TestCase):
#subscribe again
event_producer = frappe.get_doc('Event Producer', self.producer_url)
event_producer.append('event_configuration', {
event_producer.append('producer_doctypes', {
'ref_doctype': 'Note',
'use_same_name': 1
})
@ -151,8 +151,8 @@ class TestEventProducer(unittest.TestCase):
def test_naming_configuration(self):
#test with use_same_name = 0
event_producer = frappe.get_doc('Event Producer', self.producer_url)
event_producer.event_configuration = []
event_producer.append('event_configuration', {
event_producer.producer_doctypes = []
event_producer.append('producer_doctypes', {
'ref_doctype': 'ToDo',
'use_same_name': 0
})
@ -164,9 +164,9 @@ class TestEventProducer(unittest.TestCase):
self.assertTrue(frappe.db.exists('ToDo', {'remote_docname': producer_doc.name, 'remote_site_name': self.producer_url}))
event_producer = frappe.get_doc('Event Producer', self.producer_url)
event_producer.event_configuration = []
event_producer.producer_doctypes = []
#set use_same_name back to 1
event_producer.append('event_configuration', {
event_producer.append('producer_doctypes', {
'ref_doctype': 'ToDo',
'use_same_name': 1
})

View file

@ -55,7 +55,7 @@
"modified": "2019-10-29 15:12:53.962591",
"modified_by": "Administrator",
"module": "Events Streaming",
"name": "Event Configuration",
"name": "Event Producer Document Type",
"owner": "Administrator",
"permissions": [],
"quick_entry": 1,

View file

@ -6,5 +6,5 @@ from __future__ import unicode_literals
# import frappe
from frappe.model.document import Document
class EventSubscribedDocumentType(Document):
class EventProducerDocumentType(Document):
pass

View file

@ -1305,7 +1305,7 @@ def check_doctype_has_consumers(doctype):
event_consumers = frappe.get_all('Event Consumer')
for event_consumer in event_consumers:
consumer = frappe.get_doc('Event Consumer', event_consumer.name)
for entry in consumer.subscribed_doctypes:
for entry in consumer.consumer_doctypes:
if doctype == entry.ref_doctype and entry.status == 'Approved':
return True
return False