From 6e1897781060c5d5f551170ba2f9c3736e0a0834 Mon Sep 17 00:00:00 2001 From: theelous3 Date: Tue, 30 May 2017 15:58:09 +0100 Subject: [PATCH] removed html from docs, += build --- .../build/doctrees/a-look-at-sessions.doctree | Bin 23068 -> 0 bytes docs/build/doctrees/environment.pickle | Bin 16697 -> 0 bytes docs/build/doctrees/idioms.doctree | Bin 21527 -> 0 bytes docs/build/doctrees/index.doctree | Bin 19530 -> 0 bytes .../overview-of-funcs-and-args.doctree | Bin 33436 -> 0 bytes docs/build/doctrees/refrence-manual.doctree | Bin 2620 -> 0 bytes .../doctrees/the-response-object.doctree | Bin 17887 -> 0 bytes docs/build/html/a-look-at-sessions.html | 191 ----------- docs/build/html/genindex.html | 94 ------ docs/build/html/idioms.html | 285 ----------------- docs/build/html/index.html | 254 --------------- .../html/overview-of-funcs-and-args.html | 298 ------------------ docs/build/html/refrence-manual.html | 111 ------- docs/build/html/search.html | 104 ------ docs/build/html/searchindex.js | 2 +- docs/build/html/the-response-object.html | 210 ------------ 16 files changed, 1 insertion(+), 1548 deletions(-) delete mode 100644 docs/build/doctrees/a-look-at-sessions.doctree delete mode 100644 docs/build/doctrees/environment.pickle delete mode 100644 docs/build/doctrees/idioms.doctree delete mode 100644 docs/build/doctrees/index.doctree delete mode 100644 docs/build/doctrees/overview-of-funcs-and-args.doctree delete mode 100644 docs/build/doctrees/refrence-manual.doctree delete mode 100644 docs/build/doctrees/the-response-object.doctree delete mode 100644 docs/build/html/a-look-at-sessions.html delete mode 100644 docs/build/html/genindex.html delete mode 100644 docs/build/html/idioms.html delete mode 100644 docs/build/html/index.html delete mode 100644 docs/build/html/overview-of-funcs-and-args.html delete mode 100644 docs/build/html/refrence-manual.html delete mode 100644 docs/build/html/search.html delete mode 100644 docs/build/html/the-response-object.html diff --git a/docs/build/doctrees/a-look-at-sessions.doctree b/docs/build/doctrees/a-look-at-sessions.doctree deleted file mode 100644 index 6db30749d6122a899760530034eada4ebe6a7a97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23068 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 diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle deleted file mode 100644 index 8fe83d7306dfff4d73c6e568020e5e519ee47745..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16697 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 diff --git a/docs/build/doctrees/idioms.doctree b/docs/build/doctrees/idioms.doctree deleted file mode 100644 index 0229632d3123868136d785ea355ba0f4497433f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21527 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 diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree deleted file mode 100644 index 733e39d588c3a677e7112abb607db76b704b2463..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19530 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 diff --git a/docs/build/doctrees/refrence-manual.doctree b/docs/build/doctrees/refrence-manual.doctree deleted file mode 100644 index 7f5221e86652fd3e25e2fe63e6dacc30020a7572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2620 zcmai0TWcFf6n5h1=8NpOaUPnOI+PH*sic&Y5=tqBKwk`kKpMzH7-n}zn!&p>+qu|s zA+&ucBrtEC{@;GHE3GaiR3O+nd*)oe^PO|{k30W-v$IwGd_PmEvm!S`sWN7Q??yqv zqz!+E^FPD;aOQiOUK{0f%7Wj5M#@E=X(q$Fz_)zIu+$1A8-3p5ZQgko&hWBjh0WQ@ zD}SGwOLICn)ocP2DLXBwbTkj~1}@xr&1TW{C-wdcRZwtpf3V*Mv*&Kf(Kt|L6UOxz`Sqt0-K; znsEJYT4g(k*#^3Z-tX1oIS6z$o8F>4%WPKc-HYWIY{0)__)|>$kBjXUz)-PIBiyir zpGUB7`F`qjWGI=lXN+v-l8OLh-!;ry)EJ$2w`s+RR?;$=1>b%{a|gmMdXe|XzBgr( zX=;@YIAj!jx3nm6*sa|V*uKPZXMS`#$7$cHltiA#w{X`&T>2*Xqlr>hD$7=0UflBg zv8|;m$ZVo?5g_Rsv{y+`jyN6+Og^Y3EN7L3Tno#|qTAqceqr8zNM5s2X-jfYDhK=h z4ySo@Z27xvCV-Wt)|rJ;%eOL?xGCKAuc?;63L2Wx0+OE9G-WZV@WJ+w{8z%VgzF!+%2GIKD z_0NMBaK8Rxvx+Q5{@dFGZzc zE>mPyL_Qs|S*Z*ot2Zl(q?TL>BWivgkW3hwV1WDNLEs|^Cm%+<(5 z3L1J~lq&ohYoI&-h#Z zhQH!t=X+6VZ%Tj_H{{zfe>HaeBtE~vmLKz{&hM|*tg^MA3e2Mz4D8pE*jEd^I_OnN zt%q+7RIW%=-q4^@y|*E3w0mn7dke4CrK2_bn2*}VfqcAaYyM`-chU8YS|8gT&4TY9 dgMm^TY?^ybyxWMY0_|jR-ppGw?m(9e{{@>!0UQ7T diff --git a/docs/build/doctrees/the-response-object.doctree b/docs/build/doctrees/the-response-object.doctree deleted file mode 100644 index 1976d0854d5eb9f80c975153d63e1a178488010c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17887 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 x((qWtn - - - - - - - asks - A Look at Sessions — asks 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-

asks - A Look at Sessions

-

While something like requests makes grabbing a single request very simple (and asks does too!); the sessions in asks aim to make getting a great many things simple as well.

-

asks’ sessions’ methods are the same as the base asks functions, supporting .get(), .head(), .post(), .put(), .delete(), .options() and .request().

-

For more info on how to use these methods, take a look-see.

-

There are two kinds of session in asks. The disparate session (DSession) and the homogeneous session(HSession).

-

The DSession class is aimed at working with many requests, to many hosts! Webscraping and such is an excellent use for this. This is like requests’ Session and should be familiar to use.

-

The HSession class is aimed at working with many requests to a single host. Dealing with an API is a great example of this and you’ll see more on that below.

-
-

HSession

-

The only required argument to HSession’s __init__ is a top level host name, like https://example.org .

-
from asks import HSession
-
-async def main():
-    s = HSession('https://example.org')
-    r = await s.get()
-
-
-

As you can see, unlike requests’ Session and asks DSession , we don’t need to give any arguments at all to a HSession ‘s’ get() method. Pretty weird right?

-

This means we can do things like set an endpoint, and just feed querys in to our .get() though the params arg without rebuilding the path for the request each time.

-

In the next example, we’ll make ten thousand calls over fifty connections to http://echo.jsontest.com. We’ll do much of the same as above, except we’ll set an endpoint of /asks/test and in each request pass a number as a path, like /1.

-

The result will be a bunch of calls that look like

-
    -
  • http://echo.jsontest.com/asks/test/1
  • -
  • http://echo.jsontest.com/asks/test/2
  • -
  • http://echo.jsontest.com/asks/test/etc.
  • -
-

Please don’t actually do this or the jsontest.com website will be very unhappy.

-
from asks import HSession
-import curio
-
-async def worker(num):
-    r = await s.get(path='/' + str(num))
-    print(r.text)
-
-async def main():
-    s.endpoint = '/asks/test'
-    for i in range(1, 10001):
-        await curio.spawn(worker(i))
-
-s = HSession('http://echo.jsontest.com', connections=50)
-curio.run(main())
-
-
-

The default number of connections in the pool for a HSession is a measly ONE. If I arbitrarily picked a number greater than one it would be too high for 49% of people and too low for the other 49%.

-

The connections argument dictates the maximum number of concurrent connections asks will be allowed to make at any point of the HSessions lifespan. You will want to change the number of connections to a value that suits your needs and the server’s limitations. If no data is publicly available to guide you here, air on the low side.

-

Now whilst we have all of this sweet sweet async speed, we must talk about our great great responsibility. asks is fast, and hammering the bejaysus out of a webservice shared by many people is selfish. Don’t be that guy / gal. Rate limit yourself by placing curio.sleep(n)‘s in appropriate the place(s), or utilising curio’s semaphores / taskgroups / queues etc.

-
-
-

DSession

-

The main difference between the DSession and the HSession is that you must supply a url to the DSession methods much like you would to a requests’ Session, and you do not instanciate it with a top level location.

-

Aside from that, the same stuff applies. You can add params , persist_cookies=True and do all of that other good stuff that you can do with the HSession class and methods.

-
from asks import DSession
-import curio
-
-url_list = ['a', 'bunch', 'of', 'random', 'urls']
-
-async def worker(url):
-    r = await s.get(url)
-    print(r.text)
-
-async def main():
-    for url in url_list:
-        await curio.spawn(worker(url))
-
-s = DSession()
-curio.run(main())
-
-
-

The default number of connections in the DSession pool is 20.

-
-
-

Stateful Sessions

-

HTTP is stateless, and by default asks is too. You can turn stateful cookie returning on by supplying the persist_cookies=True kwarg on session instanciation.

-
from asks import HSession
-
-async def main():
-    s = HSession('https://example.com', persist_cookies=True)
-    r = await s.get()
-
-
-
-
- - -
-
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html deleted file mode 100644 index 38bb657..0000000 --- a/docs/build/html/genindex.html +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - - - Index — asks 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - -
-
-
-
- - -

Index

- -
- -
- - -
-
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/build/html/idioms.html b/docs/build/html/idioms.html deleted file mode 100644 index 262558d..0000000 --- a/docs/build/html/idioms.html +++ /dev/null @@ -1,285 +0,0 @@ - - - - - - - - asks - Useful idioms and tricks. — asks 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-

asks - Useful idioms and tricks.

-
-

Sanely making many requests (with semaphores)

-

A (bounded) semaphore is like a sofa (sofaphore?). It can only fit so many tasks at once. If we have a semaphore who’s maximum size is 5 then only 5 tasks can sit on it. If one task finishes, another task can sit down. This is an extremely simple and effective way to manage the resources used by asks when making large amounts of requests.

-

If we wanted to request two thousand urls, we wouldn’t want to spawn two thousand tasks and have them all fight for cpu time.

-
import asks
-import curio
-
-async def worker(sema, url):
-    async with sema:
-        r = await asks.get(url)
-        print('got ', url)
-
-
-async def main(url_list):
-    sema = curio.BoundedSemaphore(value=2) # Set sofa size.
-    for url in url_list:
-        await curio.spawn(worker(sema, url))
-
-url_list = ['http://httpbin.org/delay/5',
-            'http://httpbin.org/delay/1',
-            'http://httpbin.org/delay/2']
-
-curio.run(main(url_list))
-
-
-

This method of limiting works for the single request asks functions and for any of the sessions’ methods.

-

The result of running this is that the first and second url (‘delay/5’ and ‘delay/1’) run. ‘delay/1’ finishes, and allows the third url, ‘delay/2’ to run.

-
    -
  • After one second, ‘delay/1’ finishes.
  • -
  • After three seconds, ‘delay/2’ finishes.
  • -
  • After five seconds, ‘delay/5’ finishes.
  • -
-
-
-

Maintaining Order

-

Due to the nature of async, if you feed a list of urls to asks in some fashion, and store the responses in a list, there is no gaurantee the responses will be in the same order as the list of urls.

-

A handy way of dealing with this on an example url_list is to pass the enumerated list as a dict dict(enumerate(url_list)) and then create a sorted list from a response dict. This sounds more confusing in writing than it is in code. Take a look:

-
import asks
-import curio
-
-results = {}
-
-url_list = ['a', 'big', 'list', 'of', 'urls']
-
-async def worker(key, url):
-    r = await s.get(url)
-    results[key] = r
-
-async def main(url_list):
-    url_dict = dict(enumerate(url_list))
-    for key, url in url_dict.items():
-        await curio.spawn(worker(key, url))
-
-sorted_results = [response for _, response in sorted(results.items())]
-
-s = asks.Session(connections=10)
-curio.run(main(url_list))
-
-
-

In the above example, sorted_results is a list of response objects in the same order as url_list.

-

There are of course many ways to achieve this, but the above is noob friendly. Another way of handling order would be a heapq, or managing it while iterating curio’s taskgroups. Here’s an example of that:

-
import asks
-import curio
-
-results = []
-url_list = ["https://www.httpbin.org/get" for _ in range(50)]
-s = asks.DSession()
-
-
-async def worker(key, url):
-    r = await s.get(url)
-    results.append((key, r.body))
-
-
-async def main():
-    async with curio.TaskGroup() as g:
-        for key, url in enumerate(url_list):
-            await g.spawn(worker, key, url)
-        # Here we iterate the TaskGroup, getting results as they come.
-        async for _ in g:
-            print(f"done with {results[-1][0]}")
-
-    sorted_results = [response for _, response in sorted(results)]
-    print(sorted_results)
-
-
-
-
-

Handling response body content (downloads etc.)

-

The recommended way to handle this sort of thing, is by streaming. The following examples use a context manager on the response body to ensure the underlying connection is always handled properly:

-
import asks
-import curio
-
-async def main():
-    r = await asks.get('http://httpbin.org/image/png', stream=True)
-    with open('our_image.png', 'ab') as out_file:
-        async with r.body: # you can do the usual "as x" here if you like.
-            async for bytechunk in r.body:
-                out_file.write(bytechunk)
-
-curio.run(main())
-
-
-

An example of multiple downloads with streaming:

-
import asks
-import curio
-from functools import partial
-
-async def downloader(filename, url):
-    r = await asks.get(url, stream=True)
-    async with curio.aopen(filename, 'ab') as out_file:
-        async with r.body:
-            async for bytechunk in r.body:
-                out_file.write(bytechunk)
-
-async def main():
-    for indx, url in enumerate(['http://placehold.it/1000x1000',
-                                'http://httpbin.org/image/png']):
-        func = partial(downloader, str(indx) + '.png')
-        await curio.spawn(func(url))
-
-curio.run(main())
-
-
-

The callback argument lets you pass a function as a callback that will be run on each byte chunk of response body as the request is being processed . A simple use case for this is downloading a file.

-

Below you’ll find an example of a single download of an image with a given filename, and multiple downloads with sequential numeric filenames. They are very similar to the streaming examples above.

-

We define a callback function downloader that takes bytes and saves ‘em, and pass it in.

-
import asks
-import curio
-
-async def downloader(bytechunk):
-    async with curio.aopen('our_image.png', 'ab') as out_file:
-        await out_file.write(bytechunk)
-
-async def main():
-    r = await asks.get('http://httpbin.org/image/png', callback=downloader)
-
-curio.run(main())
-
-
-

What about downloading a whole bunch of images, and naming them sequentially?

-
import asks
-import curio
-from functools import partial
-
-async def downloader(filename, bytechunk):
-    async with curio.aopen(filename, 'ab') as out_file:
-        await out_file.write(bytechunk)
-
-async def main():
-    for indx, url in enumerate(['http://placehold.it/1000x1000',
-                             'http://httpbin.org/image/png']):
-        func = partial(downloader, str(indx) + '.png')
-        await curio.spawn(asks.get(url, callback=func))
-
-curio.run(main())
-
-
-
- -
- - -
-
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/build/html/index.html b/docs/build/html/index.html deleted file mode 100644 index c169569..0000000 --- a/docs/build/html/index.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - asks — asks 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-

asks

- -
-

What is asks?

-

asks is an async http lib that can best be described as an effort to bring the same level of usable abstraction that requests offers synchronous python, to asynchronous python programming. Ideal for api interactions, webscraping etc.

-

It is important to note that the code examples in this documentation are to showcase asks, and not curio. In real code, it would be benificial to use things like curio’s taskgroups and other neat tools to manage your requests. Here’s a link to curio’s docs for refrence:

-

http://curio.rtfd.io/

-

(The most useful thing to know when dealing with asks is a BoundedSemaphore, for which I’ve written an example with asks )

-
-
-

Installation:

-

asks requires Python 3.6 .

-

The easiest way to install asks is to pip it:

-
pip install asks
-
-
-

asks was built for use with Curio. -Internally asks uses the excellent h11.

-
-
-

A dirty little example:

-

Here’s how to grab a single request and print it’s content:

-
# single_get.py
-import asks
-import curio
-
-async def grabber(url):
-    r = await asks.get(url)
-    print(r.content)
-
-curio.run(grabber('https://example.com'))
-
-# Results in:
-# b'<!doctype html>\n<html>\n<head>\n    <title>Example Domain</title>\n\n
-
-
-

Making one request in an async program is a little weird, but not without its use. This sort of basic asks.get() would slot in quite nicely in a greater program that makes some calls here and there.

-
-
-

A far finer example:

-

Here’s an example of making 1000 calls to an api and storing the results in a list. We’ll use the HSession here because all of our requests are to the same top level domain!:

-
# many_get.py
-# make a whole pile of api calls and store
-# their response objects in a list.
-# Using the homogeneous-session.
-
-import asks
-import curio
-
-path_list = ['a', 'list', 'of', '1000', 'paths']
-
-retrieved_responses = []
-
-s = asks.HSession('https://some-web-service.com',
-                  connections=20)
-
-async def grabber(a_path):
-    r = await s.get(path=a_path)
-    retrieved_responses.append(r)
-
-async def main(path_list):
-    for path in path_list:
-        curio.spawn(grabber(path))
-
-curio.run(main(path_list))
-
-
-

Now we’re talkin’.

-

A thousand requests running async at the drop of a hat, using clean burning connection pooling to play nicely with the target server.

-
-
-

Why asks?

-

If you like async, but don’t like the spaghetti-docs furture-laden many-looped asyncio lib, you’ll probably love curio. If you wish you could marry curio and requests, you’ll probably love asks.

-

Nice libs like aiohttp suffer the side effect of uglyness due to being specifically for asyncio. Inspired by requests and curio, I wanted to take that lovely ultra abstraction and apply it to an async http lib to eleviate some of the pain in dealing with async http.

-
-
-

Features

-

asks packs most if not all of the features requests does. The usual .json() ing of responses and such. You can take a more in depth look here.

-

However, because asks is aimed at crunching large piles of requests it takes a different approach to sessions. Sessions in asks are the main focus. More detail can be found here

-
-
-

The Future

-

As soon as trio supports async file i/o, asks will be available for trio too :)

