Skip to content

Commit

Permalink
support-set-affiliate-approval (#72)
Browse files Browse the repository at this point in the history
* Isort code in tests

* Support offer files

* Isort

* Isort

* Isort!!

* Fix changelog entry, remove excess class

* Support Offer::setAffiliateApproval method

* Add test cases

* Add noqa for unused import

* Cover boolean response

* Fix changelog entry

* Fix cassetes

* Isort

* Add support ofr affiliate unblock and various get methods for Offer

* Fix method names and test cases
  • Loading branch information
iamanikeev authored and Stranger6667 committed Apr 24, 2018
1 parent 29c9081 commit ef04521
Show file tree
Hide file tree
Showing 9 changed files with 1,141 additions and 13 deletions.
10 changes: 10 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ Changelog
`Unreleased`_
-------------

Added
~~~~~

- ``unblock_affiliate`` for ``Offer`` model. (`iamanikeev`_)
- ``set_affiliate_approval_status`` for ``Offer`` model. (`iamanikeev`_)
- ``get_affiliate_approval_status`` for ``Offer`` model. (`iamanikeev`_)
- ``get_blocked_affiliate_ids`` for ``Offer`` model. (`iamanikeev`_)
- ``get_approved_affiliate_ids`` for ``Offer`` model. (`iamanikeev`_)
- ``get_unapproved_affiliate_ids`` for ``Offer`` model. (`iamanikeev`_)

`0.6.5`_ - 2018-04-16
---------------------

Expand Down
2 changes: 1 addition & 1 deletion pyoffers/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@ def init_target_object(self, target, data):
"""
Initializes target object and assign extra objects to target as attributes
"""
target_object = self.init_single_object(target, data.pop(target))
target_object = self.init_single_object(target, data.pop(target, data))
for key, item in data.items():
key_alias = MANAGER_ALIASES.get(key, key)
if item:
Expand Down
4 changes: 3 additions & 1 deletion pyoffers/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# coding: utf-8
from .advertiser import Advertiser, AdvertiserManager # noqa
from .affiliate import Affiliate, AffiliateManager, AffiliateUser, AffiliateUserManager # noqa
from .affiliate_offer import AffiliateOffer, AffiliateOfferManager # noqa
from .conversion import Conversion, ConversionManager # noqa
from .core import ApplicationManager, ModelManager # noqa
from .country import Country, CountryManager # noqa
Expand All @@ -21,7 +22,8 @@
AffiliateUserManager,
OfferCategoryManager,
ApplicationManager,
OfferFileManager
OfferFileManager,
AffiliateOfferManager,
)

MANAGER_ALIASES = {
Expand Down
13 changes: 13 additions & 0 deletions pyoffers/models/affiliate_offer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from .core import Model, ModelManager


class AffiliateOffer(Model):
""""
Model that defines relation between Offer and Affiliate
"""
pass


class AffiliateOfferManager(ModelManager):
model = AffiliateOffer
name = 'affiliate_offers'
54 changes: 54 additions & 0 deletions pyoffers/models/offer.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,30 @@ def add_category(self, category_id):
def block_affiliate(self, affiliate_id):
return self._manager.block_affiliate(self.id, affiliate_id)

def unblock_affiliate(self, affiliate_id):
return self._manager.unblock_affiliate(self.id, affiliate_id)

def get_categories(self):
return self._manager.get_categories(self.id)

def get_offer_files_with_creative_code(self, affiliate_id):
return self._manager.get_offer_files_with_creative_code(self.id, affiliate_id)

def set_affiliate_approval_status(self, affiliate_id, status):
return self._manager.set_affiliate_approval_status(self.id, affiliate_id, status)

def get_affiliate_approval_status(self, affiliate_id):
return self._manager.get_affiliate_approval_status(self.id, affiliate_id)

def get_blocked_affiliate_ids(self):
return self._manager.get_blocked_affiliate_ids(self.id)

def get_approved_affiliate_ids(self):
return self._manager.get_approved_affiliate_ids(self.id)

def get_unapproved_affiliate_ids(self):
return self._manager.get_unapproved_affiliate_ids(self.id)


class OfferManager(ModelManager):
model = Offer
Expand All @@ -61,6 +79,9 @@ def add_category(self, id, category_id):
def block_affiliate(self, id, affiliate_id):
return self._call('blockAffiliate', id=id, affiliate_id=affiliate_id)

def unblock_affiliate(self, id, affiliate_id):
return self._call('unblockAffiliate', id=id, affiliate_id=affiliate_id)

def get_categories(self, id):
return self._call('getCategories', id=id, single_result=False)

Expand All @@ -70,6 +91,39 @@ def get_offer_files_with_creative_code(self, id, affiliate_id):
target_class='OfferFile', affiliate_id=affiliate_id, offer_id=id, single_result=False
)

