diff --git a/appnexus/clone_mixin.py b/appnexus/clone_mixin.py new file mode 100644 index 0000000..536f4c5 --- /dev/null +++ b/appnexus/clone_mixin.py @@ -0,0 +1,20 @@ +clone_services_unrequired_fields = { + "Advertiser": ["id", "name", "profile_id"], +} + + +class CloneMixin(): + + def clone(self, **kwargs): + try: + payload = {} + for field in self.__dict__.keys(): + if field not in clone_services_unrequired_fields[type(self).__name__]: + payload[field] = self.__dict__[field] + return self.create(payload, **kwargs) + except KeyError: + raise NotImplementedError("Clone method isn't yet available for {} service." + .format(self.service_name)) + + +__all__ = ["CloneMixin", "clone_services_unrequired_fields"] diff --git a/appnexus/model.py b/appnexus/model.py index cfe73a9..6666daa 100644 --- a/appnexus/model.py +++ b/appnexus/model.py @@ -4,6 +4,7 @@ from thingy import Thingy from appnexus.client import AppNexusClient, client, services_list +from appnexus.clone_mixin import CloneMixin, clone_services_unrequired_fields from appnexus.utils import classproperty, normalize_service_name logger = logging.getLogger("appnexus-client") @@ -172,6 +173,8 @@ def create_models(services_list): if service_name in ("AdQualityRule", "Advertiser", "Campaign", "Creative", "LineItem", "PaymentRule"): ancestors.append(ProfileMixin) + if service_name in clone_services_unrequired_fields.keys(): + ancestors.append(CloneMixin) model = type(service_name, tuple(ancestors), {}) globals().setdefault(service_name, model)