-
-
-

Contributing

-

Contributions are very welcome :)

-
-
-

About

-

asks was created by Mark Jameson

-

http://theelous3.net

-

Shoutout to the fine folks of 8banana and co.

-
-
- - -
-
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/build/html/overview-of-funcs-and-args.html b/docs/build/html/overview-of-funcs-and-args.html deleted file mode 100644 index f66e836..0000000 --- a/docs/build/html/overview-of-funcs-and-args.html +++ /dev/null @@ -1,298 +0,0 @@ - - - - - - - - asks - An overview of the functions and kw/argumetns. — asks 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-

asks - An overview of the functions and kw/argumetns.

-

asks is heavily influenced by requests, and as such pretty much everything that works in requests works in asks. So, if you’re familiar with the format you can pretty much skip to the distinctions regarding sessions

-

The examples here use the base one-request-functions for verbosities sake, but all of these functions are completely transferrable to the DSession and HSession classes as methods.

-

(Calling asks.get('https://some-url.io')) really makes a temporary DSession.)

-
-

General HTTP methods

-

asks supports get(), head(), post(), put(), delete(), options() and request().

-

request takes a http method as a string for its first argument.

-

When using the basic functions they each require a uri:

-
import asks
-
-async def blah():
-    a = await asks.get('https://example.com')
-    s = await asks.head('http://httpbin.org')
-    k = await asks.post('https://webservice.net:25000')
-    s = await asks.put('www.your-coat-on.net') # <- no scheme! Will fail!
-    # etc.
-    r = await asks.request('GET', 'http://httpbin.org/get')
-
-
-

