|
10 | 10 |
|
11 | 11 | from analytics.utils import guess_timezone, clean |
12 | 12 | from analytics.consumer import Consumer |
| 13 | +from analytics.s3_consumer import S3Consumer |
13 | 14 | from analytics.version import VERSION |
14 | 15 |
|
15 | 16 | try: |
|
22 | 23 |
|
23 | 24 |
|
24 | 25 | class Client(object): |
25 | | - """Create a new Segment client.""" |
| 26 | + """Create a new Segment client. |
| 27 | +
|
| 28 | + upload_size has different meaning, depending on chosen transport. |
| 29 | + For http transport upload_size means number of items to be batched |
| 30 | + in a single POST request to backend. |
| 31 | + For s3 transport upload_size means size in bytes of _uncompressed_ |
| 32 | + partition of the data. Sane default value is between 10 and 100 MB |
| 33 | + depending on compressability of underlying data. |
| 34 | + """ |
26 | 35 | log = logging.getLogger('segment') |
27 | 36 |
|
28 | 37 | def __init__(self, write_key=None, debug=False, max_queue_size=10000, |
29 | | - send=True, on_error=None, endpoint=None, upload_size=100): |
| 38 | + send=True, on_error=None, endpoint=None, upload_size=100, |
| 39 | + transport='http'): |
30 | 40 | require('write_key', write_key, string_types) |
31 | | - |
32 | 41 | self.queue = queue.Queue(max_queue_size) |
33 | | - self.consumer = Consumer(self.queue, write_key, endpoint=endpoint, |
34 | | - on_error=on_error, upload_size=upload_size) |
35 | 42 | self.write_key = write_key |
36 | 43 | self.endpoint = endpoint |
37 | 44 | self.on_error = on_error |
38 | 45 | self.debug = debug |
39 | 46 | self.send = send |
40 | 47 |
|
| 48 | + if transport == 'http': |
| 49 | + self.consumer = Consumer(self.queue, write_key, endpoint=endpoint, |
| 50 | + on_error=on_error, upload_size=upload_size) |
| 51 | + elif transport == 's3': |
| 52 | + self.consumer = S3Consumer(self.queue, write_key, endpoint=endpoint, |
| 53 | + on_error=on_error, upload_size=upload_size) |
| 54 | + else: |
| 55 | + raise ValueError("transport should be either http or s3") |
| 56 | + |
41 | 57 | if debug: |
42 | 58 | self.log.setLevel(logging.DEBUG) |
43 | 59 |
|
|
0 commit comments