Skip to content

Commit b050d6b

Browse files
committed
Adding 'get segment subscribers' method
1 parent 261bb9e commit b050d6b

File tree

5 files changed

+73
-3
lines changed

5 files changed

+73
-3
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,10 @@ import pushcrew
3737
project = pushcrew.Api('5374d7dfeffa2eb49965624ba7596a09')
3838
project.remove_subscriber_from_segment('254256', ["8fcd1d68c82dd39d65ef8ea9a7948bbe"])
3939
```
40+
41+
* Get segment subscribers.
42+
```
43+
import pushcrew
44+
project = pushcrew.Api('5374d7dfeffa2eb49965624ba7596a09')
45+
project.get_subscribers_from_segment(segment_id=25)
46+
```

pushcrew/schemas/base.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ def create_object_from_json(object_name, res, many=False):
3434
schema = schema_class(object_name, many=many)
3535

3636
user_data = res.json(parse_float=Decimal)
37-
print user_data
3837
result = schema.load(user_data)
3938
return result
4039

@@ -45,12 +44,15 @@ def _get_schema_class(object_name):
4544
based on the object_name.
4645
'''
4746
# Key is the name of the object, value is the schema class
48-
from .segment import SegmentsSchema, AddSegmentSchema, StatusSchema
47+
from .segment import (
48+
SegmentsSchema, AddSegmentSchema, StatusSchema,
49+
SegmentSubscribersSchema)
4950

5051
schema_dict = {
5152
'Segments': SegmentsSchema,
5253
'AddSegment': AddSegmentSchema,
53-
'StatusSegment': StatusSchema
54+
'StatusSegment': StatusSchema,
55+
'SegmentSubscribers': SegmentSubscribersSchema
5456
}
5557

5658
schema_class = schema_dict.get(object_name)

pushcrew/schemas/segment.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from marshmallow import fields, post_load, Schema
22

33
from .base import BaseSchema
4+
from .subscriber import SubscriberSchema
45

56

67
class SegmentSchema(Schema):
@@ -49,3 +50,15 @@ class StatusSchema(Schema):
4950
@post_load()
5051
def post_load(self, data):
5152
return BaseSchema.create_object('SatusSegment', data)
53+
54+
55+
class SegmentSubscribersSchema(Schema):
56+
status = fields.String(data_key='status')
57+
count_active = fields.Integer(data_key='count_active')
58+
count_total = fields.Integer(data_key='count_total')
59+
next_page = fields.String(data_key='next_page')
60+
subscriber_list = fields.Nested(SubscriberSchema, many=True)
61+
62+
@post_load()
63+
def post_load(self, data):
64+
return BaseSchema.create_object('SegmentSubscribers', data)

pushcrew/schemas/subscriber.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
from marshmallow import fields, post_load, Schema
2+
3+
from .base import BaseSchema
4+
5+
6+
class SubscriberSchema(Schema):
7+
"""
8+
Subscriber Schema
9+
"""
10+
subscriber_id = fields.String(data_key="subscriber_id")
11+
ip_address = fields.String(data_key="ip_address")
12+
user_agent = fields.String(data_key="user_agent")
13+
browser = fields.String(data_key="browser")
14+
browser_version = fields.String(data_key="browser_version")
15+
platform = fields.String(data_key="platform")
16+
device_platform = fields.String(data_key="device_platform")
17+
operating_system = fields.String(data_key="operating_system")
18+
device = fields.String(data_key="device")
19+
country = fields.String(data_key="country")
20+
region = fields.String(data_key="region")
21+
city = fields.String(data_key="city")
22+
is_inactive = fields.Boolean(data_key="is_inactive")
23+
is_ghost = fields.Boolean(data_key="is_ghost")
24+
subscriber_added_timestamp = fields.String(data_key="subscriber_added_timestamp")
25+
added_to_segment_timestamp = fields.String(data_key="added_to_segment_timestamp")
26+
27+
@post_load()
28+
def post_load(self, data):
29+
return BaseSchema.create_object('Subscriber', data)

pushcrew/services/segments.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,22 @@ def remove_subscriber_from_segment(self, segment_id, delete_list):
4545
response = self.pushcrew.segments(segment_id).subscribers().PUT(
4646
data=params)
4747
return create_object_from_json('StatusSegment', response)
48+
49+
def get_subscribers_from_segment(self, segment_id):
50+
"""
51+
This endpoint is used to get a list of subscribers present in a
52+
segment.
53+
The request method of this call needs to be "GET".
54+
"""
55+
response = self.pushcrew.segments(segment_id).subscribers().GET(
56+
params={'page': 1, 'per_page': 1024})
57+
cf = create_object_from_json('SegmentSubscribers', response)
58+
pages = int((cf.data.count_total / 1024) + 2)
59+
subscribers_list = [] + cf.data.subscriber_list
60+
for page in range(2, pages):
61+
response = self.pushcrew.segments(
62+
segment_id).subscribers().GET(
63+
params={'page': page, 'per_page': 1024})
64+
cf = create_object_from_json('SegmentSubscribers', response)
65+
subscribers_list = subscribers_list + cf.data.subscriber_list
66+
return subscribers_list

0 commit comments

Comments
 (0)