A scheme must be supplied. Port can be set by providing it in the uri.

-

All functions / methods share the same set of args / keyword args, though not all are appropriate for every http method.

-
-
-

Passing Queries

-

The params and data args take a dictionary and convert it in to a query string to be appended to to url, or sent in the request body, respectively.

-
async def example():
-    r = await asks.get('www.example.com', params={'Elmo': 'wants data'}))
-
-# sends as request path:
-b'?Elmo=wants+data'
-
-
-

You may also pass strings and iterables, asks will attempt to format them correctly.

-
async def example():
-    r = await asks.get('www.example.com', data='Elmo wants data'))
-
-# sends in request body:
-b'?Elmo+wants+data'
-
-
-
-
-

Custom Headers

-

Add your own custom headers or overwrite the default headers by supplying your own dict to the headers argument. Note that user headers set in this way will, if conflicting, take precedence.

-
async def example():
-    r = await asks.get('www.example.com',
-                       headers={'Custom-Header': 'My value'}))
-
-
-
-
-

Sending JSON

-

Pass python dict objects to the json argument to send them as json in your request. -Note that if your workflow here involves opening a json file, you should use curio’s aopen() to avoid stalling the program on disk reads.

-
dict_to_send = {'Data_1': 'Important thing',
-                'Data_2': 'Really important thing'}
-
-async def example():
-    r = await asks.post('www.example.com', json=dict_to_send))
-
-
-
-
-

