File: PKG-INFO

package info (click to toggle)
python-ratelimiter 1.2.0.post0-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 140 kB
  • sloc: python: 208; makefile: 3
file content (138 lines) | stat: -rw-r--r-- 4,839 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
Metadata-Version: 1.1
Name: ratelimiter
Version: 1.2.0.post0
Summary: Simple python rate limiting object
Home-page: https://github.com/RazerM/ratelimiter
Author: Frazer McLean
Author-email: frazer@frazermclean.co.uk
License: Apache
Description: RateLimiter
        ===========
        
        |PyPI Version| |Build Status| |Python Version| |License|
        
        Simple Python module providing rate limiting.
        
        Overview
        --------
        
        This package provides the ``ratelimiter`` module, which ensures that an
        operation will not be executed more than a given number of times on a
        given period. This can prove useful when working with third parties APIs
        which require for example a maximum of 10 requests per second.
        
        Usage
        -----
        
        Decorator
        ~~~~~~~~~
        
        .. code:: python
        
            from ratelimiter import RateLimiter
        
            @RateLimiter(max_calls=10, period=1)
            def do_something():
                pass
        
        Context Manager
        ~~~~~~~~~~~~~~~
        
        .. code:: python
        
            from ratelimiter import RateLimiter
        
            rate_limiter = RateLimiter(max_calls=10, period=1)
        
            for i in range(100):
                with rate_limiter:
                    do_something()
        
        Callback
        ~~~~~~~~
        
        The callback is called in its own thread, so your callback may use
        ``sleep`` without delaying the rate limiter.
        
        .. code:: python
        
            import time
        
            from ratelimiter import RateLimiter
        
            def limited(until):
                duration = int(round(until - time.time()))
                print('Rate limited, sleeping for {:d} seconds'.format(duration))
        
            rate_limiter = RateLimiter(max_calls=2, period=3, callback=limited)
        
            for i in range(3):
                with rate_limiter:
                    print('Iteration', i)
        
        Output:
        
        ::
        
            Iteration 0
            Iteration 1
            Rate limited, sleeping for 3 seconds
            Iteration 2
        
        asyncio
        ~~~~~~~
        
        The ``RateLimiter`` object can be used in an ``async with`` statement on
        Python 3.5+. Note that the callback must be a coroutine in this context.
        The coroutine callback is not called in a separate thread.
        
        .. code:: python
        
            import asyncio
            import time
        
            from ratelimiter import RateLimiter
        
            async def limited(until):
                duration = int(round(until - time.time()))
                print('Rate limited, sleeping for {:d} seconds'.format(duration))
        
            async def coro():
                rate_limiter = RateLimiter(max_calls=2, period=3, callback=limited)
                for i in range(3):
                    async with rate_limiter:
                        print('Iteration', i)
        
            loop = asyncio.get_event_loop()
            loop.run_until_complete(coro())
        
        License
        -------
        
        | Original work Copyright 2013 Arnaud Porterie
        | Modified work Copyright 2016 Frazer McLean
        
        Licensed under the Apache License, Version 2.0 (the “License”); you may
        not use this file except in compliance with the License. You may obtain
        a copy of the License at
        
        http://www.apache.org/licenses/LICENSE-2.0
        
        Unless required by applicable law or agreed to in writing, software
        distributed under the License is distributed on an “AS IS” BASIS,
        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
        See the License for the specific language governing permissions and
        limitations under the License.
        
        .. |PyPI Version| image:: http://img.shields.io/pypi/v/ratelimiter.svg?style=flat-square
           :target: https://pypi.python.org/pypi/ratelimiter
        .. |Build Status| image:: http://img.shields.io/travis/RazerM/ratelimiter/master.svg?style=flat-square
           :target: https://travis-ci.org/RazerM/ratelimiter
        .. |Python Version| image:: https://img.shields.io/badge/python-2.7%2C%203-brightgreen.svg?style=flat-square
           :target: https://www.python.org/downloads/
        .. |License| image:: http://img.shields.io/badge/license-Apache-blue.svg?style=flat-square
           :target: https://github.com/RazerM/ratelimiter/blob/master/LICENSE
        
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: License :: OSI Approved :: Apache Software License