facebook_business/adobjects/serverside/content.py (146 lines of code) (raw):
# Copyright 2014 Facebook, Inc.
# You are hereby granted a non-exclusive, worldwide, royalty-free license to
# use, copy, modify, and distribute this software in source code or binary
# form for use in connection with the web services and APIs provided by
# Facebook.
# As with any software that integrates with the Facebook platform, your use
# of this software is subject to the Facebook Developer Principles and
# Policies [http://developers.facebook.com/policy/]. This copyright notice
# shall be included in all copies or substantial portions of the software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
import pprint
import six
from facebook_business.adobjects.serverside.delivery_category import DeliveryCategory
class Content(object):
"""
Content objects that contain the product IDs associated with the event plus information about the products.
"""
param_types = {
'product_id': 'str',
'quantity': 'str',
'item_price': 'float',
'title': 'str',
'description': 'str',
'brand': 'str',
'category': 'str',
'delivery_category': 'str',
}
def __init__(
self,
product_id=None,
quantity=None,
item_price=None,
title=None,
description=None,
brand=None,
category=None,
delivery_category=None,
):
# type: (str, int, float, str, str, str, str, str) -> None
self._product_id = None
self._quantity = None
self._item_price = None
self._title = None
self._description = None
self._brand = None
self._category = None
self._delivery_category = None
if product_id is not None:
self.product_id = product_id
if quantity is not None:
self.quantity = quantity
if item_price is not None:
self.item_price = item_price
if title is not None:
self.title = title
if description is not None:
self.description = description
if brand is not None:
self.brand = brand
if category is not None:
self.category = category
if delivery_category is not None:
self.delivery_category = delivery_category
@property
def product_id(self):
"""
Gets Product Id.
:rtype: str
"""
return self._product_id
@product_id.setter
def product_id(self, product_id):
"""
Sets Product Id.
"""
self._product_id = product_id
@property
def quantity(self):
"""
Gets number of product.
:rtype: int
"""
return self._quantity
@quantity.setter
def quantity(self, quantity):
"""
Set number of product.
"""
self._quantity = quantity
@property
def item_price(self):
"""
Gets Item Price.
:rtype: float
"""
return self._item_price
@item_price.setter
def item_price(self, item_price):
"""
Sets Item Price.
"""
self._item_price = item_price
@property
def title(self):
"""
Gets title.
:rtype: float
"""
return self._title
@title.setter
def title(self, title):
"""
Sets title.
"""
self._title = title
@property
def description(self):
"""
Gets description.
:rtype: float
"""
return self._description
@description.setter
def description(self, description):
"""
Sets description.
"""
self._description = description
@property
def brand(self):
"""
Gets brand.
:rtype: float
"""
return self._brand
@brand.setter
def brand(self, brand):
"""
Sets brand.
"""
self._brand = brand
@property
def category(self):
"""
Gets category.
:rtype: float
"""
return self._category
@category.setter
def category(self, category):
"""
Sets category.
"""
self._category = category
@property
def delivery_category(self):
"""Gets the Type of Delivery Category.
:return: The Delivery Category type.
:rtype: DeliveryCategory
"""
return self._delivery_category
@delivery_category.setter
def delivery_category(self, delivery_category):
"""Sets the Type of Delivery Category.
Use with Purchase events.
:param delivery_category: The Delivery Category type.
:type: DeliveryCategory
"""
if not isinstance(delivery_category, DeliveryCategory):
raise TypeError('delivery_category must be of type DeliveryCategory. Passed invalid category: ' + delivery_category)
self._delivery_category = delivery_category
def normalize(self):
normalized_payload = {
'id': self.product_id,
'quantity': self.quantity,
'item_price': self.item_price,
'title': self.title,
'description': self.description,
'brand': self.brand,
'category': self.category,
}
if self.delivery_category is not None:
normalized_payload['delivery_category'] = self.delivery_category.value
normalized_payload = {k: v for k, v in normalized_payload.items() if v is not None}
return normalized_payload
def to_dict(self):
"""Returns the model properties as a dict"""
result = {}
for attr, _ in six.iteritems(self.param_types):
value = getattr(self, attr)
if isinstance(value, list):
result[attr] = list(map(
lambda x: x.to_dict() if hasattr(x, "to_dict") else x,
value
))
elif hasattr(value, "to_dict"):
result[attr] = value.to_dict()
elif isinstance(value, dict):
result[attr] = dict(map(
lambda item: (item[0], item[1].to_dict())
if hasattr(item[1], "to_dict") else item,
value.items()
))
else:
result[attr] = value
if issubclass(Content, dict):
for key, value in self.items():
result[key] = value
return result
def to_str(self):
"""Returns the string representation of the model"""
return pprint.pformat(self.to_dict())
def __repr__(self):
"""For `print` and `pprint`"""
return self.to_str()
def __eq__(self, other):
"""Returns true if both objects are equal"""
if not isinstance(other, Content):
return False
return self.__dict__ == other.__dict__
def __ne__(self, other):
"""Returns true if both objects are not equal"""
return not self == other