Sending Files

-

Pass a dict in the form {filename: filepath} (as many as you like) and asks will asyncronously get the file data, building a multipart formatted http body. You can also pass non-file paths if you wish to send arbitrary multipart body data sections.

-
async def send_file():
-    r = await asks.post('http://httpbin.org/post',
-                        files={'file_1': 'my_file.txt'})
-
-# if we wanted to send both a file and some random data:
-async def send_file_and_data():
-    r = await asks.post('http://httpbin.org/post',
-                        files={'file_1': 'my_file.txt',
-                               'some_data': 'I am multipart hear me roar'})
-
-
-
-
-

Sending Cookies

-

Pass a dict of cookie name(key) / value pairs to the cookies arg to ship ‘em off.

-
async def example():
-    r = await asks.get('www.example.com',
-                       cookies={'Cookie Monster': 'Yum'}))
-
-
-
- -
-

Set Encoding

-

The default encoding is utf-8. You may override this by supplying a different encoding, be it a standard encoding or a custom one you’ve registered locally.

-
async def example():
-    r = await asks.get('www.example.com', encoding='Latin-1'))
-
-
-

Handy list of builtin encodings: https://gist.github.com/theelous3/7d6a3fe20a21966b809468fa336195e3

-
-
-

Limiting Redirects

-

You can limit the number of redirects by setting max_redirects. By default, the number of redirects is 20. asks will not redirect on HEAD requests.

-
async def example():
-    r = await asks.get('www.httpbin.org/redirect/3', max_redirects=2))
-
-
-
-
-

Set Timeout

-

Don’t want to wait forever? Me neither. You may set a timeout with the timeout arg. This limits the total time alotted for the request.

-
async def example():
-    r = await asks.get('www.httpbin.org/redirect/3', timeout=1))
-
-
-
-
-

Authing

-

Available off the bat, we have http basic auth and http digest auth.

-

To add auth in asks, you pass a tuple of ('username', 'password') to the __init__ of an auth class. For example:

-
import asks
-from asks import BasicAuth, DigestAuth
-
-usr_pw = ('AzureDiamond', 'hunter2')
-
-async def main():
-    r = await asks.get('https://some_protected.resource',
-                       auth=BasicAuth(usr_pw))
-    r2 = await asks.get('https://other_protected.thingy',
-                       auth=DigestAuth(usr_pw),
-                       auth_off_domain=True)
-
-
-

Note: asks will not pass auth along to connections that switch from http to https, or off domain locations, unless you pass auth_off_domain=True to the call.

-
-
-

Streaming response data

-

You can stream the body of a response by setting stream=True , and iterating the response object’s .body . An example of downloading a file:

-
import asks
-import curio
-
-async def main():
-    r = await asks.get('http://httpbin.org/image/png', stream=True)
-    async with curio.aopen('our_image.png', 'ab') as out_file:
-        async for bytechunk in r.body:
-            out_file.write(bytechunk)
-
-curio.run(main())
-
-
-

It is important to note that if you do not iterate the .body to completion, bad things may happen as the connection sits there and isn’t returned to the connection pool. You can get around this by context-managering the .body if there is a chance you might not iter fully.

-
import asks
-import curio
-
-async def main():
-    r = await asks.get('http://httpbin.com/image/png', stream=True)
-    async with curio.aopen('our_image.png', 'wb') as out_file:
-        async with r.body: # Bam! Safe!
-            async for bytechunk in r.body:
-                await out_file.write(bytechunk)
-
-curio.run(main())
-
-
-

This way, once you leave the async with block, the asks will automatically ensure the underlying socket is handled properly. You may also call .body.close() to manually close the stream.

-

The streaming body can also be used for streaming feeds and stuff of twitter and the likes.

-

For some examples of how to use this, look here

-
-
-

Callbacks

-

Similar enough to streaming as seen above, but happens during the processing of the response body, before the response object is returned. Overall probably worse to use than streaming in every case but I’m sure someone will find a use for it.

-

The callback argument lets you pass a function as a callback that will be run on each bytechunk of response body as the request is being processed.

-

For some examples of how to use this, look here

-
-
- - -
-
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/build/html/refrence-manual.html b/docs/build/html/refrence-manual.html deleted file mode 100644 index 5cef579..0000000 --- a/docs/build/html/refrence-manual.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - asks - refrence manual — asks 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-

asks - refrence manual

-
-

Coming soon!

-

Today, even.

-
-
- - -
-
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/build/html/search.html b/docs/build/html/search.html deleted file mode 100644 index 042a522..0000000 --- a/docs/build/html/search.html +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - Search — asks 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -

Search

-
- -

- Please activate JavaScript to enable the search - functionality. -

-
-

- From here you can search these documents. Enter your search - words into the box below and click "search". Note that the search - function will automatically search for all of the words. Pages - containing fewer words won't appear in the result list. -

