Metadata-Version: 2.1
Name: stream-python
Version: 2.12.0
Summary: Client for getstream.io. Build scalable newsfeeds & activity streams in a few hours instead of weeks.
Home-page: http://github.com/GetStream/stream-python
Author: Thierry Schellenbach
Author-email: support@getstream.io
License: BSD-3-Clause
Description: stream-python
        =============
        
        [![Build Status](https://travis-ci.org/GetStream/stream-python.svg?branch=master)](https://travis-ci.org/GetStream/stream-python) [![codecov](https://codecov.io/gh/GetStream/stream-python/branch/master/graph/badge.svg)](https://codecov.io/gh/GetStream/stream-python) [![PyPI version](https://badge.fury.io/py/stream-python.svg)](http://badge.fury.io/py/stream-python)
        
        [stream-python](https://github.com/GetStream/stream-python) is the official Python client for [Stream](https://getstream.io/), a web service for building scalable newsfeeds and activity streams.
        
        Note there is also a higher level [Django - Stream integration](https://github.com/getstream/stream-django) library which hooks into the Django ORM.
        
        You can sign up for a Stream account at https://getstream.io/get_started.
        
        ### Installation
        
        stream-python supports:
        
        - Python (2.6, 2.7, 3.4, 3.5, 3.6, 3.7)
        
        #### Install from Pypi
        
        ```bash
        pip install stream-python
        ```
        
        ### Full documentation
        
        Documentation for this Python client are available at the [Stream website](https://getstream.io/docs/?language=python) or on [Read the Docs](http://stream-python.readthedocs.org/en/latest/).
        
        ### Usage
        
        ```python
        # Instantiate a new client
        import stream
        client = stream.connect('YOUR_API_KEY', 'API_KEY_SECRET')
        
        # INstantiate a new client specifying datacenter location
        client = stream.connect('YOUR_API_KEY', 'API_KEY_SECRET', location='us-east')
        # Find your API keys here https://getstream.io/dashboard/
        
        # Instantiate a feed object
        user_feed_1 = client.feed('user', '1')
        
        # Get activities from 5 to 10 (slow pagination)
        result = user_feed_1.get(limit=5, offset=5)
        # (Recommended & faster) Filter on an id less than the given UUID
        result = user_feed_1.get(limit=5, id_lt="e561de8f-00f1-11e4-b400-0cc47a024be0")
        
        # Create a new activity
        activity_data = {'actor': 1, 'verb': 'tweet', 'object': 1, 'foreign_id': 'tweet:1'}
        activity_response = user_feed_1.add_activity(activity_data)
        # Create a bit more complex activity
        activity_data = {'actor': 1, 'verb': 'run', 'object': 1, 'foreign_id': 'run:1',
        	'course': {'name': 'Golden Gate park', 'distance': 10},
        	'participants': ['Thierry', 'Tommaso'],
        	'started_at': datetime.datetime.now()
        }
        user_feed_1.add_activity(activity_data)
        
        # Remove an activity by its id
        user_feed_1.remove_activity("e561de8f-00f1-11e4-b400-0cc47a024be0")
        # or by foreign id
        user_feed_1.remove_activity(foreign_id='tweet:1')
        
        # Follow another feed
        user_feed_1.follow('flat', '42')
        
        # Stop following another feed
        user_feed_1.unfollow('flat', '42')
        
        # List followers/following
        following = user_feed_1.following(offset=0, limit=2)
        followers = user_feed_1.followers(offset=0, limit=10)
        
        # Creates many follow relationships in one request
        follows = [
            {'source': 'flat:1', 'target': 'user:1'},
            {'source': 'flat:1', 'target': 'user:2'},
            {'source': 'flat:1', 'target': 'user:3'}
        ]
        client.follow_many(follows)
        
        # Batch adding activities
        activities = [
        	{'actor': 1, 'verb': 'tweet', 'object': 1},
        	{'actor': 2, 'verb': 'watch', 'object': 3}
        ]
        user_feed_1.add_activities(activities)
        
        # Add an activity and push it to other feeds too using the `to` field
        activity = {
            "actor":"1",
            "verb":"like",
            "object":"3",
            "to":["user:44", "user:45"]
        }
        user_feed_1.add_activity(activity)
        
        # Retrieve an activity by its ID
        client.get_activities(ids=[activity_id])
        
        # Retrieve an activity by the combination of foreign_id and time
        client.get_activities(foreign_id_times=[
            (foreign_id, activity_time),
        ])
        
        # Update some parts of an activity with activity_partial_update
        set = {
            'product.name': 'boots',
            'colors': {
                'red': '0xFF0000',
                'green': '0x00FF00'
            }
        }
        unset = [ 'popularity', 'details.info' ]
        # ...by ID
        client.activity_partial_update(id=activity_id, set=set, unset=unset)
        # ...or by combination of foreign_id and time
        client.activity_partial_update(foreign_id=foreign_id, time=activity_time, set=set, unset=unset)
        
        # Generating tokens for client side usage (JS client)
        token = user_feed_1.token
        # Javascript client side feed initialization
        # user1 = client.feed('user', '1', '{{ token }}');
        
        # Generate a read-only token for client side usage (JS client)
        readonly_token = user_feed_1.get_readonly_token()
        # Javascript client side feed initialization
        # user1 = client.feed('user', '1', '{{ readonly_token }}');
        
        # Generate a redirect url for the Stream Analytics platform to track
        # events/impressions on url clicks
        impression = {
            'content_list': ['tweet:1', 'tweet:2', 'tweet:3'],
            'user_data': 'tommaso',
            'location': 'email',
            'feed_id': 'user:global'
        }
        
        engagement = {
            'content': 'tweet:2',
            'label': 'click',
            'position': 1,
            'user_data': 'tommaso',
            'location': 'email',
            'feed_id':
            'user:global'
        }
        
        events = [impression, engagement]
        
        redirect_url = client.create_redirect_url('http://google.com/', 'user_id', events)
        ```
        
        [JS client](http://github.com/getstream/stream-js).
        
        ### Contributing
        
        First, make sure you can run the test suite. Tests are run via py.test
        
        ```bash
        py.test
        # with coverage
        py.test --cov stream --cov-report html
        # against a local API backend
        LOCAL=true py.test
        ```
        
        ### Releasing a new version
        
        In order to release new version you need to be a maintainer on Pypi.
        
        - Update CHANGELOG
        - Update the version on setup.py
        - Commit and push to Github
        - Create a new tag for the version (eg. `v2.9.0`)
        - Create a new dist with python `python setup.py sdist`
        - Upload the new distributable with wine `twine upload dist/stream-python-VERSION-NAME.tar.gz`
        
        If unsure you can also test using the Pypi test servers `twine upload --repository-url https://test.pypi.org/legacy/ dist/stream-python-VERSION-NAME.tar.gz`
        
        ### Copyright and License Information
        
        Copyright (c) 2014-2017 Stream.io Inc, and individual contributors. All rights reserved.
        
        See the file "LICENSE" for information on the history of this software, terms & conditions for usage, and a DISCLAIMER OF ALL WARRANTIES.
        
Platform: UNKNOWN
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: BSD License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 2.6
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Description-Content-Type: text/markdown
Provides-Extra: test
