def create_contact(self, name=None, number=None, twitter=None, twitterid=None, urn=None, **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 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)
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)
def create_contact(self, name=None, number=None, twitter=None, urn=None, fields=None, **kwargs): """ Create a contact in the master test org """ org = kwargs.pop("org", None) or self.org user = kwargs.pop("user", None) or self.user urns = [] if number: urns.append(URN.from_tel(number)) if twitter: urns.append(URN.from_twitter(twitter)) if urn: urns.append(urn) assert name or urns, "contact should have a name or a contact" kwargs["name"] = name kwargs["urns"] = urns contact = Contact.get_or_create_by_urns(org, user, **kwargs) if fields: update_fields_locally(user, contact, fields) return contact
def create_contacts(self, spec, org, user): self._log(f"Creating {len(spec['contacts'])} contacts... ") fields_by_key = {f.key: f for f in ContactField.user_fields.all()} for c in spec["contacts"]: contact = Contact.get_or_create_by_urns(org, user, c["name"], c["urns"]) contact.uuid = c["uuid"] contact.save(update_fields=["uuid"], handle_update=False) # add to any groups we belong to groups = list( ContactGroup.user_groups.filter(org=org, name__in=c.get("groups", []))) mods = contact.update_static_groups(groups) # set any fields we have values = { fields_by_key[key]: val for key, val in c.get("fields", {}).items() } mods += contact.update_fields(values) contact.modify(user, mods) self._log(self.style.SUCCESS("OK") + "\n")
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)
def parse_contacts(cls, org, json_obj): contacts = [] for contact in json_obj.get(VariableContactAction.CONTACTS): name = contact.get(VariableContactAction.NAME, None) phone = contact.get(VariableContactAction.PHONE, None) contact_uuid = contact.get(VariableContactAction.UUID, None) urns = [] for urn in contact.get(VariableContactAction.URNS, []): scheme = urn.get(VariableContactAction.SCHEME) path = urn.get(VariableContactAction.PATH) if scheme and path: urns.append(URN.from_parts(scheme, path)) if phone: # pragma: needs cover urns.append(URN.from_tel(phone)) contact = Contact.objects.filter(uuid=contact_uuid, org=org).first() if not contact: contact = Contact.get_or_create_by_urns(org, org.created_by, name=None, urns=urns) # if they don't have a name use the one in our action if name and not contact.name: # pragma: needs cover contact.name = name contact.save(update_fields=["name"], handle_update=True) if contact: contacts.append(contact) return contacts
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 self.instance.save() # save our contact if it changed if changed: self.instance.save(update_fields=changed) # update our fields if fields is not None: for key, value in fields.items(): existing_by_key = ContactField.objects.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
def create_contacts(self, spec, org, locations, user): self._log(f"Creating {len(spec['contacts'])} contacts... ") for c in spec["contacts"]: contact = Contact.get_or_create_by_urns(org, user, c["name"], c["urns"]) contact.uuid = c["uuid"] contact.save(update_fields=["uuid"], handle_update=False) # add to any groups we belong to for g in c.get("groups", []): group = ContactGroup.user_groups.get(org=org, name=g) group.update_contacts(user, [contact], True) # set any fields we have for key, value in c.get("fields", {}).items(): contact.set_field(user, key, value) self._log(self.style.SUCCESS("OK") + "\n")
def save(self): """ Update our contact """ name = self.validated_data.get("name") language = self.validated_data.get("language") urns = self.validated_data.get("urns") groups = self.validated_data.get("groups") custom_fields = self.validated_data.get("fields") changed = [] if self.instance: # update our name and language if "name" in self.validated_data and name != self.instance.name: self.instance.name = name changed.append("name") if "language" in self.validated_data and language != self.instance.language: self.instance.language = language changed.append("language") if changed: self.instance.save(update_fields=changed, handle_update=True) if "urns" in self.validated_data and urns is not None: self.instance.update_urns(self.context["user"], urns) else: self.instance = Contact.get_or_create_by_urns(self.context["org"], self.context["user"], name, urns=urns, language=language) # update our fields if custom_fields is not None: self.instance.set_fields(user=self.context["user"], fields=custom_fields) # update our groups if groups is not None: self.instance.update_static_groups(self.context["user"], groups) return self.instance
def save(self): """ Update our contact """ name = self.validated_data.get('name') language = self.validated_data.get('language') urns = self.validated_data.get('urns') groups = self.validated_data.get('groups') custom_fields = self.validated_data.get('fields') changed = [] if self.instance: # update our name and language if 'name' in self.validated_data and name != self.instance.name: self.instance.name = name changed.append('name') if 'language' in self.validated_data and language != self.instance.language: self.instance.language = language changed.append('language') if 'urns' in self.validated_data and urns is not None: self.instance.update_urns(self.context['user'], urns) if changed: self.instance.save(update_fields=changed) else: self.instance = Contact.get_or_create_by_urns(self.context['org'], self.context['user'], name, urns=urns, language=language) # update our fields if custom_fields is not None: for key, value in six.iteritems(custom_fields): self.instance.set_field(self.context['user'], key, value) # update our groups if groups is not None: self.instance.update_static_groups(self.context['user'], groups) return self.instance
def save(self): """ Update our contact """ name = self.validated_data.get("name") language = self.validated_data.get("language") urns = self.validated_data.get("urns") groups = self.validated_data.get("groups") custom_fields = self.validated_data.get("fields") changed = [] if self.instance: # update our name and language if "name" in self.validated_data and name != self.instance.name: self.instance.name = name changed.append("name") if "language" in self.validated_data and language != self.instance.language: self.instance.language = language changed.append("language") if changed: self.instance.save(update_fields=changed, handle_update=True) if "urns" in self.validated_data and urns is not None: self.instance.update_urns(self.context["user"], urns) else: self.instance = Contact.get_or_create_by_urns( self.context["org"], self.context["user"], name, urns=urns, language=language ) # update our fields if custom_fields is not None: self.instance.set_fields(user=self.context["user"], fields=custom_fields) # update our groups if groups is not None: self.instance.update_static_groups(self.context["user"], groups) return self.instance
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