-
- - - -
- -
- -
- -
-
-
- -
-
- - - - - - - \ No newline at end of file diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index d3e7725..b10a2fd 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["a-look-at-sessions","idioms","index","overview-of-funcs-and-args","the-response-object"],envversion:51,filenames:["a-look-at-sessions.rst","idioms.rst","index.rst","overview-of-funcs-and-args.rst","the-response-object.rst"],objects:{},objnames:{},objtypes:{},terms:{"0xb":4,"0xb6a807cc":4,"1000x1000":1,"7d6a3fe20a21966b809468fa336195e3":3,"8banana":2,"abstract":2,"byte":[1,4],"case":[1,3],"class":[0,3],"default":[0,3,4],"final":4,"function":[0,1,2],"import":[0,1,2,3],"return":[0,3,4],"switch":3,"true":[0,1,3,4],"try":4,"while":[0,1],But:[],For:[0,3,4],ONE:0,The:[0,1,3],There:[0,1,4],These:[],Useful:2,Using:2,Will:3,_____:[],__init__:[0,3],a_cooki:1,a_path:2,about:[0,1],abov:[0,1,3,4],accept:4,access:4,acess:4,achiev:1,actual:0,add:[0,3],adding:[],after:[1,4],agenda:[],aim:[0,2],aiohttp:2,air:0,all:[0,1,2,3,4],allow:[0,1],along:3,alot:3,also:3,alwai:1,amount:1,ani:[0,1,4],anoth:1,aopen:[1,3],api:[0,2],append:[1,2,3],appli:[0,2],approach:2,appropri:[0,3],arbitrari:3,arbitrarili:0,arg:[0,3,4],argument:[0,1,3],argumetn:2,around:3,asid:0,async:[0,1,2,3,4],asynchron:2,asyncio:2,asyncron:3,attempt:[3,4],attrib:4,attribut:[1,4],auth:[2,4],auth_off_domain:3,automat:3,avail:[0,2,3,4],avoid:3,await:[0,1,2,3],azurediamond:3,bad:3,bam:3,ban:[],barebon:[],base:[0,3],basic:[2,3,4],basicauth:3,bat:3,becaus:2,been:[],befor:[3,4],being:[1,2,3],bejaysu:0,below:[0,1],benifici:2,best:2,between:0,big:1,blah:3,block:3,bodi:[2,3],both:3,bound:1,boundedsemaphor:[1,2],bring:2,build:3,built:[2,4],builtin:3,bunch:[0,1],burn:2,bytechunk:[1,3],call:[0,2,3,4],callback:[1,2],can:[0,1,2,3,4],chanc:3,chang:0,chunk:1,clean:2,close:3,coat:3,code:[1,2,4],codec:4,com:[0,1,2,3,4],come:1,comment:4,complet:3,compress:4,concurr:0,conflict:3,confus:1,connect:[0,1,2,3],context:[1,3],conveni:[],convert:3,cooki:[0,2],cookie_interact:[],cookies_to_go:1,correctli:3,could:2,cours:1,cpu:1,crappi:[],creat:[1,2],crunch:2,curio:[0,1,2,3],custom:2,dabeaz:[],data:[0,2,4],data_1:3,data_2:3,deal:[0,1,2],decod:2,decompress:4,def:[0,1,2,3,4],defin:1,delai:1,delet:[0,3],depth:2,describ:2,detail:2,dict:[1,3,4],dict_to_send:3,dictat:0,dictionari:3,differ:[0,2,3],digest:3,digestauth:3,disk:3,dispar:0,distinct:3,doc:2,doctyp:2,document:2,doe:[0,2,3],doing:[],domain:[2,3,4],don:[0,2,3,4],done:1,down:1,download:[2,3],drop:2,dsession:[1,2,3],due:[1,2],dure:[3,4],each:[0,1,3,4],easiest:2,echo:0,effect:[1,2],effort:2,either:4,elevi:2,elmo:3,enabl:3,encod:2,endpoint:0,enough:3,ensur:[1,3],enumer:1,etc:[0,2,3,4],even:[],everi:[3,4],everyth:3,exactli:4,exampl:[0,1,3,4],excel:[0,2],except:0,expir:4,extrem:1,eyes:4,facilit:[],fail:3,familiar:[0,3],fashion:1,fast:0,feed:[0,1,3],fifti:0,fight:1,file:[1,2],file_1:3,filenam:[1,3],filepath:3,find:[1,3],fine:2,finish:1,first:[1,3],fit:1,five:1,focu:2,folk:2,follow:1,forev:3,form:3,format:3,found:[2,4],friendli:1,from:[0,1,3,4],fulli:3,func:1,functool:1,furtur:2,gal:0,gaurante:1,gener:[2,4],get:[0,1,2,3,4],gist:3,git:[],github:3,give:0,given:1,glean:4,good:0,got:1,grab:[0,2],grabber:2,great:0,greater:[0,2],guess:[],gui:0,guid:0,gzip:4,h11:2,hammer:0,handi:[1,3],handl:[2,3,4],happen:3,has:4,hat:2,have:[0,1,3,4],head:[0,2,3],header:2,heapq:1,hear:3,heavili:3,here:[0,1,2,3,4],high:0,histori:2,homogen:[0,2],host:[0,4],how:[0,2,3],howev:2,hsession:[2,3],html:[2,4],http:[0,1,2,4],http_version:4,httpbin:[1,3,4],human:4,hunter2:3,ideal:2,idiom:2,imag:[1,3],indx:1,influenc:3,info:0,ing:2,inspir:2,instanci:0,intend:4,interact:2,intern:2,involv:3,isn:3,item:1,iter:[1,3,4],its:[2,3],jameson:2,json:2,jsontest:0,just:[0,3,4],keep:4,kei:[1,3],keyword:3,kind:0,know:2,kwarg:0,laden:2,larg:[1,2],latin:[3,4],leav:3,let:[1,3],level:[0,2],lib:2,lifespan:0,like:[0,1,2,3,4],limit:[0,1,2],line:2,link:2,list:[1,2,3,4],load:4,local:[3,4],locat:[0,3],look:[1,2,3],loop:2,love:2,low:0,mad:4,made:4,magic:[],mai:[3,4],main:[0,1,2,3,4],maintain:2,make:[0,2,3,4],manag:[1,2,3],mani:[0,2,3],manual:3,many_get:2,mark:2,marri:2,master:[],max_redirect:3,maximum:[0,1],mean:0,measli:0,method:[0,1,2,4],might:3,minor:[],modul:4,monster:3,more:[0,1,2,4],most:2,much:[0,3],multipart:3,multipl:1,must:[0,3],my_fil:3,name:[0,1,3,4],natur:1,neat:2,need:[0,4],neither:3,net:[2,3],next:0,nice:2,non:3,noob:1,note:[2,3,4],noth:4,now:[0,2],num:0,number:[0,3],numer:1,object:[1,2,3],off:3,offer:2,onc:[1,3],one:[0,1,2,3,4],onli:[0,1],open:[1,3],option:[0,3],order:2,org:[0,1,3,4],other:[0,2],other_protect:3,our:[0,2],our_imag:[1,3],out:0,out_fil:[1,3],over:0,overal:3,overrid:[3,4],overview:2,overwrit:3,own:3,pack:2,pain:2,pair:3,param:[0,3],part:4,partial:1,pass:[0,1,2],password:3,path:[0,2,3,4],path_list:2,peopl:0,persist_cooki:[0,3],phrase:4,pick:0,pile:2,pip:2,place:0,placehold:1,plai:2,plain:4,pleas:0,png:[1,3],point:0,pool:[0,2,3],poor:4,port:3,post:[0,3],preced:3,pretti:[0,3,4],previous_response_object:1,print:[0,1,2,4],probabl:[2,3],process:[1,3],program:[2,3],properli:[1,3],properti:4,provid:3,publicli:0,put:[0,3],python:[2,3,4],queri:[0,2],queue:0,quit:[2,4],random:[0,3],rang:[0,1,4],rate:0,raw:2,read:[3,4],readabl:4,real:2,realli:3,reason:4,reason_phras:4,rebuild:0,recommend:1,redirect:[2,4],refrenc:[1,2],regard:3,regist:[3,4],repo:[],request:[0,2,3,4],requir:[0,2,3,4],resend:2,resourc:[1,3],respect:3,respons:[0,2],result:[0,1,2,4],retrieved_respons:2,right:0,roar:3,rtfd:2,run:[0,1,2,3],safe:3,sake:3,same:[0,1,2,3],sane:2,save:1,scheme:3,second:1,section:3,secur:4,see:[0,4],seen:3,selfish:0,sema:1,semaphor:[0,2],send:2,send_fil:3,send_file_and_data:3,sent:[3,4],sequenti:1,server:[0,2],servic:2,session:[1,2,3],set:[0,1,2,4],share:[0,3],shell:4,ship:3,should:[0,3],shoutout:2,showcas:2,side:[0,2],similar:[1,3],simpl:[0,1],simpli:1,singl:[0,1,2],single_get:2,sit:[1,3],size:1,skip:3,sleep:0,slightli:4,slot:2,socket:3,sofa:1,sofaphor:1,some:[1,2,3,4],some_data:3,some_protect:3,someon:3,someth:[0,4],soon:2,sort:[1,2],sorted_result:1,sound:1,spaghetti:2,spawn:[0,1,2],specif:2,speed:0,stall:3,standard:3,state:2,stateless:0,statu:2,status_cod:4,store:[1,2,4],str:[0,1],stream:[1,2,4],streamlin:[],string:3,stuff:[0,3],suffer:2,suit:0,suppli:[0,3],support:[0,2,3],sure:3,sweet:0,synchron:2,take:[0,1,2,3],talk:0,talkin:2,target:2,task:1,taskgroup:[0,1,2],temporari:3,ten:0,test:0,test_fil:[],text:[0,2],than:[0,1,3],theelous3:[2,3],thei:[1,3,4],them:[1,3],thi:[0,1,2,3,4],thing:[0,1,2,3],thingi:3,third:1,those:4,though:[0,3],thousand:[0,1,2],three:[1,4],through:4,time:[0,1,3],timeout:2,titl:2,todai:[],too:[0,2,4],tool:2,top:[0,2],total:3,transferr:3,tri:[],trick:2,trio:2,tupl:3,turn:0,twitter:3,two:[0,1,3],txt:3,ugly:2,ultra:2,underli:[1,3],unhappi:0,unless:3,unlik:0,unlimit:[],uri:3,url:[0,1,2,3],url_dict:1,url_list:[0,1],usabl:2,use:[0,1,2,3,4],used:[1,3],useful:2,user:3,usernam:3,uses:[2,4],using:[2,3],usr_pw:3,usual:[1,2],utf:[3,4],utilis:0,valid:4,valu:[0,1,3,4],verbos:3,veri:[0,1,2],version:4,view:2,voodoo:4,wai:[1,2,3,4],wait:3,want:[0,1,2,3,4],web:2,webscrap:[0,2],webservic:[0,3],websit:0,wee:4,weird:[0,2],welcom:2,well:0,were:4,what:1,when:[1,2,3],which:[2,4],whilst:0,who:1,whole:[1,2],wish:[2,3],without:[0,2],work:[0,1,3],worker:[0,1],workflow:3,worri:4,wors:3,would:[0,1,2],wouldn:1,write:[1,3],written:2,www:[1,3],you:[0,1,2,3,4],your:[0,2,3,4],yourself:0,yum:3},titles:["asks - A Look at Sessions","asks - Useful idioms and tricks.","asks","asks - An overview of the functions and kw/argumetns.","asks - The Response Object"],titleterms:{"function":3,The:[2,4],Useful:1,about:2,argumetn:3,ask:[0,1,2,3,4],auth:3,barebon:[],bodi:[1,4],callback:3,come:[],connect:[],content:[1,2,4],contribut:2,cooki:[1,3,4],creat:[],custom:3,data:3,decod:4,dirti:2,download:1,dsession:0,encod:[3,4],etc:1,exampl:2,far:2,featur:2,file:3,finer:2,futur:2,gener:3,handl:1,header:[3,4],histori:4,hsession:0,http:3,idiom:1,instal:2,interact:3,json:[3,4],limit:3,line:4,littl:2,look:0,maintain:1,make:1,mani:1,manual:[],method:3,object:4,order:1,overview:3,pass:3,pool:[],queri:3,raw:4,redirect:3,refrenc:[],request:1,resend:1,respons:[1,3,4],sane:1,semaphor:1,send:3,session:0,set:3,soon:[],state:0,statu:4,stream:3,text:4,timeout:3,trick:1,view:4,what:2,why:2}}) \ No newline at end of file +Search.setIndex({docnames:["a-look-at-sessions","idioms","index","overview-of-funcs-and-args","the-response-object"],envversion:51,filenames:["a-look-at-sessions.rst","idioms.rst","index.rst","overview-of-funcs-and-args.rst","the-response-object.rst"],objects:{},objnames:{},objtypes:{},terms:{"0xb":4,"0xb6a807cc":4,"1000x1000":1,"7d6a3fe20a21966b809468fa336195e3":3,"8banana":2,"abstract":2,"byte":[1,4],"case":[1,3],"class":[0,3],"default":[0,3,4],"final":4,"function":[0,1,2],"import":[0,1,2,3],"return":[0,3,4],"switch":3,"true":[0,1,3,4],"try":4,"while":[0,1],For:[0,3,4],ONE:0,The:[0,1,3],There:[0,1,4],Useful:2,Using:2,Will:3,__init__:[0,3],a_cooki:1,a_path:2,about:[0,1],abov:[0,1,3,4],accept:4,access:4,acess:4,achiev:1,actual:0,add:[0,3],after:[1,4],aim:[0,2],aiohttp:2,air:0,all:[0,1,2,3,4],allow:[0,1],along:3,alot:3,also:3,alwai:1,amount:1,ani:[0,1,4],anoth:1,aopen:[1,3],api:[0,2],append:[1,2,3],appli:[0,2],approach:2,appropri:[0,3],arbitrari:3,arbitrarili:0,arg:[0,3,4],argument:[0,1,3],argumetn:2,around:3,asid:0,async:[0,1,2,3,4],asynchron:2,asyncio:2,asyncron:3,attempt:[3,4],attrib:4,attribut:[1,4],auth:[2,4],auth_off_domain:3,automat:3,avail:[0,2,3,4],avoid:3,await:[0,1,2,3],azurediamond:3,bad:3,bam:3,base:[0,3],basic:[2,3,4],basicauth:3,bat:3,becaus:2,befor:[3,4],being:[1,2,3],bejaysu:0,below:[0,1],benifici:2,best:2,between:0,big:1,blah:3,block:3,bodi:[2,3],both:3,bound:1,boundedsemaphor:[1,2],bring:2,build:3,built:[2,4],builtin:3,bunch:[0,1],burn:2,bytechunk:[1,3],call:[0,2,3,4],callback:[1,2],can:[0,1,2,3,4],chanc:3,chang:0,chunk:1,clean:2,close:3,coat:3,code:[1,2,4],codec:4,com:[0,1,2,3,4],come:1,comment:4,complet:3,compress:4,concurr:0,conflict:3,confus:1,connect:[0,1,2,3],context:[1,3],convert:3,cooki:[0,2],cookies_to_go:1,correctli:3,could:2,cours:1,cpu:1,creat:[1,2],crunch:2,curio:[0,1,2,3],custom:2,data:[0,2,4],data_1:3,data_2:3,deal:[0,1,2],decod:2,decompress:4,def:[0,1,2,3,4],defin:1,delai:1,delet:[0,3],depth:2,describ:2,detail:2,dict:[1,3,4],dict_to_send:3,dictat:0,dictionari:3,differ:[0,2,3],digest:3,digestauth:3,disk:3,dispar:0,distinct:3,doc:2,doctyp:2,document:2,doe:[0,2,3],domain:[2,3,4],don:[0,2,3,4],done:1,down:1,download:[2,3],drop:2,dsession:[1,2,3],due:[1,2],dure:[3,4],each:[0,1,3,4],easiest:2,echo:0,effect:[1,2],effort:2,either:4,elevi:2,elmo:3,enabl:3,encod:2,endpoint:0,enough:3,ensur:[1,3],enumer:1,etc:[0,2,3,4],everi:[3,4],everyth:3,exactli:4,exampl:[0,1,3,4],excel:[0,2],except:0,expir:4,extrem:1,eyes:4,fail:3,familiar:[0,3],fashion:1,fast:0,feed:[0,1,3],fifti:0,fight:1,file:[1,2],file_1:3,filenam:[1,3],filepath:3,find:[1,3],fine:2,finish:1,first:[1,3],fit:1,five:1,focu:2,folk:2,follow:1,forev:3,form:3,format:3,found:[2,4],friendli:1,from:[0,1,3,4],fulli:3,func:1,functool:1,furtur:2,gal:0,gaurante:1,gener:[2,4],get:[0,1,2,3,4],gist:3,github:3,give:0,given:1,glean:4,good:0,got:1,grab:[0,2],grabber:2,great:0,greater:[0,2],gui:0,guid:0,gzip:4,h11:2,hammer:0,handi:[1,3],handl:[2,3,4],happen:3,has:4,hat:2,have:[0,1,3,4],head:[0,2,3],header:2,heapq:1,hear:3,heavili:3,here:[0,1,2,3,4],high:0,histori:2,homogen:[0,2],host:[0,4],how:[0,2,3],howev:2,hsession:[2,3],html:[2,4],http:[0,1,2,4],http_version:4,httpbin:[1,3,4],human:4,hunter2:3,ideal:2,idiom:2,imag:[1,3],indx:1,influenc:3,info:0,ing:2,inspir:2,instanci:0,intend:4,interact:2,intern:2,involv:3,isn:3,item:1,iter:[1,3,4],its:[2,3],jameson:2,json:2,jsontest:0,just:[0,3,4],keep:4,kei:[1,3],keyword:3,kind:0,know:2,kwarg:0,laden:2,larg:[1,2],latin:[3,4],leav:3,let:[1,3],level:[0,2],lib:2,lifespan:0,like:[0,1,2,3,4],limit:[0,1,2],line:2,link:2,list:[1,2,3,4],load:4,local:[3,4],locat:[0,3],look:[1,2,3],loop:2,love:2,low:0,mad:4,made:4,mai:[3,4],main:[0,1,2,3,4],maintain:2,make:[0,2,3,4],manag:[1,2,3],mani:[0,2,3],manual:3,many_get:2,mark:2,marri:2,max_redirect:3,maximum:[0,1],mean:0,measli:0,method:[0,1,2,4],might:3,modul:4,monster:3,more:[0,1,2,4],most:2,much:[0,3],multipart:3,multipl:1,must:[0,3],my_fil:3,name:[0,1,3,4],natur:1,neat:2,need:[0,4],neither:3,net:[2,3],next:0,nice:2,non:3,noob:1,note:[2,3,4],noth:4,now:[0,2],num:0,number:[0,3],numer:1,object:[1,2,3],off:3,offer:2,onc:[1,3],one:[0,1,2,3,4],onli:[0,1],open:[1,3],option:[0,3],order:2,org:[0,1,3,4],other:[0,2],other_protect:3,our:[0,2],our_imag:[1,3],out:0,out_fil:[1,3],over:0,overal:3,overrid:[3,4],overview:2,overwrit:3,own:3,pack:2,pain:2,pair:3,param:[0,3],part:4,partial:1,pass:[0,1,2],password:3,path:[0,2,3,4],path_list:2,peopl:0,persist_cooki:[0,3],phrase:4,pick:0,pile:2,pip:2,place:0,placehold:1,plai:2,plain:4,pleas:0,png:[1,3],point:0,pool:[0,2,3],poor:4,port:3,post:[0,3],preced:3,pretti:[0,3,4],previous_response_object:1,print:[0,1,2,4],probabl:[2,3],process:[1,3],program:[2,3],properli:[1,3],properti:4,provid:3,publicli:0,put:[0,3],python:[2,3,4],queri:[0,2],queue:0,quit:[2,4],random:[0,3],rang:[0,1,4],rate:0,raw:2,read:[3,4],readabl:4,real:2,realli:3,reason:4,reason_phras:4,rebuild:0,recommend:1,redirect:[2,4],refrenc:[1,2],regard:3,regist:[3,4],request:[0,2,3,4],requir:[0,2,3,4],resend:2,resourc:[1,3],respect:3,respons:[0,2],result:[0,1,2,4],retrieved_respons:2,right:0,roar:3,rtfd:2,run:[0,1,2,3],safe:3,sake:3,same:[0,1,2,3],sane:2,save:1,scheme:3,second:1,section:3,secur:4,see:[0,4],seen:3,selfish:0,sema:1,semaphor:[0,2],send:2,send_fil:3,send_file_and_data:3,sent:[3,4],sequenti:1,server:[0,2],servic:2,session:[1,2,3],set:[0,1,2,4],share:[0,3],shell:4,ship:3,should:[0,3],shoutout:2,showcas:2,side:[0,2],similar:[1,3],simpl:[0,1],simpli:1,singl:[0,1,2],single_get:2,sit:[1,3],size:1,skip:3,sleep:0,slightli:4,slot:2,socket:3,sofa:1,sofaphor:1,some:[1,2,3,4],some_data:3,some_protect:3,someon:3,someth:[0,4],soon:2,sort:[1,2],sorted_result:1,sound:1,spaghetti:2,spawn:[0,1,2],specif:2,speed:0,stall:3,standard:3,state:2,stateless:0,statu:2,status_cod:4,store:[1,2,4],str:[0,1],stream:[1,2,4],string:3,stuff:[0,3],suffer:2,suit:0,suppli:[0,3],support:[0,2,3],sure:3,sweet:0,synchron:2,take:[0,1,2,3],talk:0,talkin:2,target:2,task:1,taskgroup:[0,1,2],temporari:3,ten:0,test:0,text:[0,2],than:[0,1,3],theelous3:[2,3],thei:[1,3,4],them:[1,3],thi:[0,1,2,3,4],thing:[0,1,2,3],thingi:3,third:1,those:4,though:[0,3],thousand:[0,1,2],three:[1,4],through:4,time:[0,1,3],timeout:2,titl:2,too:[0,2,4],tool:2,top:[0,2],total:3,transferr:3,trick:2,trio:2,tupl:3,turn:0,twitter:3,two:[0,1,3],txt:3,ugly:2,ultra:2,underli:[1,3],unhappi:0,unless:3,unlik:0,uri:3,url:[0,1,2,3],url_dict:1,url_list:[0,1],usabl:2,use:[0,1,2,3,4],used:[1,3],useful:2,user:3,usernam:3,uses:[2,4],using:[2,3],usr_pw:3,usual:[1,2],utf:[3,4],utilis:0,valid:4,valu:[0,1,3,4],verbos:3,veri:[0,1,2],version:4,view:2,voodoo:4,wai:[1,2,3,4],wait:3,want:[0,1,2,3,4],web:2,webscrap:[0,2],webservic:[0,3],websit:0,wee:4,weird:[0,2],welcom:2,well:0,were:4,what:1,when:[1,2,3],which:[2,4],whilst:0,who:1,whole:[1,2],wish:[2,3],without:[0,2],work:[0,1,3],worker:[0,1],workflow:3,worri:4,wors:3,would:[0,1,2],wouldn:1,write:[1,3],written:2,www:[1,3],you:[0,1,2,3,4],your:[0,2,3,4],yourself:0,yum:3},titles:["asks - A Look at Sessions","asks - Useful idioms and tricks.","asks","asks - An overview of the functions and kw/argumetns.","asks - The Response Object"],titleterms:{"function":3,The:[2,4],Useful:1,about:2,argumetn:3,ask:[0,1,2,3,4],auth:3,bodi:[1,4],callback:3,content:[1,2,4],contribut:2,cooki:[1,3,4],custom:3,data:3,decod:4,dirti:2,download:1,dsession:0,encod:[3,4],etc:1,exampl:2,far:2,featur:2,file:3,finer:2,futur:2,gener:3,handl:1,header:[3,4],histori:4,hsession:0,http:3,idiom:1,instal:2,interact:3,json:[3,4],limit:3,line:4,littl:2,look:0,maintain:1,make:1,mani:1,method:3,object:4,order:1,overview:3,pass:3,queri:3,raw:4,redirect:3,request:1,resend:1,respons:[1,3,4],sane:1,semaphor:1,send:3,session:0,set:3,state:0,statu:4,stream:3,text:4,timeout:3,trick:1,view:4,what:2,why:2}}) \ No newline at end of file diff --git a/docs/build/html/the-response-object.html b/docs/build/html/the-response-object.html deleted file mode 100644 index 5e475a3..0000000 --- a/docs/build/html/the-response-object.html +++ /dev/null @@ -1,210 +0,0 @@ - - - - - - - - asks - The Response Object — asks 0.0.1 documentation - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-

