def transform_attributes(attrs): """Transform some attribute keys.""" transformed = {} for key, value in attrs.items(): if key in ["raw_message", "text"]: transformed["raw_content"] = value elif key in ["diaspora_handle", "sender_handle", "author"]: transformed["handle"] = value elif key == "recipient_handle": transformed["target_handle"] = value elif key == "parent_guid": transformed["target_guid"] = value elif key == "first_name": transformed["name"] = value elif key == "image_url": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["large"] = value elif key == "image_url_small": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["small"] = value elif key == "image_url_medium": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["medium"] = value elif key == "tag_string": transformed["tag_list"] = value.replace("#", "").split(" ") elif key == "bio": transformed["raw_content"] = value elif key == "searchable": transformed["public"] = True if value == "true" else False elif key == "target_type": transformed["entity_type"] = DiasporaRetraction.entity_type_from_remote(value) elif key == "remote_photo_path": transformed["remote_path"] = value elif key == "remote_photo_name": transformed["remote_name"] = value elif key == "status_message_guid": transformed["linked_guid"] = value transformed["linked_type"] = "Post" elif key in BOOLEAN_KEYS: transformed[key] = True if value == "true" else False elif key in DATETIME_KEYS: try: # New style timestamps since in protocol 0.1.6 transformed[key] = datetime.strptime(value, "%Y-%m-%dT%H:%M:%SZ") except ValueError: # Legacy style timestamps transformed[key] = datetime.strptime(value, "%Y-%m-%d %H:%M:%S %Z") elif key in INTEGER_KEYS: transformed[key] = int(value) else: transformed[key] = value or "" return transformed
def transform_attributes(attrs): """Transform some attribute keys.""" transformed = {} for key, value in attrs.items(): if key in ["raw_message", "text"]: transformed["raw_content"] = value elif key in ["diaspora_handle", "sender_handle", "author"]: transformed["handle"] = value elif key == "recipient_handle": transformed["target_handle"] = value elif key == "parent_guid": transformed["target_guid"] = value elif key == "first_name": transformed["name"] = value elif key == "image_url": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["large"] = value elif key == "image_url_small": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["small"] = value elif key == "image_url_medium": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["medium"] = value elif key == "tag_string": transformed["tag_list"] = value.replace("#", "").split(" ") elif key == "bio": transformed["raw_content"] = value elif key == "searchable": transformed["public"] = True if value == "true" else False elif key == "target_type": transformed["entity_type"] = DiasporaRetraction.entity_type_from_remote(value) elif key == "remote_photo_path": transformed["remote_path"] = value elif key == "remote_photo_name": transformed["remote_name"] = value elif key == "status_message_guid": transformed["linked_guid"] = value transformed["linked_type"] = "Post" elif key in BOOLEAN_KEYS: transformed[key] = True if value == "true" else False elif key in DATETIME_KEYS: transformed[key] = datetime.strptime(value, "%Y-%m-%d %H:%M:%S %Z") elif key in INTEGER_KEYS: transformed[key] = int(value) else: transformed[key] = value or "" return transformed
def transform_attributes(attrs, cls): """Transform some attribute keys. :param attrs: Properties from the XML :type attrs: dict :param cls: Class of the entity :type cls: class """ transformed = {} for key, value in attrs.items(): if value is None: value = "" if key == "text": transformed["raw_content"] = value elif key == "activitypub_id": transformed["id"] = value elif key == "author": if cls == DiasporaProfile: # Diaspora Profile XML message contains no GUID. We need the guid. Fetch it. profile = retrieve_and_parse_profile(value) transformed['id'] = value transformed["guid"] = profile.guid else: transformed["actor_id"] = value transformed["handle"] = value elif key == 'guid': if cls != DiasporaProfile: transformed["id"] = value transformed["guid"] = value elif key in ("root_author", "recipient"): transformed["target_id"] = value transformed["target_handle"] = value elif key in ("target_guid", "root_guid", "parent_guid"): transformed["target_id"] = value transformed["target_guid"] = value elif key == "thread_parent_guid": transformed["root_target_id"] = value transformed["root_target_guid"] = value elif key in ("first_name", "last_name"): values = [attrs.get('first_name'), attrs.get('last_name')] values = [v for v in values if v] transformed["name"] = " ".join(values) elif key == "image_url": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["large"] = value elif key == "image_url_small": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["small"] = value elif key == "image_url_medium": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["medium"] = value elif key == "tag_string": if value: transformed["tag_list"] = value.replace("#", "").split(" ") elif key == "bio": transformed["raw_content"] = value elif key == "searchable": transformed["public"] = True if value == "true" else False elif key in ["target_type"] and cls == DiasporaRetraction: transformed["entity_type"] = DiasporaRetraction.entity_type_from_remote(value) elif key == "remote_photo_path": transformed["url"] = f"{value}{attrs.get('remote_photo_name')}" elif key == "author_signature": transformed["signature"] = value elif key in BOOLEAN_KEYS: transformed[key] = True if value == "true" else False elif key in DATETIME_KEYS: transformed[key] = datetime.strptime(value, "%Y-%m-%dT%H:%M:%SZ") elif key in INTEGER_KEYS: transformed[key] = int(value) else: transformed[key] = value return transformed
def test_entity_type_from_remote(self): assert DiasporaRetraction.entity_type_from_remote("Post") == "Post" assert DiasporaRetraction.entity_type_from_remote("Like") == "Reaction" assert DiasporaRetraction.entity_type_from_remote("Photo") == "Image" assert DiasporaRetraction.entity_type_from_remote("Comment") == "Comment"
def transform_attributes(attrs, cls): """Transform some attribute keys. :param attrs: Properties from the XML :type attrs: dict :param cls: Class of the entity :type cls: class """ transformed = {} for key, value in attrs.items(): if value is None: value = "" if key in ["raw_message", "text"]: transformed["raw_content"] = value elif key in ["diaspora_handle", "sender_handle", "author"]: transformed["handle"] = value elif key in [ "recipient_handle", "recipient", "root_author", "root_diaspora_id" ]: transformed["target_handle"] = value elif key in ["parent_guid", "post_guid", "root_guid"]: transformed["target_guid"] = value elif key in ("first_name", "last_name"): values = [attrs.get('first_name'), attrs.get('last_name')] values = [v for v in values if v] transformed["name"] = " ".join(values) elif key == "image_url": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["large"] = value elif key == "image_url_small": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["small"] = value elif key == "image_url_medium": if "image_urls" not in transformed: transformed["image_urls"] = {} transformed["image_urls"]["medium"] = value elif key == "tag_string": if value: transformed["tag_list"] = value.replace("#", "").split(" ") elif key == "bio": transformed["raw_content"] = value elif key == "searchable": transformed["public"] = True if value == "true" else False elif key in ["target_type", "type"] and cls == DiasporaRetraction: transformed[ "entity_type"] = DiasporaRetraction.entity_type_from_remote( value) elif key == "remote_photo_path": transformed["remote_path"] = value elif key == "remote_photo_name": transformed["remote_name"] = value elif key == "status_message_guid": transformed["linked_guid"] = value transformed["linked_type"] = "Post" elif key == "author_signature": transformed["signature"] = value elif key in BOOLEAN_KEYS: transformed[key] = True if value == "true" else False elif key in DATETIME_KEYS: try: # New style timestamps since in protocol 0.1.6 transformed[key] = datetime.strptime(value, "%Y-%m-%dT%H:%M:%SZ") except ValueError: # Legacy style timestamps transformed[key] = datetime.strptime(value, "%Y-%m-%d %H:%M:%S %Z") elif key in INTEGER_KEYS: transformed[key] = int(value) else: transformed[key] = value return transformed