Skip to content

Commit

Permalink
docs: consolidate (#705)
Browse files Browse the repository at this point in the history
* docs: migrate http-client doc

* docs: consolidate README content with twilio docs content

* chore: remove old docs reference
  • Loading branch information
stern-shawn authored Apr 13, 2023
1 parent 9fd5f3f commit d98fae5
Show file tree
Hide file tree
Showing 4 changed files with 260 additions and 57 deletions.
7 changes: 1 addition & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ it can be.
## <a name="question"></a> Got an API/Product Question or Problem?

If you have questions about how to use `twilio-python`, please see our
[docs][docs-link], and if you don't find the answer there, please contact
[docs](./README.md), and if you don't find the answer there, please contact
[[email protected]](mailto:[email protected]) with any issues you have.

## <a name="issue"></a> Found an Issue?
Expand Down Expand Up @@ -69,10 +69,6 @@ you're working on.
For large fixes, please build and test the documentation before submitting the
PR to be sure you haven't accidentally introduced layout or formatting issues.

If you want to help improve the docs at
[https://www.twilio.com/docs/libraries/python][docs-link], please contact
[[email protected]](mailto:[email protected]).

## <a name="submit"></a> Submission Guidelines

### Submitting an Issue
Expand Down Expand Up @@ -162,6 +158,5 @@ There exists a separate `requirements.txt` document under `tests` that contains
make test-install test
```
[docs-link]: https://www.twilio.com/docs/libraries/python
[issue-link]: https://github.com/twilio/twilio-python/issues/new
[github]: https://github.com/twilio/twilio-python
144 changes: 98 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,68 +15,101 @@ The Python library documentation can be found [here][libdocs].

`twilio-python` uses a modified version of [Semantic Versioning](https://semver.org) for all changes. [See this document](VERSIONS.md) for details.

### Migrating from 5.x

Please consult the [official migration guide](https://www.twilio.com/docs/libraries/python/migration-guide) for information on upgrading your application using twilio-python 5.x to 6.x

### Supported Python Versions

This library supports the following Python implementations:

* Python 3.7
* Python 3.8
* Python 3.9
* Python 3.10
* Python 3.11
- Python 3.7
- Python 3.8
- Python 3.9
- Python 3.10
- Python 3.11

## Installation

Install from PyPi using [pip](https://pip.pypa.io/en/latest/), a
package manager for Python.

pip install twilio
```shell
pip3 install twilio
```

If pip install fails on Windows, check the path length of the directory. If it is greater 260 characters then enable [Long Paths](https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation) or choose other shorter location.

Don't have pip installed? Try installing it, by running this from the command
line:

$ curl https://bootstrap.pypa.io/get-pip.py | python
```shell
curl https://bootstrap.pypa.io/get-pip.py | python
```

Or, you can [download the source code
(ZIP)](https://github.com/twilio/twilio-python/zipball/main "twilio-python
source code") for `twilio-python`, and then run:
(ZIP)](https://github.com/twilio/twilio-python/zipball/main 'twilio-python
source code') for `twilio-python`, and then run:

```shell
python3 setup.py install
```

python setup.py install
> **Info**
> If the command line gives you an error message that says Permission Denied, try running the above commands with `sudo` (e.g., `sudo pip3 install twilio`).
You may need to run the above commands with `sudo`.
### Test your installation

## Getting Started
Try sending yourself an SMS message. Save the following code sample to your computer with a text editor. Be sure to update the `account_sid`, `auth_token`, and `from_` phone number with values from your [Twilio account](https://console.twilio.com). The `to` phone number will be your own mobile phone.

Getting started with the Twilio API couldn't be easier. Create a
`Client` and you're ready to go.
```python
from twilio.rest import Client

# Your Account SID and Auth Token from console.twilio.com
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"

client = Client(account_sid, auth_token)

message = client.messages.create(
to="+15558675309",
from_="+15017250604",
body="Hello from Python!")

print(message.sid)
```

Save the file as `send_sms.py`. In the terminal, `cd` to the directory containing the file you just saved then run:

```shell
python3 send_sms.py
```

After a brief delay, you will receive the text message on your phone.

> **Warning**
> It's okay to hardcode your credentials when testing locally, but you should use environment variables to keep them secret before committing any code or deploying to production. Check out [How to Set Environment Variables](https://www.twilio.com/blog/2017/01/how-to-set-environment-variables.html) for more information.
## Use the helper library

### API Credentials

The `Twilio` client needs your Twilio credentials. You can either pass these
directly to the constructor (see the code below) or via environment variables.
The `Twilio` client needs your Twilio credentials. You can either pass these directly to the constructor (see the code below) or via environment variables.

Authenticating with Account SID and Auth Token:

```python
from twilio.rest import Client

account_sid = "ACXXXXXXXXXXXXXXXXX"
auth_token = "YYYYYYYYYYYYYYYYYY"
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = Client(account_sid, auth_token)
```

Authenticating with API Key and API Secret:

```python
from twilio.rest import Client

api_key = "XXXXXXXXXXXXXXXXX"
api_secret = "YYYYYYYYYYYYYYYYYY"
account_sid = "ACXXXXXXXXXXXXXXXXX"
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
client = Client(api_key, api_secret, account_sid)
```

Expand All @@ -88,7 +121,6 @@ We suggest storing your credentials as environment variables. Why? You'll never
have to worry about committing your credentials and accidentally posting them
somewhere public.


```python
from twilio.rest import Client
client = Client()
Expand All @@ -103,7 +135,8 @@ from twilio.rest import Client

client = Client(region='au1', edge='sydney')
```
A `Client` constructor without these parameters will also look for `TWILIO_REGION` and `TWILIO_EDGE` variables inside the current environment.

A `Client` constructor without these parameters will also look for `TWILIO_REGION` and `TWILIO_EDGE` variables inside the current environment.

Alternatively, you may specify the edge and/or region after constructing the Twilio client:

Expand All @@ -122,27 +155,46 @@ This will result in the `hostname` transforming from `api.twilio.com` to `api.sy
```python
from twilio.rest import Client

username = "ACXXXXXXXXXXXXXXXXX"
password = "YYYYYYYYYYYYYYYYYY"
client = Client(username, password)
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = Client(account_sid, auth_token)

call = client.calls.create(to="9991231234",
from_="9991231234",
url="http://twimlets.com/holdmusic?Bucket=com.twilio.music.ambient")
print(call.sid)
```

### Send an SMS
### Get data about an existing call

```python
from twilio.rest import Client

username = "ACXXXXXXXXXXXXXXXXX"
password = "YYYYYYYYYYYYYYYYYY"
client = Client(username, password)
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = Client(account_sid, auth_token)

message = client.messages.create(to="+12316851234", from_="+15555555555",
body="Hello there!")
call = client.calls.get("CA42ed11f93dc08b952027ffbc406d0868")
print(call.to)
```

### Iterate through records

The library automatically handles paging for you. Collections, such as `calls` and `messages`, have `list` and `stream` methods that page under the hood. With both `list` and `stream`, you can specify the number of records you want to receive (`limit`) and the maximum size you want each page fetch to be (`page_size`). The library will then handle the task for you.

`list` eagerly fetches all records and returns them as a list, whereas `stream` returns an iterator and lazily retrieves pages of records as you iterate over the collection. You can also page manually using the `page` method.

#### Use the `list` method

```python
from twilio.rest import Client

account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = Client(account_sid, auth_token)

for sms in client.messages.list():
print(sms.to)
```

### Asynchronous API Requests
Expand All @@ -154,10 +206,10 @@ from twilio.http.async_http_client import AsyncTwilioHttpClient
from twilio.rest import Client

async def main():
username = "ACXXXXXXXXXXXXXXXXX"
password = "YYYYYYYYYYYYYYYYYY"
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
http_client = AsyncTwilioHttpClient()
client = Client(username, password, http_client=http_client)
client = Client(account_sid, auth_token, http_client=http_client)

message = await client.messages.create_async(to="+12316851234", from_="+15555555555",
body="Hello there!")
Expand All @@ -172,7 +224,7 @@ Log the API request and response data to the console:
```python
import logging

client = Client(username, password)
client = Client(account_sid, auth_token)
logging.basicConfig()
client.http_client.logger.setLevel(logging.INFO)
```
Expand All @@ -182,20 +234,22 @@ Log the API request and response data to a file:
```python
import logging

client = Client(username, password)
client = Client(account_sid, auth_token)
logging.basicConfig(filename='./log.txt')
client.http_client.logger.setLevel(logging.INFO)
```

### Handling Exceptions

Version 8.x of `twilio-python` exports an exception class to help you handle exceptions that are specific to Twilio methods. To use it, import `TwilioRestException` and catch exceptions as follows:

```python
from twilio.rest import Client
from twilio.base.exceptions import TwilioRestException

username = "ACXXXXXXXXXXXXXXXXX"
password = "YYYYYYYYYYYYYYYYYY"
client = Client(username, password)
account_sid = "ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
auth_token = "your_auth_token"
client = Client(account_sid, auth_token)

try:
message = client.messages.create(to="+12316851234", from_="+15555555555",
Expand All @@ -204,8 +258,6 @@ except TwilioRestException as e:
print(e)
```

For more descriptive exception types, please see the [Twilio documentation](https://www.twilio.com/docs/libraries/python/usage-guide#exceptions).

### Generating TwiML

To control phone calls, your application needs to output [TwiML][twiml].
Expand All @@ -225,9 +277,9 @@ print(str(r))
<Response><Say>Welcome to twilio!</Say></Response>
```

### Using a Custom HTTP Client
### Other advanced examples

To use a custom HTTP client with this helper library, please see the [Twilio documentation](https://www.twilio.com/docs/libraries/python/custom-http-clients-python).
- [Learn how to create your own custom HTTP client](./advanced-examples/custom-http-client.md)

### Docker Image

Expand Down
Loading

0 comments on commit d98fae5

Please sign in to comment.