asks - The Response Object

-

A plain ol’ response object, Response is returned from every request.

-

It has some attribs/properties to access the response content. Nothing too voodoo.

-
-

Encoding

-

By default the Response object uses utf-8.

-

The response object will try to glean encoding from the response headers if available, before it’s returned.

-

You can override the response-set or default encoding with either a built-in encoding or one you’ve registered locally with your codecs module by accessing the response’s .encoding attribute.

-
async def main():
-    r = asks.get('http://example.com')
-    r.encoding = 'latin-1'
-
-
-
-
-

Status Line

-

The three parts of the status line, are the HTTP-Version, Status-Code and Reason-Phrase. They can be accessed as attributes of the response object like so:

-
async def main():
-    r = asks.get('http://example.com')
-
-    r.http_version  # -> '1.1'
-    r.status_code   # -> 200
-    r.reason_phrase # -> 'OK'
-
-
-
-
-

Headers

-

The headers are available as a dict through Response.headers

-
async def main():
-    r = asks.get('http://example.com')
-    print(r.headers)
-
-# Results in:
-# {'Content-Encoding': 'gzip', 'Accept-Ranges': 'bytes', ...
-
-
-
-
-

JSON

-

If the response body is valid JSON you can load it as a python dict by calling the response object’s .json() method.

