本文整理汇总了Python中temba.contacts.models.Contact类的典型用法代码示例。如果您正苦于以下问题:Python Contact类的具体用法?Python Contact怎么用?Python Contact使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Contact类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: test_rule_first_ivr_flow
def test_rule_first_ivr_flow(self):
# connect it and check our client is configured
self.org.connect_twilio("TEST_SID", "TEST_TOKEN")
self.org.save()
# import an ivr flow
self.import_file('rule-first-ivr')
flow = Flow.objects.filter(name='Rule First IVR').first()
user_settings = self.admin.get_settings()
user_settings.tel = '+18005551212'
user_settings.save()
# start our flow`
eric = self.create_contact('Eric Newcomer', number='+13603621737')
eric.is_test = True
eric.save()
Contact.set_simulation(True)
flow.start([], [eric])
# should be using the usersettings number in test mode
self.assertEquals('Placing test call to +1 800-555-1212', ActionLog.objects.all().first().text)
# we should have an outbound ivr call now
call = IVRCall.objects.filter(direction=OUTGOING).first()
self.assertEquals(0, call.get_duration())
self.assertIsNotNone(call)
self.assertEquals('CallSid', call.external_id)
# after a call is picked up, twilio will call back to our server
post_data = dict(CallSid='CallSid', CallStatus='in-progress', CallDuration=20)
response = self.client.post(reverse('ivr.ivrcall_handle', args=[call.pk]), post_data)
self.assertContains(response, '<Say>Thanks for calling!</Say>')
开发者ID:mdheyab,项目名称:rapidpro,代码行数:34,代码来源:tests.py
示例2: get_context_data
def get_context_data(self, **kwargs):
org = self.request.user.get_org()
# if there isn't a search filtering the queryset, we can replace the count function with a quick cache lookup to
# speed up paging
if hasattr(self, 'folder') and 'search' not in self.request.REQUEST:
org.patch_folder_queryset(self.object_list, self.folder, self.request)
context = super(ContactListView, self).get_context_data(**kwargs)
folders = [dict(count=org.get_folder_count(OrgFolder.contacts_all), label=_("All Contacts"), url=reverse('contacts.contact_list')),
dict(count=org.get_folder_count(OrgFolder.contacts_failed), label=_("Failed"), url=reverse('contacts.contact_failed')),
dict(count=org.get_folder_count(OrgFolder.contacts_blocked), label=_("Blocked"), url=reverse('contacts.contact_blocked'))]
groups_qs = ContactGroup.user_groups.filter(org=org, is_active=True).select_related('org')
groups_qs = groups_qs.extra(select={'lower_group_name': 'lower(contacts_contactgroup.name)'}).order_by('lower_group_name')
groups = [dict(pk=g.pk, label=g.name, count=g.get_member_count(), is_dynamic=g.is_dynamic) for g in groups_qs]
# resolve the paginated object list so we can initialize a cache of URNs and fields
contacts = list(context['object_list'])
Contact.bulk_cache_initialize(org, contacts, for_show_only=True)
context['contacts'] = contacts
context['groups'] = groups
context['folders'] = folders
context['has_contacts'] = contacts or org.has_contacts()
context['send_form'] = SendMessageForm(self.request.user)
return context
开发者ID:austiine04,项目名称:rapidpro,代码行数:28,代码来源:views.py
示例3: start_call
def start_call(self, call, to, from_, status_callback):
if not settings.SEND_CALLS:
raise ValueError("SEND_CALLS set to False, skipping call start")
channel = call.channel
Contact.get_or_create(channel.org, URN.from_tel(to), channel)
# Verboice differs from Twilio in that they expect the first block of twiml up front
payload = str(Flow.handle_call(call))
# now we can post that to verboice
url = "%s?%s" % (self.endpoint, urlencode(dict(channel=self.verboice_channel, address=to)))
response = requests.post(url, data=payload, auth=self.auth).json()
if "call_id" not in response:
call.status = IVRCall.FAILED
call.save()
raise IVRException(_("Verboice connection failed."))
# store the verboice call id in our IVRCall
call.external_id = response["call_id"]
# the call was successfully sent to the IVR provider
call.status = IVRCall.WIRED
call.save()
开发者ID:teehamaral,项目名称:rapidpro,代码行数:26,代码来源:clients.py
示例4: send_message
def send_message(self, flow, message, restart_participants=False, contact=None, initiate_flow=False, assert_reply=True):
"""
Starts the flow, sends the message, returns the reply
"""
if not contact:
contact = self.contact
try:
if contact.is_test:
Contact.set_simulation(True)
incoming = self.create_msg(direction=INCOMING, contact=contact, text=message)
# start the flow
if initiate_flow:
flow.start(groups=[], contacts=[contact], restart_participants=restart_participants, start_msg=incoming)
else:
flow.start(groups=[], contacts=[contact], restart_participants=restart_participants)
self.assertTrue(flow.find_and_handle(incoming))
# our message should have gotten a reply
if assert_reply:
reply = Msg.objects.get(response_to=incoming)
self.assertEquals(contact, reply.contact)
return reply.text
return None
finally:
Contact.set_simulation(False)
开发者ID:AxisOfEval,项目名称:rapidpro,代码行数:30,代码来源:tests.py
示例5: send_message
def send_message(
self,
flow,
message,
restart_participants=False,
contact=None,
initiate_flow=False,
assert_reply=True,
assert_handle=True,
):
"""
Starts the flow, sends the message, returns the reply
"""
if not contact:
contact = self.contact
try:
if contact.is_test:
Contact.set_simulation(True)
incoming = self.create_msg(
direction=INCOMING, contact=contact, contact_urn=contact.get_urn(), text=message
)
# start the flow
if initiate_flow:
flow.start(
groups=[], contacts=[contact], restart_participants=restart_participants, start_msg=incoming
)
else:
flow.start(groups=[], contacts=[contact], restart_participants=restart_participants)
(handled, msgs) = Flow.find_and_handle(incoming)
Msg.mark_handled(incoming)
if assert_handle:
self.assertTrue(handled, "'%s' did not handle message as expected" % flow.name)
else:
self.assertFalse(handled, "'%s' handled message, was supposed to ignore" % flow.name)
# our message should have gotten a reply
if assert_reply:
replies = Msg.objects.filter(response_to=incoming).order_by("pk")
self.assertGreaterEqual(len(replies), 1)
if len(replies) == 1:
self.assertEqual(contact, replies.first().contact)
return replies.first().text
# if it's more than one, send back a list of replies
return [reply.text for reply in replies]
else:
# assert we got no reply
replies = Msg.objects.filter(response_to=incoming).order_by("pk")
self.assertFalse(replies)
return None
finally:
Contact.set_simulation(False)
开发者ID:mxabierto,项目名称:rapidpro,代码行数:60,代码来源:base.py
示例6: clean_csv_file
def clean_csv_file(self):
try:
Contact.get_import_file_headers(ContentFile(self.cleaned_data['csv_file'].read()))
except Exception as e:
raise forms.ValidationError(str(e))
return self.cleaned_data['csv_file']
开发者ID:austiine04,项目名称:rapidpro,代码行数:7,代码来源:views.py
示例7: test_twilio_failed_auth
def test_twilio_failed_auth(self):
def create(self, to=None, from_=None, url=None, status_callback=None):
from twilio import TwilioRestException
raise TwilioRestException(403, 'http://twilio.com', code=20003)
MockTwilioClient.MockCalls.create = create
# connect it and check our client is configured
self.org.connect_twilio("TEST_SID", "TEST_TOKEN")
self.org.save()
# import an ivr flow
self.import_file('call-me-maybe')
flow = Flow.objects.filter(name='Call me maybe').first()
user_settings = self.admin.get_settings()
user_settings.tel = '+18005551212'
user_settings.save()
test_contact = Contact.get_test_contact(self.admin)
Contact.set_simulation(True)
flow.start([], [test_contact])
log = ActionLog.objects.all().order_by('-pk').first()
self.assertEquals(log.text, 'Call ended. Could not authenticate with your Twilio account. '
'Check your token and try again.')
开发者ID:Ebaneck,项目名称:rapidpro,代码行数:26,代码来源:tests.py
示例8: send
def send(self, message, contact=None):
if not contact:
contact = self.contact
if contact.is_test:
Contact.set_simulation(True)
incoming = self.create_msg(direction=INCOMING, contact=contact, text=message)
Flow.find_and_handle(incoming)
return Msg.all_messages.filter(response_to=incoming).order_by('pk').first()
开发者ID:ewheeler,项目名称:rapidpro,代码行数:8,代码来源:tests.py
示例9: save
def save(self, obj):
urns = []
for field_key, value in self.form.cleaned_data.iteritems():
if field_key.startswith('__urn__') and value:
scheme = field_key[7:]
urns.append((scheme, value))
Contact.get_or_create(obj.org, self.request.user, obj.name, urns)
开发者ID:austiine04,项目名称:rapidpro,代码行数:8,代码来源:views.py
示例10: setUp
def setUp(self):
# if we are super verbose, turn on debug for sql queries
if self.get_verbosity() > 2:
settings.DEBUG = True
self.clear_cache()
self.superuser = User.objects.create_superuser(username="super", email="[email protected]", password="super")
# create different user types
self.non_org_user = self.create_user("NonOrg")
self.user = self.create_user("User")
self.editor = self.create_user("Editor")
self.admin = self.create_user("Administrator")
self.surveyor = self.create_user("Surveyor")
# setup admin boundaries for Rwanda
self.country = AdminBoundary.objects.create(osm_id='171496', name='Rwanda', level=0)
self.state1 = AdminBoundary.objects.create(osm_id='1708283', name='Kigali City', level=1, parent=self.country)
self.state2 = AdminBoundary.objects.create(osm_id='171591', name='Eastern Province', level=1, parent=self.country)
self.district1 = AdminBoundary.objects.create(osm_id='1711131', name='Gatsibo', level=2, parent=self.state2)
self.district2 = AdminBoundary.objects.create(osm_id='1711163', name='Kayônza', level=2, parent=self.state2)
self.district3 = AdminBoundary.objects.create(osm_id='3963734', name='Nyarugenge', level=2, parent=self.state1)
self.district4 = AdminBoundary.objects.create(osm_id='1711142', name='Rwamagana', level=2, parent=self.state2)
self.ward1 = AdminBoundary.objects.create(osm_id='171113181', name='Kageyo', level=3, parent=self.district1)
self.ward2 = AdminBoundary.objects.create(osm_id='171116381', name='Kabare', level=3, parent=self.district2)
self.ward3 = AdminBoundary.objects.create(osm_id='171114281', name='Bukure', level=3, parent=self.district4)
self.org = Org.objects.create(name="Temba", timezone="Africa/Kigali", country=self.country, brand=settings.DEFAULT_BRAND,
created_by=self.user, modified_by=self.user)
self.org.initialize(topup_size=1000)
# add users to the org
self.user.set_org(self.org)
self.org.viewers.add(self.user)
self.editor.set_org(self.org)
self.org.editors.add(self.editor)
self.admin.set_org(self.org)
self.org.administrators.add(self.admin)
self.surveyor.set_org(self.org)
self.org.surveyors.add(self.surveyor)
self.superuser.set_org(self.org)
# welcome topup with 1000 credits
self.welcome_topup = self.org.topups.all()[0]
# a single Android channel
self.channel = Channel.create(self.org, self.user, 'RW', 'A', name="Test Channel", address="+250785551212",
device="Nexus 5X", secret="12345", gcm_id="123")
# reset our simulation to False
Contact.set_simulation(False)
开发者ID:eHealthAfrica,项目名称:rapidpro,代码行数:58,代码来源:tests.py
示例11: send
def send(self, message, contact=None):
if not contact:
contact = self.contact
if contact.is_test:
Contact.set_simulation(True)
incoming = self.create_msg(direction=INCOMING, contact=contact, text=message)
# evaluate the inbound message against our triggers first
from temba.triggers.models import Trigger
if not Trigger.find_and_handle(incoming):
Flow.find_and_handle(incoming)
return Msg.objects.filter(response_to=incoming).order_by('pk').first()
开发者ID:eHealthAfrica,项目名称:rapidpro,代码行数:12,代码来源:tests.py
示例12: setUp
def setUp(self):
self.clear_cache()
self.superuser = User.objects.create_superuser(username="super", email="[email protected]", password="super")
# some users not tied to our org
self.non_org_user = self.create_user("NonOrg")
self.non_org_manager = self.create_user("NonOrgManager")
# our three user types inside our org
self.user = self.create_user("User")
self.root = self.create_user("Root")
self.root.groups.add(Group.objects.get(name="Alpha"))
self.admin = self.create_user("Administrator")
# setup admin boundaries for Rwanda
self.country = AdminBoundary.objects.create(osm_id='171496', name='Rwanda', level=0)
state1 = AdminBoundary.objects.create(osm_id='1708283', name='Kigali City', level=1, parent=self.country)
state2 = AdminBoundary.objects.create(osm_id='171591', name='Eastern Province', level=1, parent=self.country)
AdminBoundary.objects.create(osm_id='1711131', name='Gatsibo', level=2, parent=state2)
AdminBoundary.objects.create(osm_id='1711163', name='Kayonza', level=2, parent=state2)
AdminBoundary.objects.create(osm_id='60485579', name='Kigali', level=2, parent=state1)
AdminBoundary.objects.create(osm_id='1711142', name='Rwamagana', level=2, parent=state2)
self.org = Org.objects.create(name="Temba", timezone="Africa/Kigali", country=self.country,
created_by=self.user, modified_by=self.user)
self.org.initialize()
# add users to the org
self.org.administrators.add(self.admin)
self.admin.set_org(self.org)
self.org.administrators.add(self.root)
self.root.set_org(self.org)
self.user.set_org(self.org)
self.superuser.set_org(self.org)
# welcome topup with 1000 credits
self.welcome_topup = self.org.topups.all()[0]
# a single Android channel
self.channel = Channel.objects.create(org=self.org, name="Test Channel",
address="+250785551212", country='RW', channel_type='A',
secret="12345", gcm_id="123",
created_by=self.user, modified_by=self.user)
# reset our simulation to False
Contact.set_simulation(False)
开发者ID:joeynimu,项目名称:rapidpro,代码行数:50,代码来源:tests.py
示例13: setUp
def setUp(self):
self.clear_cache()
self.superuser = User.objects.create_superuser(username="super", email="[email protected]", password="super")
# create different user types
self.non_org_user = self.create_user("NonOrg")
self.user = self.create_user("User")
self.editor = self.create_user("Editor")
self.admin = self.create_user("Administrator")
self.surveyor = self.create_user("Surveyor")
# setup admin boundaries for Rwanda
self.country = AdminBoundary.objects.create(osm_id='171496', name='Rwanda', level=0)
self.state1 = AdminBoundary.objects.create(osm_id='1708283', name='Kigali City', level=1, parent=self.country)
self.state2 = AdminBoundary.objects.create(osm_id='171591', name='Eastern Province', level=1, parent=self.country)
self.district1 = AdminBoundary.objects.create(osm_id='1711131', name='Gatsibo', level=2, parent=self.state2)
self.district2 = AdminBoundary.objects.create(osm_id='1711163', name='Kayonza', level=2, parent=self.state2)
self.district3 = AdminBoundary.objects.create(osm_id='60485579', name='Kigali', level=2, parent=self.state1)
self.district4 = AdminBoundary.objects.create(osm_id='1711142', name='Rwamagana', level=2, parent=self.state2)
self.org = Org.objects.create(name="Temba", timezone="Africa/Kigali", country=self.country,
created_by=self.user, modified_by=self.user)
self.org.initialize()
# add users to the org
self.user.set_org(self.org)
self.org.viewers.add(self.user)
self.editor.set_org(self.org)
self.org.editors.add(self.editor)
self.admin.set_org(self.org)
self.org.administrators.add(self.admin)
self.surveyor.set_org(self.org)
self.org.surveyors.add(self.surveyor)
self.superuser.set_org(self.org)
# welcome topup with 1000 credits
self.welcome_topup = self.org.topups.all()[0]
# a single Android channel
self.channel = Channel.create(self.org, self.user, 'RW', 'A', name="Test Channel", address="+250785551212",
secret="12345", gcm_id="123")
# reset our simulation to False
Contact.set_simulation(False)
开发者ID:thierhost,项目名称:rapidpro,代码行数:49,代码来源:tests.py
示例14: test_contact_search
def test_contact_search(self):
contacts = self._create_contacts(10000, ["Bobby", "Jimmy", "Mary"])
self._create_values(contacts, self.field_nick, lambda c: c.name.lower().replace(' ', '_'))
with SegmentProfiler("Contact search with simple query", self, force_profile=True):
qs, is_complex = Contact.search(self.org, 'bob')
self.assertEqual(3334, qs.count())
self.assertEqual(False, is_complex)
with SegmentProfiler("Contact search with complex query", self, force_profile=True):
qs, is_complex = Contact.search(self.org, 'name = bob or tel has 078 or twitter = tweep_123 or nick is bob')
self.assertEqual(3377, qs.count())
self.assertEqual(True, is_complex)
开发者ID:Ilhasoft,项目名称:rapidpro,代码行数:15,代码来源:perf_tests.py
示例15: restore_object
def restore_object(self, attrs, instance=None):
"""
Actually start our flows for each contact
"""
if instance: # pragma: no cover
raise ValidationError("Invalid operation")
flow = attrs['flow']
channel = self.org.get_send_channel(TEL_SCHEME)
if 'urn' in attrs and attrs['urn']:
urns = attrs.get('urn', [])
else:
urns = attrs.get('phone', [])
contacts = []
for urn in urns:
# treat each URN as separate contact
contact = Contact.get_or_create(self.user, channel.org, urns=[urn], channel=channel)
contacts.append(contact)
# also add in any contacts specified by uuid
uuid_contacts = attrs.get('contact', [])
contacts += uuid_contacts
if contacts:
runs = flow.start([], contacts, restart_participants=True, extra=attrs.get('extra', None))
else:
runs = []
return runs
开发者ID:TextoCMR,项目名称:TexTo.cm,代码行数:31,代码来源:serializers.py
示例16: create_contact
def create_contact(self, name=None, number=None, twitter=None, twitterid=None, urn=None, is_test=False, **kwargs):
"""
Create a contact in the master test org
"""
urns = []
if number:
urns.append(URN.from_tel(number))
if twitter:
urns.append(URN.from_twitter(twitter))
if twitterid:
urns.append(URN.from_twitterid(twitterid))
if urn:
urns.append(urn)
if not name and not urns: # pragma: no cover
raise ValueError("Need a name or URN to create a contact")
kwargs["name"] = name
kwargs["urns"] = urns
kwargs["is_test"] = is_test
if "org" not in kwargs:
kwargs["org"] = self.org
if "user" not in kwargs:
kwargs["user"] = self.user
return Contact.get_or_create_by_urns(**kwargs)
开发者ID:mxabierto,项目名称:rapidpro,代码行数:27,代码来源:base.py
示例17: start_call
def start_call(self, call, to, from_, status_callback):
channel = call.channel
Contact.get_or_create(channel.org, channel.created_by, urns=[(TEL_SCHEME, to)])
# Verboice differs from Twilio in that they expect the first block of twiml up front
payload = unicode(Flow.handle_call(call, {}))
# now we can post that to verboice
url = "%s?%s" % (self.endpoint, urlencode(dict(channel=self.verboice_channel, address=to)))
response = requests.post(url, data=payload, auth=self.auth).json()
# store the verboice call id in our IVRCall
call.external_id = response['call_id']
call.status = IN_PROGRESS
call.save()
开发者ID:AbrahamKiggundu,项目名称:rapidpro,代码行数:16,代码来源:clients.py
示例18: validate_urns
def validate_urns(self, value):
urn_contacts = []
for urn in value:
contact = Contact.get_or_create(self.context['org'], self.context['user'], urns=[urn])
urn_contacts.append(contact)
return urn_contacts
开发者ID:ewheeler,项目名称:rapidpro,代码行数:7,代码来源:serializers.py
示例19: save
def save(self):
"""
Create a new broadcast to send out
"""
contact_urns = []
for urn in self.validated_data.get("urns", []):
# create contacts for URNs if necessary
__, contact_urn = Contact.get_or_create(self.context["org"], urn, user=self.context["user"])
contact_urns.append(contact_urn)
text, base_language = self.validated_data["text"]
# create the broadcast
broadcast = Broadcast.create(
self.context["org"],
self.context["user"],
text=text,
base_language=base_language,
groups=self.validated_data.get("groups", []),
contacts=self.validated_data.get("contacts", []),
urns=contact_urns,
channel=self.validated_data.get("channel"),
)
# send in task
on_transaction_commit(lambda: send_broadcast_task.delay(broadcast.id))
return broadcast
开发者ID:teehamaral,项目名称:rapidpro,代码行数:28,代码来源:serializers.py
示例20: send_spam
def send_spam(user_id, contact_id): # pragma: no cover
"""
Processses a single incoming message through our queue.
"""
from django.contrib.auth.models import User
from temba.contacts.models import Contact, TEL_SCHEME
from temba.msgs.models import Broadcast
contact = Contact.all().get(pk=contact_id)
user = User.objects.get(pk=user_id)
channel = contact.org.get_send_channel(TEL_SCHEME)
if not channel: # pragma: no cover
print("Sorry, no channel to be all spammy with")
return
long_text = (
"Test Message #%d. The path of the righteous man is beset on all sides by the iniquities of the "
"selfish and the tyranny of evil men. Blessed is your face."
)
# only trigger sync on the last one
for idx in range(10):
broadcast = Broadcast.create(contact.org, user, long_text % (idx + 1), contacts=[contact])
broadcast.send(trigger_send=(idx == 149))
开发者ID:teehamaral,项目名称:rapidpro,代码行数:25,代码来源:tasks.py
注:本文中的temba.contacts.models.Contact类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论