in facebook_business/adobjects/helpers/customaudiencemixin.py [0:0]
def format_params(cls,
schema,
users,
is_raw=False,
app_ids=None,
pre_hashed=None,
session=None):
hashed_users = []
if schema in (cls.Schema.phone_hash,
cls.Schema.email_hash,
cls.Schema.mobile_advertiser_id):
for user in users:
if schema == cls.Schema.email_hash:
user = user.strip(" \t\r\n\0\x0B.").lower()
if isinstance(user, six.text_type) and not(pre_hashed) and schema != cls.Schema.mobile_advertiser_id:
user = user.encode('utf8') # required for hashlib
# for mobile_advertiser_id, don't hash it
if pre_hashed or schema == cls.Schema.mobile_advertiser_id:
hashed_users.append(user)
else:
hashed_users.append(hashlib.sha256(user).hexdigest())
elif isinstance(schema, list):
# SDK will support only single PII
if not is_raw:
raise FacebookBadObjectError(
"Please send single PIIs i.e. is_raw should be true. " +
"The combining of the keys will be done internally.",
)
# users is array of array
for user in users:
if len(schema) != len(user):
raise FacebookBadObjectError(
"Number of keys in each list in the data should " +
"match the number of keys specified in scheme",
)
break
# If the keys are already hashed then send as it is
if pre_hashed:
hashed_users.append(user)
else:
counter = 0
hashed_user = []
for key in user:
key = key.strip(" \t\r\n\0\x0B.").lower()
key = cls.normalize_key(schema[counter],
str(key))
if schema[counter] != \
cls.Schema.MultiKeySchema.extern_id:
if isinstance(key, six.text_type):
key = key.encode('utf8')
key = hashlib.sha256(key).hexdigest()
counter = counter + 1
hashed_user.append(key)
hashed_users.append(hashed_user)
payload = {
'schema': schema,
'is_raw': is_raw,
'data': hashed_users or users,
}
if schema == cls.Schema.uid:
if not app_ids:
raise FacebookBadObjectError(
"Custom Audiences with type " + cls.Schema.uid +
"require at least one app_id",
)
if app_ids:
payload['app_ids'] = app_ids
params = {
'payload': payload,
}
if session:
params['session'] = session
return params