class DeeplinksManage(Item): SCOPE = 'deeplink_generator' CREATE_URL = Item.prepare_url( 'deeplink/%(website_id)s/advcampaign/%(campaign_id)s') CREATE_FIELDS = { 'ulp': lambda x: Item.sanitize_string_array(x, 'ulp'), 'subid': lambda x: Item.sanitize_string_value(x, 'subid', max_length=30), # todo: subid[1-4] } def create(self, website_id, campaign_id, **kwargs): """ Args: website_id (int) campaign_id (int) ulp (list of str) subid (str) """ data = Item.sanitize_fields(self.CREATE_FIELDS, **kwargs) request_data = { 'url': self.CREATE_URL, 'website_id': Item.sanitize_id(website_id), 'campaign_id': Item.sanitize_id(campaign_id), } return self.transport.get().set_data(data).request(**request_data)
def get(self, **kwargs): """ Args: website (int) has_tool (list of str) limit (int) offset (int) language (str) """ filtering = { 'filter_by': kwargs, 'available': { 'website': lambda x: Item.sanitize_integer_value(x, 'website', blank=True ), 'has_tool': lambda x: Item.sanitize_string_array(x, 'has_tool', blank=True ), 'language': lambda x: Item.sanitize_string_value(x, 'language', blank=True ), } } return self.transport.get() \ .set_pagination(**kwargs) \ .set_filtering(filtering) \ .request(url=self.URL)
def create(self, attachments, **kwargs): """ Args: attachments (list of str) campaign (int) website (int) order_id (str) order_date (date) order_price (float) appeal_id (str) comment (str) """ data = Item.sanitize_fields(self.CREATE_FIELDS, **kwargs) files = [('attachment', open(item, 'rb')) for item in Item.sanitize_string_array(attachments, 'attachments')] return self.transport.post().set_data(data).set_files(files).request(url=self.CREATE_URL)
def get(self, **kwargs): """ Args: website (int) has_tool (list of str) limit (int) offset (int) language (str) """ filtering = { 'filter_by': kwargs, 'available': { 'website': lambda x: Item.sanitize_integer_value(x, 'website', blank=True), 'has_tool': lambda x: Item.sanitize_string_array(x, 'has_tool', blank=True), 'language': lambda x: Item.sanitize_string_value(x, 'language', blank=True), } } return self.transport.get() \ .set_pagination(**kwargs) \ .set_filtering(filtering) \ .request(url=self.URL)
class WebsitesManage(Item): """ Manage websites """ SCOPE = 'manage_websites' CREATE_URL = Item.prepare_url('website/create') UPDATE_URL = Item.prepare_url('website/update/%(website_id)s') VERIFY_URL = Item.prepare_url('website/verify/%(website_id)s') DELETE_URL = Item.prepare_url('website/delete/%(website_id)s') CREATE_FIELDS = { 'name': lambda x: Item.sanitize_string_value( x, 'name', max_length=200), 'kind': lambda x: Item.sanitize_string_value( x, 'kind', max_length=20), 'language': lambda x: Item.sanitize_string_value( x, 'language', max_length=2), 'adservice': lambda x: Item.sanitize_integer_value( x, 'adservice', blank=True), 'site_url': lambda x: Item.sanitize_string_value( x, 'site_url', max_length=255), 'description': lambda x: Item.sanitize_string_value( x, 'description', max_length=20000, min_length=100), 'categories': lambda x: Item.sanitize_integer_array( x, 'categories'), 'regions': lambda x: Item.sanitize_string_array( x, 'regions', max_length=2), 'mailing_targeting': lambda x: Item.sanitize_bool_integer_value( x, 'mailing_targeting', blank=True) } UPDATE_FIELDS = { 'name': lambda x: Item.sanitize_string_value( x, 'name', max_length=200, blank=True), 'kind': lambda x: Item.sanitize_string_value( x, 'kind', max_length=20, blank=True), 'language': lambda x: Item.sanitize_string_value( x, 'language', max_length=2, blank=True), 'adservice': lambda x: Item.sanitize_integer_value( x, 'adservice', blank=True), 'site_url': lambda x: Item.sanitize_string_value( x, 'site_url', max_length=255, blank=True), 'description': lambda x: Item.sanitize_string_value( x, 'description', max_length=20000, min_length=100, blank=True), 'categories': lambda x: Item.sanitize_integer_array( x, 'categories', blank=True), 'regions': lambda x: Item.sanitize_string_array( x, 'regions', max_length=2, blank=True), 'mailing_targeting': lambda x: Item.sanitize_bool_integer_value( x, 'mailing_targeting', blank=True) } def create(self, **kwargs): """ Args: name (str) kind (str) language (str) adservice (int) site_url (str) description (str) categories (list of int) regions (list of str) mailing_targeting (bool) """ data = Item.sanitize_fields(self.CREATE_FIELDS, **kwargs) return self.transport.post().set_data(data).request(url=self.CREATE_URL) def update(self, _id, **kwargs): """ Args: _id (int) name (str) kind (str) language (str) adservice (int) site_url (str) description (str) categories (list of int) regions (list of str) mailing_targeting (bool) """ data = Item.sanitize_fields(self.UPDATE_FIELDS, **kwargs) request_data = { 'url': self.UPDATE_URL, 'website_id': Item.sanitize_id(_id) } return self.transport.post().set_data(data).request(**request_data) def verify(self, _id): """ Args: _id (int) """ request_data = { 'url': self.VERIFY_URL, 'website_id': Item.sanitize_id(_id) } return self.transport.post().request(**request_data) def delete(self, _id): """ Args: _id (int) """ request_data = { 'url': self.DELETE_URL, 'website_id': Item.sanitize_id(_id) } return self.transport.post().request(**request_data)
def test_sanitize_string_array(self): self.assertEqual(Item.sanitize_string_array(None, '', None, None, True), None) self.assertListEqual(Item.sanitize_string_array([], '', None, None, True), []) self.assertListEqual(Item.sanitize_string_array('foo', ''), ['foo']) self.assertListEqual(Item.sanitize_string_array([''], '', None, None, True), ['']) self.assertListEqual(Item.sanitize_string_array(['foo', 'bar'], '', 10, 2, False), ['foo', 'bar']) self.assertListEqual(Item.sanitize_string_array(['foo', 'bar'], '', None, None, False), ['foo', 'bar']) with self.assertRaises(ValueError): Item.sanitize_string_array(None, '', False) Item.sanitize_string_array([], '', False) Item.sanitize_string_array([''], '', False) Item.sanitize_string_array(['foobarbaz'], '', 5, 3, False) Item.sanitize_string_array(['foobarbaz'], '', 5, None, False) Item.sanitize_string_array(['foo'], '', None, 5, False)