本文整理汇总了Python中temba.contacts.models.ContactField类的典型用法代码示例。如果您正苦于以下问题:Python ContactField类的具体用法?Python ContactField怎么用?Python ContactField使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了ContactField类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: setUp
def setUp(self):
self.clear_cache()
self.user = self.create_user("tito")
self.admin = self.create_user("Administrator")
self.org = Org.objects.create(name="Nyaruka Ltd.", timezone="Africa/Kigali",
created_by=self.user, modified_by=self.user)
self.org.initialize()
self.org.administrators.add(self.admin)
self.admin.set_org(self.org)
self.org.administrators.add(self.user)
self.user.set_org(self.org)
self.tel_mtn = Channel.objects.create(org=self.org, name="MTN", channel_type="A", role="SR",
address="+250780000000", secret="12345", gcm_id="123",
created_by=self.user, modified_by=self.user)
self.tel_tigo = Channel.objects.create(org=self.org, name="Tigo", channel_type="A", role="SR",
address="+250720000000", secret="23456", gcm_id="234",
created_by=self.user, modified_by=self.user)
self.tel_bulk = Channel.objects.create(org=self.org, name="Nexmo", channel_type="NX", role="S",
parent=self.tel_tigo, secret="34567",
created_by=self.user, modified_by=self.user)
self.twitter = Channel.objects.create(org=self.org, name="Twitter", channel_type="TT", role="SR",
created_by=self.user, modified_by=self.user)
# for generating tuples of scheme, path and channel
generate_tel_mtn = lambda num: (TEL_SCHEME, "+25078%07d" % (num + 1), self.tel_mtn)
generate_tel_tigo = lambda num: (TEL_SCHEME, "+25072%07d" % (num + 1), self.tel_tigo)
generate_twitter = lambda num: (TWITTER_SCHEME, "tweep_%d" % (num + 1), self.twitter)
self.urn_generators = (generate_tel_mtn, generate_tel_tigo, generate_twitter)
self.field_nick = ContactField.get_or_create(self.org, 'nick', 'Nickname', show_in_table=True, value_type=TEXT)
self.field_age = ContactField.get_or_create(self.org, 'age', 'Age', show_in_table=True, value_type=DECIMAL)
开发者ID:joeynimu,项目名称:rapidpro,代码行数:34,代码来源:perf_tests.py
示例2: setUp
def setUp(self):
self.clear_cache()
self.user = self.create_user("tito")
self.admin = self.create_user("Administrator")
self.org = Org.objects.create(name="Nyaruka Ltd.", timezone="Africa/Kigali",
created_by=self.user, modified_by=self.user)
self.org.initialize()
self.org.administrators.add(self.admin)
self.admin.set_org(self.org)
self.org.administrators.add(self.user)
self.user.set_org(self.org)
self.tel_mtn = Channel.create(self.org, self.user, 'RW', 'A', name="MTN", address="+250780000000",
secret="12345", gcm_id="123")
self.tel_tigo = Channel.create(self.org, self.user, 'RW', 'A', name="Tigo", address="+250720000000",
secret="23456", gcm_id="234")
self.tel_bulk = Channel.create(self.org, self.user, 'RW', 'NX', name="Nexmo", parent=self.tel_tigo)
self.twitter = Channel.create(self.org, self.user, None, 'TT', name="Twitter", address="billy_bob")
# for generating tuples of scheme, path and channel
def generate_tel_mtn(num):
return TEL_SCHEME, "+25078%07d" % (num + 1), self.tel_mtn
def generate_tel_tigo(num):
return TEL_SCHEME, "+25072%07d" % (num + 1), self.tel_tigo
def generate_twitter(num):
return TWITTER_SCHEME, "tweep_%d" % (num + 1), self.twitter
self.urn_generators = (generate_tel_mtn, generate_tel_tigo, generate_twitter)
self.field_nick = ContactField.get_or_create(self.org, self.admin, 'nick', 'Nickname', show_in_table=True, value_type=Value.TYPE_TEXT)
self.field_age = ContactField.get_or_create(self.org, self.admin, 'age', 'Age', show_in_table=True, value_type=Value.TYPE_DECIMAL)
开发者ID:Ilhasoft,项目名称:rapidpro,代码行数:35,代码来源:perf_tests.py
示例3: test_field_results
def test_field_results(self):
(c1, c2, c3, c4) = (self.create_contact("Contact1", '0788111111'),
self.create_contact("Contact2", '0788222222'),
self.create_contact("Contact3", '0788333333'),
self.create_contact("Contact4", '0788444444'))
# create a gender field that uses strings
gender = ContactField.get_or_create(self.org, 'gender', label="Gender", value_type=TEXT)
c1.set_field('gender', "Male")
c2.set_field('gender', "Female")
c3.set_field('gender', "Female")
result = Value.get_value_summary(contact_field=gender)[0]
self.assertEquals(2, len(result['categories']))
self.assertEquals(3, result['set'])
self.assertEquals(2, result['unset']) # this is two as we have the default contact created by our unit tests
self.assertFalse(result['open_ended'])
self.assertResult(result, 0, "Female", 2)
self.assertResult(result, 1, "Male", 1)
# create an born field that uses decimals
born = ContactField.get_or_create(self.org, 'born', label="Born", value_type=DECIMAL)
c1.set_field('born', 1977)
c2.set_field('born', 1990)
c3.set_field('born', 1977)
result = Value.get_value_summary(contact_field=born)[0]
self.assertEquals(2, len(result['categories']))
self.assertEquals(3, result['set'])
self.assertEquals(2, result['unset'])
self.assertFalse(result['open_ended'])
self.assertResult(result, 0, "1977", 2)
self.assertResult(result, 1, "1990", 1)
# ok, state field!
state = ContactField.get_or_create(self.org, 'state', label="State", value_type=STATE)
c1.set_field('state', "Kigali City")
c2.set_field('state', "Kigali City")
result = Value.get_value_summary(contact_field=state)[0]
self.assertEquals(1, len(result['categories']))
self.assertEquals(2, result['set'])
self.assertEquals(3, result['unset'])
self.assertResult(result, 0, "1708283", 2)
reg_date = ContactField.get_or_create(self.org, 'reg_date', label="Registration Date", value_type=DATETIME)
now = timezone.now()
c1.set_field('reg_date', now.replace(hour=9))
c2.set_field('reg_date', now.replace(hour=4))
c3.set_field('reg_date', now - timedelta(days=1))
result = Value.get_value_summary(contact_field=reg_date)[0]
self.assertEquals(2, len(result['categories']))
self.assertEquals(3, result['set'])
self.assertEquals(2, result['unset'])
self.assertResult(result, 0, (now - timedelta(days=1)).replace(hour=0, minute=0, second=0, microsecond=0), 1)
self.assertResult(result, 1, now.replace(hour=0, minute=0, second=0, microsecond=0), 2)
开发者ID:TextoCMR,项目名称:TexTo.cm,代码行数:58,代码来源:tests.py
示例4: 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, [])
开发者ID:JediKoder,项目名称:rapidpro,代码行数:58,代码来源:test_v2.py
示例5: save
def save(self):
label = self.validated_data.get("label")
value_type = self.validated_data.get("value_type")
if self.instance:
key = self.instance.key
else:
key = ContactField.make_key(label)
return ContactField.get_or_create(self.context["org"], self.context["user"], key, label, value_type=value_type)
开发者ID:teehamaral,项目名称:rapidpro,代码行数:10,代码来源:serializers.py
示例6: setUp
def setUp(self):
super().setUp()
self.planting_date = ContactField.get_or_create(
self.org, self.admin, "planting_date", "Planting Date", value_type=Value.TYPE_DATETIME
)
self.contact = self.create_contact("Ben Haggerty", number="+12065552020")
self.contact.set_field(self.admin, "planting_date", "2018-06-23T13:48:12.123456Z")
# create a campaign with a message event 1 day after planting date
self.farmers = self.create_group("Farmers", [self.contact])
self.campaign = Campaign.create(self.org, self.admin, "Planting Reminders", self.farmers)
self.event = CampaignEvent.create_message_event(
self.org,
self.admin,
self.campaign,
relative_to=self.planting_date,
offset=1,
unit="D",
message={
"eng": "Hi @(upper(contact.name)) don't forget to plant on @(format_date(contact.planting_date))"
},
base_language="eng",
)
开发者ID:mxabierto,项目名称:rapidpro,代码行数:25,代码来源:tests.py
示例7: contact_field
def contact_field(contact, arg):
field = ContactField.get_by_key(contact.org, arg.lower())
if field is None:
return MISSING_VALUE
value = contact.get_field_display(field)
return value or MISSING_VALUE
开发者ID:teehamaral,项目名称:rapidpro,代码行数:7,代码来源:contacts.py
示例8: pre_save
def pre_save(self, task):
extra_fields = []
cleaned_data = self.form.cleaned_data
# enumerate the columns which the user has chosen to include as fields
for column in self.column_controls:
if cleaned_data[column['include_field']]:
label = cleaned_data[column['label_field']]
label = label.strip()
value_type = cleaned_data[column['type_field']]
org = self.derive_org()
field_key = slugify_with(label)
existing_field = ContactField.get_by_label(org, label)
if existing_field:
field_key = existing_field.key
extra_fields.append(dict(key=field_key, header=column['header'], label=label, type=value_type))
# update the extra_fields in the task's params
params = json.loads(task.import_params)
params['extra_fields'] = extra_fields
task.import_params = json.dumps(params)
return task
开发者ID:thierhost,项目名称:rapidpro,代码行数:26,代码来源:views.py
示例9: restore_object
def restore_object(self, attrs, instance=None):
"""
Update our contact field
"""
if instance: # pragma: no cover
raise ValidationError("Invalid operation")
org = self.user.get_org()
key = attrs.get('key', None)
label = attrs.get('label')
value_type = attrs.get('value_type')
if not key:
key = ContactField.make_key(label)
return ContactField.get_or_create(org, key, label, value_type=value_type)
开发者ID:AxisOfEval,项目名称:rapidpro,代码行数:16,代码来源:serializers.py
示例10: validate
def validate(self, data):
key = data.get("key")
label = data.get("label")
if not key:
key = ContactField.make_key(label)
if not ContactField.is_valid_key(key):
raise serializers.ValidationError(_("Generated key for '%s' is invalid or a reserved name") % label)
fields_count = ContactField.user_fields.filter(org=self.org).count()
if not self.instance and fields_count >= ContactField.MAX_ORG_CONTACTFIELDS:
raise serializers.ValidationError(
"This org has %s contact fields and the limit is %s. "
"You must delete existing ones before "
"you can create new ones." % (fields_count, ContactField.MAX_ORG_CONTACTFIELDS)
)
data["key"] = key
return data
开发者ID:teehamaral,项目名称:rapidpro,代码行数:19,代码来源:serializers.py
示例11: get_contact_field
def get_contact_field(cls, path):
parts = path.split(".")
if len(parts) > 1:
if parts[0] in ("parent", "child"):
parts = parts[1:]
if len(parts) < 2:
return None
if parts[0] == "contact":
field_name = parts[1]
if ContactField.is_valid_key(field_name):
return parts[1]
return None
开发者ID:mxabierto,项目名称:rapidpro,代码行数:12,代码来源:expressions.py
示例12: clean
def clean(self):
for key in self.cleaned_data:
if key.startswith('field_'):
idx = key[6:]
label = self.cleaned_data["label_%s" % idx]
if label:
if not ContactField.is_valid_label(label):
raise forms.ValidationError(_("Field names can only contain letters, numbers, spaces and hypens"))
elif label in RESERVED_CONTACT_FIELDS:
raise forms.ValidationError(_("Field name '%s' is a reserved word") % label)
return self.cleaned_data
开发者ID:AxisOfEval,项目名称:rapidpro,代码行数:13,代码来源:views.py
示例13: clean
def clean(self):
# don't allow users to specify field keys or labels
re_col_name_field = re.compile(r'column_\w+_label')
for key, value in self.data.items():
if re_col_name_field.match(key):
field_label = value
field_key = slugify_with(value)
if not ContactField.is_valid_label(field_label):
raise ValidationError(_("Field names can only contain letters, numbers, spaces and hypens"))
if field_key in RESERVED_CONTACT_FIELDS:
raise ValidationError(_("%s is a reserved name for contact fields") % value)
return self.cleaned_data
开发者ID:austiine04,项目名称:rapidpro,代码行数:14,代码来源:views.py
示例14: create_event
def create_event(event_spec, notification, campaign):
org = notification.org_dest
user = notification.created_by
relative_to = ContactField.get_or_create(
org,
user,
key=event_spec["relative_to"]["key"],
label=event_spec["relative_to"]["label"],
value_type="D",
)
# create our message flow for message events
if event_spec["event_type"] == CampaignEvent.TYPE_MESSAGE:
message = event_spec["message"]
base_language = event_spec.get("base_language")
if not isinstance(message, dict):
try:
message = json.loads(message)
except ValueError:
# if it's not a language dict, turn it into one
message = dict(base=message)
base_language = "base"
event = CampaignEvent.create_message_event(
org,
user,
campaign,
relative_to,
event_spec["offset"],
event_spec["unit"],
message,
event_spec["delivery_hour"],
base_language=base_language,
)
event.update_flow_name()
else:
flow = Flow.objects.filter(org=org, is_active=True, name=event_spec["flow"]["name"]).last()
if flow:
CampaignEvent.create_flow_event(
org,
user,
campaign,
relative_to,
event_spec["offset"],
event_spec["unit"],
flow,
event_spec["delivery_hour"],
)
开发者ID:mxabierto,项目名称:rapidpro,代码行数:47,代码来源:tasks.py
示例15: clean
def clean(self):
used_labels = []
for key in self.cleaned_data:
if key.startswith('field_'):
idx = key[6:]
label = self.cleaned_data["label_%s" % idx]
if label:
if not ContactField.is_valid_label(label):
raise forms.ValidationError(_("Field names can only contain letters, numbers and hypens"))
if label.lower() in used_labels:
raise ValidationError(_("Field names must be unique"))
elif label in Contact.RESERVED_FIELDS:
raise forms.ValidationError(_("Field name '%s' is a reserved word") % label)
used_labels.append(label.lower())
return self.cleaned_data
开发者ID:thierhost,项目名称:rapidpro,代码行数:19,代码来源:views.py
示例16: setUp
def setUp(self):
super(CampaignTest, self).setUp()
self.farmer1 = self.create_contact("Rob Jasper", "+250788111111")
self.farmer2 = self.create_contact("Mike Gordon", "+250788222222")
self.nonfarmer = self.create_contact("Trey Anastasio", "+250788333333")
self.farmers = self.create_group("Farmers", [self.farmer1, self.farmer2])
self.reminder_flow = self.create_flow()
self.reminder2_flow = self.create_flow()
# create a voice flow to make sure they work too, not a proper voice flow but
# sufficient for assuring these flow types show up where they should
self.voice_flow = self.create_flow()
self.voice_flow.name = 'IVR flow'
self.voice_flow.flow_type = 'V'
self.voice_flow.save()
# create a contact field for our planting date
self.planting_date = ContactField.get_or_create(self.org, self.admin, 'planting_date', "Planting Date")
开发者ID:ewheeler,项目名称:rapidpro,代码行数:21,代码来源:tests.py
示例17: form_valid
def form_valid(self, form):
try:
cleaned_data = form.cleaned_data
org = self.request.user.get_org()
for key in cleaned_data:
if key.startswith('field_'):
idx = key[6:]
label = cleaned_data["label_%s" % idx]
field = cleaned_data[key]
show_in_table = cleaned_data["show_%s" % idx]
value_type = cleaned_data['type_%s' % idx]
if field == '__new_field':
if label:
analytics.track(self.request.user.username, 'temba.contactfield_created')
key = ContactField.make_key(label)
ContactField.get_or_create(org, key, label, show_in_table=show_in_table, value_type=value_type)
else:
if label:
ContactField.get_or_create(org, field.key, label, show_in_table=show_in_table, value_type=value_type)
else:
ContactField.hide_field(org, field.key)
if 'HTTP_X_PJAX' not in self.request.META:
return HttpResponseRedirect(self.get_success_url())
else: # pragma: no cover
return self.render_to_response(self.get_context_data(form=form,
success_url=self.get_success_url(),
success_script=getattr(self, 'success_script', None)))
except IntegrityError as e: # pragma: no cover
message = str(e).capitalize()
errors = self.form._errors.setdefault(forms.forms.NON_FIELD_ERRORS, forms.utils.ErrorList())
errors.append(message)
return self.render_to_response(self.get_context_data(form=form))
开发者ID:austiine04,项目名称:rapidpro,代码行数:36,代码来源:views.py
示例18: test_fields
def test_fields(self):
url = reverse('api.v2.fields')
self.assertEndpointAccess(url)
ContactField.get_or_create(self.org, self.admin, 'nick_name', "Nick Name")
ContactField.get_or_create(self.org, self.admin, 'registered', "Registered On", value_type=Value.TYPE_DATETIME)
ContactField.get_or_create(self.org2, self.admin2, 'not_ours', "Something Else")
# no filtering
with self.assertNumQueries(NUM_BASE_REQUEST_QUERIES + 1):
response = self.fetchJSON(url)
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json['next'], None)
self.assertEqual(response.json['results'], [
{'key': 'registered', 'label': "Registered On", 'value_type': "datetime"},
{'key': 'nick_name', 'label': "Nick Name", 'value_type': "text"}
])
# filter by key
response = self.fetchJSON(url, 'key=nick_name')
self.assertEqual(response.json['results'], [{'key': 'nick_name', 'label': "Nick Name", 'value_type': "text"}])
开发者ID:churcho,项目名称:rapidpro,代码行数:23,代码来源:test_v2.py
示例19: import_campaigns
def import_campaigns(cls, exported_json, org, user, same_site=False):
"""
Import campaigns from our export file
"""
from temba.orgs.models import EARLIEST_IMPORT_VERSION
if Flow.is_before_version(exported_json.get("version", "0"), EARLIEST_IMPORT_VERSION): # pragma: needs cover
raise ValueError(_("Unknown version (%s)" % exported_json.get("version", 0)))
if "campaigns" in exported_json:
for campaign_spec in exported_json["campaigns"]:
name = campaign_spec["name"]
campaign = None
group = None
# first check if we have the objects by id
if same_site:
group = ContactGroup.user_groups.filter(uuid=campaign_spec["group"]["uuid"], org=org).first()
if group: # pragma: needs cover
group.name = campaign_spec["group"]["name"]
group.save()
campaign = Campaign.objects.filter(org=org, uuid=campaign_spec["uuid"]).first()
if campaign: # pragma: needs cover
campaign.name = Campaign.get_unique_name(org, name, ignore=campaign)
campaign.save()
# fall back to lookups by name
if not group:
group = ContactGroup.get_user_group(org, campaign_spec["group"]["name"])
if not campaign:
campaign = Campaign.objects.filter(org=org, name=name).first()
# all else fails, create the objects from scratch
if not group:
group = ContactGroup.create_static(org, user, campaign_spec["group"]["name"])
if not campaign:
campaign_name = Campaign.get_unique_name(org, name)
campaign = Campaign.create(org, user, campaign_name, group)
else:
campaign.group = group
campaign.save()
# deactivate all of our events, we'll recreate these
for event in campaign.events.all():
event.release()
# fill our campaign with events
for event_spec in campaign_spec["events"]:
field_key = event_spec["relative_to"]["key"]
if field_key == "created_on":
relative_to = ContactField.system_fields.filter(org=org, key=field_key).first()
else:
relative_to = ContactField.get_or_create(
org, user, key=field_key, label=event_spec["relative_to"]["label"], value_type="D"
)
start_mode = event_spec.get("start_mode", CampaignEvent.MODE_INTERRUPT)
# create our message flow for message events
if event_spec["event_type"] == CampaignEvent.TYPE_MESSAGE:
message = event_spec["message"]
base_language = event_spec.get("base_language")
if not isinstance(message, dict):
try:
message = json.loads(message)
except ValueError:
# if it's not a language dict, turn it into one
message = dict(base=message)
base_language = "base"
event = CampaignEvent.create_message_event(
org,
user,
campaign,
relative_to,
event_spec["offset"],
event_spec["unit"],
message,
event_spec["delivery_hour"],
base_language=base_language,
start_mode=start_mode,
)
event.update_flow_name()
else:
flow = Flow.objects.filter(
org=org, is_active=True, is_system=False, uuid=event_spec["flow"]["uuid"]
).first()
if flow:
CampaignEvent.create_flow_event(
org,
user,
campaign,
relative_to,
event_spec["offset"],
#.........这里部分代码省略.........
开发者ID:teehamaral,项目名称:rapidpro,代码行数:101,代码来源:models.py
示例20: import_campaigns
def import_campaigns(cls, exported_json, org, user, same_site=False):
"""
Import campaigns 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)))
if "campaigns" in exported_json:
for campaign_spec in exported_json["campaigns"]:
name = campaign_spec["name"]
campaign = None
group = None
# first check if we have the objects by id
if same_site:
group = ContactGroup.user_groups.filter(
id=campaign_spec["group"]["id"], org=org, is_active=True
).first()
if group:
group.name = campaign_spec["group"]["name"]
group.save()
campaign = Campaign.objects.filter(org=org, id=campaign_spec["id"]).first()
if campaign:
campaign.name = Campaign.get_unique_name(org, name, ignore=campaign)
campaign.save()
# fall back to lookups by name
if not group:
group = ContactGroup.user_groups.filter(name=campaign_spec["group"]["name"], org=org).first()
if not campaign:
campaign = Campaign.objects.filter(org=org, name=name).first()
# all else fails, create the objects from scratch
if not group:
group = ContactGroup.create(org, user, campaign_spec["group"]["name"])
if not campaign:
campaign_name = Campaign.get_unique_name(org, name)
campaign = Campaign.create(org, user, campaign_name, group)
else:
campaign.group = group
campaign.save()
# we want to nuke old single message flows
for event in campaign.events.all():
if event.flow.flow_type == Flow.MESSAGE:
event.flow.delete()
# and all of the events, we'll recreate these
campaign.events.all().delete()
# fill our campaign with events
for event_spec in campaign_spec["events"]:
relative_to = ContactField.get_or_create(
org, key=event_spec["relative_to"]["key"], label=event_spec["relative_to"]["label"]
)
# create our message flow for message events
if event_spec["event_type"] == MESSAGE_EVENT:
event = CampaignEvent.create_message_event(
org,
user,
campaign,
relative_to,
event_spec["offset"],
event_spec["unit"],
event_spec["message"],
event_spec["delivery_hour"],
)
event.update_flow_name()
else:
flow = Flow.objects.filter(org=org, id=event_spec["flow"]["id"]).first()
if flow:
CampaignEvent.create_flow_event(
org,
user,
campaign,
relative_to,
event_spec["offset"],
event_spec["unit"],
flow,
event_spec["delivery_hour"],
)
# update our scheduled events for this campaign
EventFire.update_campaign_events(campaign)
开发者ID:mbanje,项目名称:rapidpro,代码行数:90,代码来源:models.py
注:本文中的temba.contacts.models.ContactField类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论