-

If the response was compressed, it will be decompressed.

-
async def main():
-    r = asks.get('http://httpbin.org/get')
-    j = r.json()
-    print(j)
-
-# Results in
-# {'args': {}, 'headers': {'Accept': '*/*', 'Accept-Encoding', ...
-
-
-
-
-

View Body (text decoded, content, raw)

-

Generally the way to see the body as it was intended is to use the .content property. This will return the content as is, after decompression if there was any.

-

For something slightly more human readable, you may want to try the .text property. This will attempt to decompress (if needed) and decode the content (with .encoding). This for example, makes html and json etc. quite readable in your shell.

-

To view the body exactly as it was sent, just use the .body attribute. Note that this may be compressed madness, so don’t worry if you can’t read it with your poor wee eyes.

-
async def main():
-        r = asks.get('http://example.com')
-
-        r.content
-        r.text
-        r.body
-
-
-

If the request was made with stream=True, the .body attribute will be an iterable from which you can stream data.

-
-
-

Cookies

-

Each response object will keep a list of any cookies set during the response, acessible by the .cookies attribute. Each cookie is a Cookie object. They are pretty basic. Here’s a list of attributes:

-
    -
  • .name
  • -
  • .value
  • -
  • .domain
  • -
  • .path
  • -
  • .secure
  • -
  • .expires
  • -
  • .comment
  • -
  • .host
  • -
-

There may be more values set by the response.

-
-
-

Response History

-

If any redirects or 401-requiring auth attempts were handled during the request, the response objects for those requests will be stored in the final response object’s .history attribute in a list. Any response objects found in there are exactly like your main response object, and have all of the above methods, properties, and attributes.

-
async def main():
-        r = asks.get('http://httpbin.org/redirect/3')
-        print(r.history)
-        print(r.history[1].status_code)
-
-    # Results in:
-    # [<Response 302 at 0xb6a807cc>, <Response 302 at 0xb...
-    # 302
-
-
-
-
- - -
-
-
- -
-
- - - - - - - \ No newline at end of file