def doRewriteDomainContacts(self, *args, **kwargs): """ Action method. """ dcs = domain_contacts_synchronizer.DomainContactsSynchronizer( update_domain=False, skip_roles=[ 'registrant', ], skip_contact_details=False, merge_duplicated_contacts=False, raise_errors=True, accept_code_2304=False, ) try: dcs.event( 'run', target_domain=self.target_domain, ) except Exception as exc: self.log(self.debug_level, 'Exception in DomainContactsSynchronizer: %s' % exc) del dcs self.event('contacts-rewrite-error', exc) return outputs = list(dcs.outputs) del dcs if not outputs: logger.error('empty result from DomainContactsSynchronizer: %s', exc) self.event( 'contacts-rewrite-error', Exception('Empty result from DomainContactsSynchronizer')) return if isinstance(outputs[-1], Exception): logger.error( 'found exception in DomainContactsSynchronizer outputs: %s', outputs[-1]) self.event('contacts-rewrite-error', outputs[-1]) return for out in outputs: if not isinstance(out, tuple): continue if not out[0] in [ 'admin', 'billing', 'tech', 'registrant', ]: logger.warn( 'unexpected output from DomainContactsSynchronizer: %r', out[0]) continue self.outputs.extend(outputs) self.event('contacts-replaced', self.latest_registrant_response)
def doRunDomainContactsSync(self, *args, **kwargs): """ Action method. """ if not self.sync_contacts: self.event('contacts-ok') return dcs = domain_contacts_synchronizer.DomainContactsSynchronizer( update_domain=False, skip_roles=[], skip_contact_details=(not self.DomainToBeCreated), raise_errors=True, ) try: dcs.event( 'run', target_domain=self.target_domain, ) except Exception as exc: self.log(self.debug_level, 'Exception in DomainContactsSynchronizer: %s' % exc) del dcs self.event('error', exc) return outputs = list(dcs.outputs) del dcs if not outputs: logger.error('empty result from DomainContactsSynchronizer: %s' % exc) self.event( 'error', Exception('Empty result from DomainContactsSynchronizer')) return if isinstance(outputs[-1], Exception): logger.error( 'found exception in DomainContactsSynchronizer outputs: %s' % outputs[-1]) self.event('error', outputs[-1]) return for out in outputs: if not isinstance(out, tuple): continue if not out[0] in [ 'admin', 'billing', 'tech', 'registrant', ]: logger.warn( 'unexpected output from DomainContactsSynchronizer: %r' % out[0]) continue self.outputs.extend(outputs) self.event('contacts-ok')
def domain_synchronize_contacts(domain_object, skip_roles=[], skip_contact_details=False, merge_duplicated_contacts=False, rewrite_registrant=False, new_registrant=None, raise_errors=False, log_events=True, log_transitions=True): """ Write domain contacts to the back-end including contacts details info. Must pass `rewrite_registrant=True` if need to write registrant info also. Also de-duplicates contacts if `merge_duplicated_contacts=True`. """ if rewrite_registrant: from zen import zcontacts new_registrant = new_registrant or zcontacts.get_oldest_registrant( domain_object.owner) dcs = domain_contacts_synchronizer.DomainContactsSynchronizer( update_domain=True, skip_roles=skip_roles, skip_contact_details=skip_contact_details, merge_duplicated_contacts=merge_duplicated_contacts, new_registrant=new_registrant, log_events=log_events, log_transitions=log_transitions, raise_errors=raise_errors, ) dcs.event( 'run', target_domain=domain_object, ) outputs = list(dcs.outputs) del dcs if not outputs or not outputs[-1] or isinstance(outputs[-1], Exception): if outputs and isinstance(outputs[-1], Exception): logger.error('domain_synchronize_contacts(%r) failed with: %r', domain_object.name, outputs[-1]) else: logger.error( 'domain_synchronize_contacts(%r) unexpectedly failed with: %r', domain_object.name, outputs) return outputs or [] logger.info('domain_synchronize_contacts(%r) finished with %d outputs', domain_object.name, len(outputs)) return outputs
def test_domain_update(): if os.environ.get('E2E', '0') != '1': return pytest.skip('skip E2E') # @UndefinedVariable tester = testsupport.prepare_tester_account() tester_domain = testsupport.prepare_tester_domain( domain_name='test.%s' % settings.ZENAIDA_SUPPORTED_ZONES[0], domain_epp_id=rpc_client.make_epp_id(tester.email), tester=tester, ) scenario = [] cs = domain_contacts_synchronizer.DomainContactsSynchronizer( update_domain=True, log_events=True, log_transitions=True, raise_errors=True, ) cs.add_state_changed_callback( cb=lambda oldstate, newstate, event, *args, **kwargs: scenario.append(( oldstate, newstate, event, )), ) cs.event('run', target_domain=tester_domain) outputs = list(cs.outputs) del cs assert scenario == [ ('AT_STARTUP', 'SYNC_CONTACTS', 'run'), ('SYNC_CONTACTS', 'DOMAIN_INFO?', 'all-contacts-in-sync'), ('DOMAIN_INFO?', 'DOMAIN_UPDATE', 'response'), ('DOMAIN_UPDATE', 'DONE', 'response'), ] assert len(outputs) == 5 assert outputs[0][0] == 'admin' assert outputs[0][1]['epp']['response']['resData']['creData'][ 'id'] == tester_domain.contact_admin.epp_id assert outputs[1][0] == 'billing' assert outputs[1][1]['epp']['response']['resData']['creData'][ 'id'] == tester_domain.contact_billing.epp_id assert outputs[2][0] == 'registrant' assert outputs[2][1]['epp']['response']['resData']['creData'][ 'id'] == tester_domain.registrant.epp_id assert outputs[3][0] == 'tech' assert outputs[3][1]['epp']['response']['resData']['creData'][ 'id'] == tester_domain.contact_tech.epp_id