本文整理汇总了Python中temba.contacts.models.ContactField.get_by_label方法的典型用法代码示例。如果您正苦于以下问题:Python ContactField.get_by_label方法的具体用法?Python ContactField.get_by_label怎么用?Python ContactField.get_by_label使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类temba.contacts.models.ContactField
的用法示例。
在下文中一共展示了ContactField.get_by_label方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: pre_save
# 需要导入模块: from temba.contacts.models import ContactField [as 别名]
# 或者: from temba.contacts.models.ContactField import get_by_label [as 别名]
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
示例2: get_value_summary
# 需要导入模块: from temba.contacts.models import ContactField [as 别名]
# 或者: from temba.contacts.models.ContactField import get_by_label [as 别名]
def get_value_summary(cls, ruleset=None, contact_field=None, filters=None, segment=None):
"""
Returns the results for the passed in ruleset or contact field given the passed in filters and segments.
Filters are expected in the following formats:
{ field: rulesetId, categories: ["Red", "Blue", "Yellow"] }
Segments are expected in these formats instead:
{ ruleset: 1515, categories: ["Red", "Blue"] } // segmenting by another field, for those categories
{ groups: 124,151,151 } // segment by each each group in the passed in ids
{ location: "State", parent: null } // segment for each admin boundary within the parent
{ contact_field: "Country", values: ["US", "EN", "RW"] } // segment by a contact field for these values
"""
from temba.contacts.models import ContactGroup, ContactField
from temba.flows.models import TrueTest, RuleSet
start = time.time()
results = []
if (not ruleset and not contact_field) or (ruleset and contact_field):
raise ValueError("Must specify either a RuleSet or Contact field.")
org = ruleset.flow.org if ruleset else contact_field.org
open_ended = ruleset and ruleset.ruleset_type == RuleSet.TYPE_WAIT_MESSAGE and len(ruleset.get_rules()) == 1
# default our filters to an empty list if None are passed in
if filters is None:
filters = []
# build the kwargs for our subcall
kwargs = dict(ruleset=ruleset, contact_field=contact_field, filters=filters)
# this is our list of dependencies, that is things that will blow away our results
dependencies = set()
fingerprint_dict = dict(filters=filters, segment=segment)
if ruleset:
fingerprint_dict['ruleset'] = ruleset.id
dependencies.add(RULESET_KEY % ruleset.id)
if contact_field:
fingerprint_dict['contact_field'] = contact_field.id
dependencies.add(CONTACT_KEY % contact_field.id)
for contact_filter in filters:
if 'ruleset' in contact_filter:
dependencies.add(RULESET_KEY % contact_filter['ruleset'])
if 'groups' in contact_filter:
for group_id in contact_filter['groups']:
dependencies.add(GROUP_KEY % group_id)
if 'location' in contact_filter:
field = ContactField.get_by_label(org, contact_filter['location'])
dependencies.add(CONTACT_KEY % field.id)
if segment:
if 'ruleset' in segment:
dependencies.add(RULESET_KEY % segment['ruleset'])
if 'groups' in segment:
for group_id in segment['groups']:
dependencies.add(GROUP_KEY % group_id)
if 'location' in segment:
field = ContactField.get_by_label(org, segment['location'])
dependencies.add(CONTACT_KEY % field.id)
# our final redis key will contain each dependency as well as a HASH representing the fingerprint of the
# kwargs passed to this method, generate that hash
fingerprint = hash(dict_to_json(fingerprint_dict))
# generate our key
key = VALUE_SUMMARY_CACHE_KEY + ":" + str(org.id) + ":".join(sorted(list(dependencies))) + ":" + str(fingerprint)
# does our value exist?
r = get_redis_connection()
cached = r.get(key)
if cached is not None:
try:
return json_to_dict(cached)
except Exception:
# failed decoding, oh well, go calculate it instead
pass
if segment:
# segmenting a result is the same as calculating the result with the addition of each
# category as a filter so we expand upon the passed in filters to do this
if 'ruleset' in segment and 'categories' in segment:
for category in segment['categories']:
category_filter = list(filters)
category_filter.append(dict(ruleset=segment['ruleset'], categories=[category]))
# calculate our results for this segment
kwargs['filters'] = category_filter
(set_count, unset_count, categories) = cls.get_filtered_value_summary(**kwargs)
results.append(dict(label=category, open_ended=open_ended, set=set_count, unset=unset_count, categories=categories))
# segmenting by groups instead, same principle but we add group filters
elif 'groups' in segment:
for group_id in segment['groups']:
# load our group
group = ContactGroup.user_groups.get(org=org, pk=group_id)
#.........这里部分代码省略.........
示例3: save
# 需要导入模块: from temba.contacts.models import ContactField [as 别名]
# 或者: from temba.contacts.models.ContactField import get_by_label [as 别名]
def save(self):
"""
Update our contact
"""
name = self.validated_data.get("name")
fields = self.validated_data.get("fields")
language = self.validated_data.get("language")
# treat empty names as None
if not name:
name = None
changed = []
if self.instance:
if self.parsed_urns is not None:
self.instance.update_urns(self.user, self.parsed_urns)
# update our name and language
if name != self.instance.name:
self.instance.name = name
changed.append("name")
else:
self.instance = Contact.get_or_create_by_urns(
self.org, self.user, name, urns=self.parsed_urns, language=language, force_urn_update=True
)
# Contact.get_or_create doesn't nullify language so do that here
if "language" in self.validated_data and language is None:
self.instance.language = language.lower() if language else None
changed.append("language")
# save our contact if it changed
if changed:
self.instance.save(update_fields=changed, handle_update=True)
# update our fields
if fields is not None:
for key, value in fields.items():
existing_by_key = ContactField.user_fields.filter(
org=self.org, key__iexact=key, is_active=True
).first()
if existing_by_key:
self.instance.set_field(self.user, existing_by_key.key, value)
continue
elif self.new_fields and key in self.new_fields:
new_field = ContactField.get_or_create(
org=self.org, user=self.user, key=regex.sub("[^A-Za-z0-9]+", "_", key).lower(), label=key
)
self.instance.set_field(self.user, new_field.key, value)
# TODO as above, need to get users to stop updating via label
existing_by_label = ContactField.get_by_label(self.org, key)
if existing_by_label:
self.instance.set_field(self.user, existing_by_label.key, value)
# update our contact's groups
if self.group_objs is not None:
self.instance.update_static_groups(self.user, self.group_objs)
return self.instance