def set_affiliate_approval_status(self, id, affiliate_id, status):
return self._call(
'setAffiliateApproval',
id=id, affiliate_id=affiliate_id, status=status, target_class='AffiliateOffer'
)

def get_affiliate_approval_status(self, id, affiliate_id):
return self._call(
'getAffiliateApprovalStatus',
id=id, affiliate_id=affiliate_id, raw=True
)

def get_blocked_affiliate_ids(self, id):
return self._call(
'getBlockedAffiliateIds',
id=id,
raw=True
)

def get_approved_affiliate_ids(self, id):
return self._call(
'getApprovedAffiliateIds',
id=id,
raw=True
)

def get_unapproved_affiliate_ids(self, id):
return self._call(
'getUnapprovedAffiliateIds',
id=id,
raw=True
)


class OfferCategory(Model):
""""
Expand Down
4 changes: 2 additions & 2 deletions tests/cassettes/affiliate.json
Original file line number Diff line number Diff line change
Expand Up @@ -842,7 +842,7 @@
},
"response": {
"body": {
"base64_string": "H4sIAAAAAAAAA31TXW/iMBD8K8jPVEpCKW3eep89nWgrQa+VTifLJBviixO7thNKK/777RIMVCf6FM/senZ31nljFp5bcJ6lb2wu7BLwxK6LQiopPLAh+6ZtLYj863SDeAa2kxkgcSPcXVGAdcj+wo/EeMoSRLfgV9pWc10BUbdf58/wWD197+D+ShX1z09mkk3N6L57+HITHfJ/5JjcaeW0jZGdgi81Ua3J+14koQu6gYSglp0XvnXI5qDAQ842myGO5IxuHBwnxENWem9mO5hE0UHkMC6CQw2RZbptPK9FI5ZgOUWaVqkhy3RtRLOm0WA1+LxDeCPPsbaLQ94OJ/t70q/D2cKyN+yulJqRJtaypPkwu0asfQk2JL9Kk+mcTI+T0fkYw6bUDYRwIV7CcQULJ/0+4uSyaQ2XJhDkJMe+gMZMovjyLErO4vEgPk+jSRpdovR/nqKqaLzjQoH1FKDtGLGugdwJW1pJSzvqMe+97WuGVA+2pusN+MGEVK84Gr/thPy2gI/JCnVktAib4V6+20BhRZtzkXnZoafcZdrCidi2a+5L3ESp1SmFhdJZdSrLWE2NfiwVkj5UstJV21n2C8psu+Ca/iNu5Auo4C+6cTRvrXNZyPdLuxjEcRqP0vFk++rRO43/Yvr7z+48xaeHD7eX2Gz+AWMs7uPrAwAA",
"base64_string": "H4sIAMGz3VoC/31TXW/iMBD8K8jPVIpDKW3eep89nWgrQa+VTifLOBviI4ld24HSiv9+uwQD1Yk+xbM7nt2ddd6Yg+cWfGDZG5tKNwc8seui0JWWAViffTOulhT8602DeAJuqRVg4Eb6u6IA5zH6Cz8a8xlLEd1CWBm3mJoFUOj26/QZHhdP35dwf1UV9c9PdqTGdnC/fPhykxz4P3Ik6xwDYwilIdTavGtDE7ogMgYkdeuDDK3HaA4VBMjZZtPHabw1jYdjAu+zMgQ72cE0SQ4ih0kRHGpIpUzbBFHLRs7BCco0bVX1mTK1lc2apoJV7/MO4Y08x9qeR94Op/t7Oqzj2cG88+qu1IaRJtZypPkwuUZsQgkukl+1VSYnv3k6OB9i2pamgZgu5Es8rmDmddhnvJ43rRXaxgA5KbAvoDHThF+eJekZH/b4eZaMsuQSpf/zFFVlE7yQFbhACU4NyHUN5E7c0ko72lGHRedtVzNSA7iarjcQeiNSvRJo/LYT8tsBviMnqyOjZdyMCPrdBgon21xIFfQSPRVeGQcnctuuRShxE6WpTinMKqMWp1jWGWr0Y6lI+lDJab/YzrJfkHLtTBj6hYTVL1BFf9GNo3lrk+tCv1/aRY/zjA+y4Wj76tE7g79h9vvP7jzGp4cPt5PYbP4B4pEfoeYDAAA=",
"encoding": null
},
"headers": {
Expand Down Expand Up @@ -910,7 +910,7 @@
},
"response": {
"body": {
"base64_string": "H4sIAAAAAAAAA31TXU/jMBD8K5Wfg5SklELe4L44nQpILXcnIWS5yabx1bGN7aQU1P9+u21d4KE8xbOzHu/Obl6Zg6cOfGDFK5sJtwA8scu6lkqKACxh341rBQX/eaMRT8H1sgQMXAt/W9fgPEZ/40ciX7Ac0Q2ElXHLmVkChW6+zZ7gz/Lvjx7uLlTd/rqy43Jih3f9/dfr9C3/Z4XJvVHeuAyjEwiNoVAtdXW1RjZhkvBZyjYJFu6t0R6och9E6DwrsoQ1IdjpHuZpmrBKBEE5b00hiDoJE2VpOh14K7RYgOPE6E6phJWmtUKvqQFYDb7sEd6oKnzbZzFvj/PDPRnW8exgsbPltpGGkSa+5UjzfnqJ2IQGXEx+kbY0FVmb5cPTEdK2MRoiXYvneFzB3MtwYLxc6M5yaWMAewaOdQG1mafZ+Uman2SjQXZapOMiPUfpaBmrQEEAMncldPBcKHCBCJqBFesWyJ04i5V0tBU7zHfe7t6MqQFcS9c1hMGYVC84Gr+thPx2gCvjhHpntIiT4UF+mEDtRFdxUQbZo6fcl8bBEW5bNQ8NTqIx6pjCXJlyeSzLOkOFfi4Vkz5VctIvt70cBlS6bs4N/S3cymdQ0V90412/ralkLT8O7WyQZUU2LEZjtsGtR+8M/nHFw+P+PMHVw8XdSWw2/wGNRUAf0QMAAA==",
"base64_string": "H4sIAMGz3VoC/31TXU/jMBD8K5Wfg5SklELe4L5ApwJS4e6k08lyk03ja2Ibe9PSQ/3vt9vWBR7KUzy74/Hu7OZFeHjqIaAoXsSD8nOgk7isa91qhSAS8dX6TnHwb7CG8BT8UpdAgWsV7uoafKDoD/poyhciJ3QLuLJ+8WAXwKHbLw9P8HPx69sS7i/auvt+5cblxA3vl4+fr9NX/k1FZF1RYALYWEa1NtXV+oZjmvFZKjYJ1RycNQG46IAK+yCKLBENopvuYZ6miagUKua89kMg6iRClaXtDcpOGTUHLzlj+rZNRGk7p8yaa4fV4NMe0Y2qordDFnl7nB/uaVzHs4f5zpG7RlvBmvSWZ83H6SVhiw34SP6nXWkrdjXLh6cjSrvGGojpWj3H4wpmQeMhE/Tc9E5qFwPUM0iqC7jNPM3OT9L8JBsNstMiHRfpOUlHy0QFLSCwuStlMEjVgkdOZFyAWnfA7sRZrLTnhdhhufN292akIviOrxvAwZhVLyQZv62E/fZA2+JV+8ZoFScjUb+bQO1VX0lVol6SpzKU1sOR3LZqiQ1NorHtMYVZa8vFMZbzlgv9WCqSPlTyOiy2vRwGVPp+Ji3/KNLpZ2ijv+TGm347W+lavx/a2SDLimxYjMZiQ1tP3ln62Yrff/bnCa0eLe5OYrP5D0mBdfzMAwAA",
"encoding": null
},
"headers": {
Expand Down

0 comments on commit ef04521

Please sign in to comment.