本文整理汇总了Python中temba.contacts.models.ContactGroup类的典型用法代码示例。如果您正苦于以下问题:Python ContactGroup类的具体用法?Python ContactGroup怎么用?Python ContactGroup使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ContactGroup类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: test_groups
def test_groups(self):
url = reverse('api.v2.groups')
self.assertEndpointAccess(url)
customers = ContactGroup.get_or_create(self.org, self.admin, "Customers")
developers = ContactGroup.get_or_create(self.org, self.admin, "Developers")
ContactGroup.get_or_create(self.org2, self.admin2, "Spammers")
developers.update_contacts(self.admin, [self.frank], add=True)
# no filtering
with self.assertNumQueries(NUM_BASE_REQUEST_QUERIES + 3):
response = self.fetchJSON(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json['next'], None)
self.assertEqual(response.json['results'], [
{'uuid': developers.uuid, 'name': "Developers", 'count': 1},
{'uuid': customers.uuid, 'name': "Customers", 'count': 0}
])
# filter by UUID
response = self.fetchJSON(url, 'uuid=%s' % customers.uuid)
self.assertEqual(response.json['results'], [{'uuid': customers.uuid, 'name': "Customers", 'count': 0}])
示例2: test_groups
def test_groups(self):
url = reverse('api.v2.groups')
self.assertEndpointAccess(url)
customers = self.create_group("Customers", [self.frank])
developers = self.create_group("Developers", query="isdeveloper = YES")
# group belong to other org
ContactGroup.get_or_create(self.org2, self.admin2, "Spammers")
# no filtering
with self.assertNumQueries(NUM_BASE_REQUEST_QUERIES + 3):
response = self.fetchJSON(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json['next'], None)
self.assertEqual(response.json['results'], [
{'uuid': developers.uuid, 'name': "Developers", 'query': "isdeveloper = YES", 'count': 0},
{'uuid': customers.uuid, 'name': "Customers", 'query': None, 'count': 1}
])
# filter by UUID
response = self.fetchJSON(url, 'uuid=%s' % customers.uuid)
self.assertResultsByUUID(response, [customers])
示例3: validate_groups
def validate_groups(self, value):
if value is not None:
self.group_objs = []
for name in value:
if not ContactGroup.is_valid_name(name):
raise serializers.ValidationError(_("Invalid group name: '%s'") % name)
self.group_objs.append(ContactGroup.get_or_create(self.org, self.user, name))
return value
示例4: clean
def clean(self, value):
if value.startswith("[_NEW_]"):
value = value[7:]
# we must get groups for this org only
group = ContactGroup.get_user_group(self.user.get_org(), value)
if not group:
group = ContactGroup.create_static(self.user.get_org(), self.user, name=value)
return group
return super(RegisterTriggerForm.AddNewGroupChoiceField, self).clean(value)
示例5: create_group
def create_group(self, name, contacts=(), query=None):
if contacts and query:
raise ValueError("Can't provide contact list for a dynamic group")
if query:
return ContactGroup.create_dynamic(self.org, self.user, name, query=query)
else:
group = ContactGroup.create_static(self.org, self.user, name)
if contacts:
group.contacts.add(*contacts)
return group
示例6: clean
def clean(self, value):
if value.startswith("[_NEW_]"): # pragma: needs cover
value = value[7:]
# we must get groups for this org only
group = ContactGroup.get_user_group(self.user.get_org(), value)
if not group:
group = ContactGroup.create_static(self.user.get_org(), self.user, name=value)
return group
return super().clean(value)
示例7: __init__
def __init__(self, *args, **kwargs):
self.user = kwargs["user"]
del kwargs["user"]
super().__init__(*args, **kwargs)
self.fields["group"].initial = self.instance.group
self.fields["group"].queryset = ContactGroup.get_user_groups(self.user.get_org(), ready_only=False)
示例8: clean_name
def clean_name(self):
data = self.cleaned_data['name'].strip()
if not ContactGroup.is_valid_name(data):
raise forms.ValidationError("Group name must not be blank or begin with + or -")
return data
示例9: test_campaigns
def test_campaigns(self):
url = reverse('api.v2.campaigns')
self.assertEndpointAccess(url)
reporters = self.create_group("Reporters", [self.joe, self.frank])
campaign1 = Campaign.create(self.org, self.admin, "Reminders #1", reporters)
campaign2 = Campaign.create(self.org, self.admin, "Reminders #2", reporters)
# create campaign for other org
spammers = ContactGroup.get_or_create(self.org2, self.admin2, "Spammers")
Campaign.create(self.org2, self.admin2, "Cool stuff", spammers)
# no filtering
with self.assertNumQueries(NUM_BASE_REQUEST_QUERIES + 2):
response = self.fetchJSON(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json['next'], None)
self.assertResultsByUUID(response, [campaign2, campaign1])
self.assertEqual(response.json['results'][0], {
'uuid': campaign2.uuid,
'name': "Reminders #2",
'group': {'uuid': reporters.uuid, 'name': "Reporters"},
'created_on': format_datetime(campaign2.created_on)
})
# filter by UUID
response = self.fetchJSON(url, 'uuid=%s' % campaign1.uuid)
self.assertResultsByUUID(response, [campaign1])
示例10: import_triggers
def import_triggers(cls, exported_json, org, user, same_site=False):
"""
Import triggers from our export file
"""
from temba.orgs.models import EARLIEST_IMPORT_VERSION
if exported_json.get('version', 0) < EARLIEST_IMPORT_VERSION:
raise ValueError(_("Unknown version (%s)" % exported_json.get('version', 0)))
# first things first, let's create our groups if necesary and map their ids accordingly
if 'triggers' in exported_json:
for trigger_spec in exported_json['triggers']:
# resolve our groups
groups = []
for group_spec in trigger_spec['groups']:
group = None
if same_site:
group = ContactGroup.user_groups.filter(org=org, pk=group_spec['id']).first()
if not group:
group = ContactGroup.user_groups.filter(org=org, name=group_spec['name']).first()
if not group:
group = ContactGroup.create(org, user, group_spec['name'])
if not group.is_active:
group.is_active = True
group.save()
groups.append(group)
flow = Flow.objects.get(org=org, pk=trigger_spec['flow']['id'])
# see if that trigger already exists
trigger = Trigger.objects.filter(org=org, trigger_type=trigger_spec['trigger_type'])
if trigger_spec['keyword']:
trigger = trigger.filter(keyword__iexact=trigger_spec['keyword'])
if groups:
trigger = trigger.filter(groups__in=groups)
trigger = trigger.first()
channel = trigger_spec.get('channel', None) # older exports won't have a channel
if trigger:
trigger.is_archived = False
trigger.flow = flow
trigger.save()
else:
trigger = Trigger.objects.create(org=org, trigger_type=trigger_spec['trigger_type'],
keyword=trigger_spec['keyword'], flow=flow,
created_by=user, modified_by=user,
channel=channel)
for group in groups:
trigger.groups.add(group)
示例11: get_context_data
def get_context_data(self, **kwargs):
org = self.request.user.get_org()
counts = ContactGroup.get_system_group_counts(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, 'system_group') and 'search' not in self.request.REQUEST:
self.object_list.count = lambda: counts[self.system_group]
context = super(ContactListView, self).get_context_data(**kwargs)
folders = [dict(count=counts[ContactGroup.TYPE_ALL], label=_("All Contacts"), url=reverse('contacts.contact_list')),
dict(count=counts[ContactGroup.TYPE_FAILED], label=_("Failed"), url=reverse('contacts.contact_failed')),
dict(count=counts[ContactGroup.TYPE_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
示例12: test_campaign_events
def test_campaign_events(self):
url = reverse('api.v2.campaign_events')
self.assertEndpointAccess(url)
flow = self.create_flow()
reporters = self.create_group("Reporters", [self.joe, self.frank])
registration = ContactField.get_or_create(self.org, self.admin, 'registration', "Registration")
campaign1 = Campaign.create(self.org, self.admin, "Reminders", reporters)
event1 = CampaignEvent.create_message_event(self.org, self.admin, campaign1, registration,
1, CampaignEvent.UNIT_DAYS, "Don't forget to brush your teeth")
campaign2 = Campaign.create(self.org, self.admin, "Notifications", reporters)
event2 = CampaignEvent.create_flow_event(self.org, self.admin, campaign2, registration,
6, CampaignEvent.UNIT_HOURS, flow, delivery_hour=12)
# create event for another org
joined = ContactField.get_or_create(self.org2, self.admin2, 'joined', "Joined On")
spammers = ContactGroup.get_or_create(self.org2, self.admin2, "Spammers")
spam = Campaign.create(self.org2, self.admin2, "Cool stuff", spammers)
CampaignEvent.create_flow_event(self.org2, self.admin2, spam, joined,
6, CampaignEvent.UNIT_HOURS, flow, delivery_hour=12)
# no filtering
with self.assertNumQueries(NUM_BASE_REQUEST_QUERIES + 4):
response = self.fetchJSON(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json['next'], None)
self.assertResultsByUUID(response, [event2, event1])
self.assertEqual(response.json['results'][0], {
'uuid': event2.uuid,
'campaign': {'uuid': campaign2.uuid, 'name': "Notifications"},
'relative_to': {'key': "registration", 'label': "Registration"},
'offset': 6,
'unit': 'hours',
'delivery_hour': 12,
'flow': {'uuid': flow.uuid, 'name': "Color Flow"},
'message': None,
'created_on': format_datetime(event2.created_on)
})
# filter by UUID
response = self.fetchJSON(url, 'uuid=%s' % event1.uuid)
self.assertResultsByUUID(response, [event1])
# filter by campaign name
response = self.fetchJSON(url, 'campaign=Reminders')
self.assertResultsByUUID(response, [event1])
# filter by campaign UUID
response = self.fetchJSON(url, 'campaign=%s' % campaign1.uuid)
self.assertResultsByUUID(response, [event1])
# filter by invalid campaign
response = self.fetchJSON(url, 'campaign=invalid')
self.assertResultsByUUID(response, [])
示例13: create_groups
def create_groups(self, orgs):
"""
Creates the contact groups for each org
"""
self._log("Creating %d groups... " % (len(orgs) * len(GROUPS)))
for org in orgs:
user = org.cache["users"][0]
for g in GROUPS:
if g["query"]:
group = ContactGroup.create_dynamic(org, user, g["name"], g["query"], evaluate=False)
else:
group = ContactGroup.create_static(org, user, g["name"])
group.member = g["member"]
group.count = 0
org.cache["groups"].append(group)
self._log(self.style.SUCCESS("OK") + "\n")
示例14: save
def save(self):
name = self.validated_data.get("name")
if self.instance:
self.instance.name = name
self.instance.save(update_fields=("name",))
return self.instance
else:
return ContactGroup.get_or_create(self.context["org"], self.context["user"], name)
示例15: _create_groups
def _create_groups(self, count, base_names, contacts):
"""
Creates the given number of groups and fills them with contacts
"""
groups = []
num_bases = len(base_names)
for g in range(0, count):
name = '%s %d' % (base_names[g % num_bases], g + 1)
group = ContactGroup.create_static(self.org, self.user, name)
group.contacts.add(*contacts[(g % num_bases)::num_bases])
groups.append(ContactGroup.user_groups.get(pk=group.pk))
return groups