Python bindings for the Tictail API
Project description
tictail-python
==============
[![Build Status](https://travis-ci.org/tictail/tictail-python.svg?branch=master)](https://travis-ci.org/tictail/tictail-python)
Python bindings for the Tictail API ([API reference](https://tictail.com/developers/documentation/api-reference/)).
### Installation
The easiest way to install `tictail-python` is via `pip`:
```shell
$ pip install tictail
```
Alternatively, you can download the [source](https://github.com/tictail/tictail-python/releases) and then run:
```shell
$ python setup.py install
```
#### Mac OS X
You might get the following error on Mac OS X:
```
clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]
```
This is caused by the latest (5.1) version of Xcode which ships with a compiler
that treats unknown passed parameters as errors. The workaround is to set the
ARCHFLAGS environment variable to treat such errors as warnings:
```shell
$ ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install tictail
```
### Version Support
`tictail-python` supports Python 2.6 and 2.7. Python 3.2+ support is coming soon.
### Dependencies
The following packages will be installed together with `tictail-python`:
- `requests==2.2.1`
- `pyasn1==0.1.6`
- `pyOpenSSL==0.13`
- `ndg-httpsclient==0.3.2`
### Contributing
For bugs and feature requests, please open an [issue](https://github.com/tictail/tictail-python/issues). If you'd like to contribute
to the development of `tictail-python` – a fact of grandiose awesomeness – then clone the repo, install the development dependencies and hack away. Make sure you include tests, update the changelog and add your name to the contributors list.
### Testing
The library uses `pytest` and `coverage` for unit and integration tests. Run `make test` to
run all the tests. Alternatively, you can use the `py.test` binary to run specific tests.
### Quickstart
The Tictail platform uses OAuth 2.0 for authentication so you need to create your application and obtain an access token for a store. The details of how to do that are not in the scope of this document, but the [authentication](https://tictail.com/developers/documentation/authentication/) section of the documentation has a nice set of instructions and best practices.
Once you have an access token you can instantiate the `Tictail` client and get the store associated with the token:
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
```
### Configuration
The `Tictail` client comes preconfigured with sane defaults. If you wish to
override the default configuration, you can supply the constructor with a configuration
dictionary:
```python
from tictail import Tictail
config = {
'timeout': 40
}
client = Tictail('<access_token>', config=config)
```
See `client.py` for details on what can be overriden.
### Usage & Examples
#### Store
Reference: [Store](https://tictail.com/developers/documentation/api-reference/#Store)
The `Store` resource is the only top-level API object and exposes properties for
all its subresources which are documented further below.
**Retrieving a store**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
```
An example (partial) response:
```python
>>> print store
Store({
'contact_email': u'thestartupstore@example.com',
'country': u'SE',
'currency': u'SEK',
'dashboard_url': u'https://tictail.com/dashboard/store/thestartupstore',
'description': u'Support your local Startup! ...',
'id': u't',
'language': u'en',
'logotype': [...],
'name': u'The Startup Store',
'sandbox': False,
'storekeeper_email': u'johndoe@example.com',
'url': u'http://thestartupstore.tictail.com'
})
```
#### Card
Reference: [Card](https://tictail.com/developers/documentation/api-reference/#Card)
Cards are how you get your content into the feed of the store. The `Card` resource
only allows for creating cards at this point.
**Creating a new card**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
card = store.cards.create({
'title': 'Check out this amazing site',
'action': 'http://example.com',
'card_type': 'media',
'content': {
'header': 'You will not regret this'
}
})
```
An example response:
```python
>>> print card
Card({
'action': u'http://example.com',
'card_type': u'media',
'content': {
u'header': u'You will not regret this'
},
'created_at': u'2014-04-23T20:25:47.745085',
'id': u'fREx',
'modified_at': u'2014-04-23T20:25:47.752799',
'title': u'Check out this amazing site'
})
```
#### Product
Reference: [Product](https://tictail.com/developers/documentation/api-reference/#Product)
Using the `Product` resource you can list all the visible products of a store or get a specific product by id.
Listing products accepts four optional query parameters:
- `limit` for page size
- `before` and `after` for paginating on products created before or after a product with a given id
- `categories` for filtering products on certain categories
**List 50 products created after the product with id '7bxv'**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
products = store.products.all(after='7bxv', limit=50)
```
**List all shirts (id:'aVr') and jeans (id: 'bEt2')**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
products = store.products.all(categories=['aVr', 'bEt2'])
```
**Retrieve a specific product**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
product = store.products.get('7bxv')
```
An example response:
```python
>>> print product
Product({
'created_at': u'2014-01-29T13:41:43',
'currency': u'PLN',
'description': u'',
'id': u'7bxv',
'images': [],
'modified_at': u'2014-01-29T13:41:43',
'price': 1200,
'price_includes_tax': True,
'quantity': None,
'slug': u'super-duper-tshirt',
'status': u'published',
'store_id': u'scV',
'title': u'super duper tshirt',
'unlimited': True,
'variations': []
})
```
#### Customer
Reference: [Customer](https://tictail.com/developers/documentation/api-reference/#Customer)
The `Customer` resource returns all the customers of a store, i.e people that bought
something at least once from that store. Listing customers accepts three optional
query parameters:
- `limit` for page size
- `before` and `after` for paginating on customers created before or after a customers with a given id
**Retrieve a specific customer**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
customer = store.customers.get('7')
```
**List all customers**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
customers = store.customers.all()
```
An example response:
```python
>>> print customer
Customer({
'country': u'SE',
'created_at': u'2012-12-10T19:31:07',
'email': u'johndoe@example.com',
'id': u'bz21',
'language': u'en',
'modified_at': None,
'name': u'John Doe'
})
```
#### Follower
Reference: [Follower](https://tictail.com/developers/documentation/api-reference/#Follower)
The `Follower` resource returns all the followers of a store. Listing followers accepts three optional
query parameters:
- `limit` for page size
- `before` and `after` for paginating on followers created before or after a follower with a given id
**Create a follower**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
follower = store.followers.create({'email': 'newfollower@example.com'})
```
**Delete a follower**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
# You can either delete a follower from the `Collection`...
deleted = store.followers.delete(7)
assert deleted
# ...or from the `Resource` itself.
follower = store.followers.all()[0]
deleted = follower.delete()
assert deleted
```
**List all followers**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
followers = store.followers.all()
```
**List all followers created before the follower with id '7aN'**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
followers = store.followers.all(before='7aN')
```
An example response:
```python
>>> print follower
Follower({
'created_at': u'2013-12-10T19:31:07',
'modified_at': None,
'email': u'johndoe@example.com',
'id': u'NZUr'
})
```
#### Order
Reference: [Order](https://tictail.com/developers/documentation/api-reference/#Order)
The `Order` resource returns all the orders of a store. If you wish to get the customers
of the store then use the `Customer` resource instead. Listing orders accepts
five optional query parameters:
- `limit` for page size
- `before` and `after` for for paginating on orders created before or after a orders with a given id
- `modified_before` and `modified_after` for paginating on orders modified before or after a given date (the date
can be either a string in `ISO 8601` format or a `datetime` object)
**List all orders after a specific id**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
orders = store.orders.all(after='aFQX')
```
**List all orders modified after a date**
```python
from datetime import datetime
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
# Using a datetime object...
now = datetime.now()
orders = store.orders.all(modified_after=now)
# ...or a string.
orders = store.orders.all(modified_after=now.isoformat())
```
**Retrieve a specific order**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
order = store.orders.get('aFQX')
```
An example (partial) response:
```python
>>> print order
Order({
'customer': {
'name': u'John Doe',
...
},
'transaction': {
'status': u'paid',
...
},
'prices_include_vat': True,
'discounts': [],
'items': [{
'currency': u'SEK',
'price': 0,
...
},
...
],
'fullfilment': {
'status': u'unhandled',
...
},
'price': 0,
'id': u'aFQX',
'vat': {
'price': 0,
'rate': u'0.250000'
}
})
```
#### Theme
Reference: [Theme](https://tictail.com/developers/documentation/api-reference/#Theme)
The `Theme` resource is a singleton resource that returns the currently active
theme of the store.
**Get the theme**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
theme = store.theme.get()
```
An example (partial) response:
```python
>>> print theme
Theme({
'id': u'Ag',
'markup': u'<!DOCTYPE html>\n<html lang="en">\n<head>\n...'
})
```
#### Category
Reference: [Category](https://tictail.com/developers/documentation/api-reference/#Category)
The `Category` resource returns the categories which make up the store's navigation.
They are implemented as a classical parent-child hierarchy, limited to one level of depth.
**List all categories**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
categories = store.categories.all()
```
An example (partial) response:
```python
>>> print categories
[
Category({
'created_at': u'2012-05-01T00:47:16',
'id': u'dn',
'modified_at': u'2012-02-13T16:58:40',
'parent_id': None,
'position': 0,
'title': u'Stickers'
}),
Category({
'created_at': u'2012-10-29T12:02:09',
'id': u'dA',
'modified_at': None,
'parent_id': u'dn',
'position': 1,
'title': u'DevAwsmbx'
})
...
]
```
==============
[![Build Status](https://travis-ci.org/tictail/tictail-python.svg?branch=master)](https://travis-ci.org/tictail/tictail-python)
Python bindings for the Tictail API ([API reference](https://tictail.com/developers/documentation/api-reference/)).
### Installation
The easiest way to install `tictail-python` is via `pip`:
```shell
$ pip install tictail
```
Alternatively, you can download the [source](https://github.com/tictail/tictail-python/releases) and then run:
```shell
$ python setup.py install
```
#### Mac OS X
You might get the following error on Mac OS X:
```
clang: error: unknown argument: '-mno-fused-madd' [-Wunused-command-line-argument-hard-error-in-future]
```
This is caused by the latest (5.1) version of Xcode which ships with a compiler
that treats unknown passed parameters as errors. The workaround is to set the
ARCHFLAGS environment variable to treat such errors as warnings:
```shell
$ ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future pip install tictail
```
### Version Support
`tictail-python` supports Python 2.6 and 2.7. Python 3.2+ support is coming soon.
### Dependencies
The following packages will be installed together with `tictail-python`:
- `requests==2.2.1`
- `pyasn1==0.1.6`
- `pyOpenSSL==0.13`
- `ndg-httpsclient==0.3.2`
### Contributing
For bugs and feature requests, please open an [issue](https://github.com/tictail/tictail-python/issues). If you'd like to contribute
to the development of `tictail-python` – a fact of grandiose awesomeness – then clone the repo, install the development dependencies and hack away. Make sure you include tests, update the changelog and add your name to the contributors list.
### Testing
The library uses `pytest` and `coverage` for unit and integration tests. Run `make test` to
run all the tests. Alternatively, you can use the `py.test` binary to run specific tests.
### Quickstart
The Tictail platform uses OAuth 2.0 for authentication so you need to create your application and obtain an access token for a store. The details of how to do that are not in the scope of this document, but the [authentication](https://tictail.com/developers/documentation/authentication/) section of the documentation has a nice set of instructions and best practices.
Once you have an access token you can instantiate the `Tictail` client and get the store associated with the token:
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
```
### Configuration
The `Tictail` client comes preconfigured with sane defaults. If you wish to
override the default configuration, you can supply the constructor with a configuration
dictionary:
```python
from tictail import Tictail
config = {
'timeout': 40
}
client = Tictail('<access_token>', config=config)
```
See `client.py` for details on what can be overriden.
### Usage & Examples
#### Store
Reference: [Store](https://tictail.com/developers/documentation/api-reference/#Store)
The `Store` resource is the only top-level API object and exposes properties for
all its subresources which are documented further below.
**Retrieving a store**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
```
An example (partial) response:
```python
>>> print store
Store({
'contact_email': u'thestartupstore@example.com',
'country': u'SE',
'currency': u'SEK',
'dashboard_url': u'https://tictail.com/dashboard/store/thestartupstore',
'description': u'Support your local Startup! ...',
'id': u't',
'language': u'en',
'logotype': [...],
'name': u'The Startup Store',
'sandbox': False,
'storekeeper_email': u'johndoe@example.com',
'url': u'http://thestartupstore.tictail.com'
})
```
#### Card
Reference: [Card](https://tictail.com/developers/documentation/api-reference/#Card)
Cards are how you get your content into the feed of the store. The `Card` resource
only allows for creating cards at this point.
**Creating a new card**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
card = store.cards.create({
'title': 'Check out this amazing site',
'action': 'http://example.com',
'card_type': 'media',
'content': {
'header': 'You will not regret this'
}
})
```
An example response:
```python
>>> print card
Card({
'action': u'http://example.com',
'card_type': u'media',
'content': {
u'header': u'You will not regret this'
},
'created_at': u'2014-04-23T20:25:47.745085',
'id': u'fREx',
'modified_at': u'2014-04-23T20:25:47.752799',
'title': u'Check out this amazing site'
})
```
#### Product
Reference: [Product](https://tictail.com/developers/documentation/api-reference/#Product)
Using the `Product` resource you can list all the visible products of a store or get a specific product by id.
Listing products accepts four optional query parameters:
- `limit` for page size
- `before` and `after` for paginating on products created before or after a product with a given id
- `categories` for filtering products on certain categories
**List 50 products created after the product with id '7bxv'**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
products = store.products.all(after='7bxv', limit=50)
```
**List all shirts (id:'aVr') and jeans (id: 'bEt2')**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
products = store.products.all(categories=['aVr', 'bEt2'])
```
**Retrieve a specific product**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
product = store.products.get('7bxv')
```
An example response:
```python
>>> print product
Product({
'created_at': u'2014-01-29T13:41:43',
'currency': u'PLN',
'description': u'',
'id': u'7bxv',
'images': [],
'modified_at': u'2014-01-29T13:41:43',
'price': 1200,
'price_includes_tax': True,
'quantity': None,
'slug': u'super-duper-tshirt',
'status': u'published',
'store_id': u'scV',
'title': u'super duper tshirt',
'unlimited': True,
'variations': []
})
```
#### Customer
Reference: [Customer](https://tictail.com/developers/documentation/api-reference/#Customer)
The `Customer` resource returns all the customers of a store, i.e people that bought
something at least once from that store. Listing customers accepts three optional
query parameters:
- `limit` for page size
- `before` and `after` for paginating on customers created before or after a customers with a given id
**Retrieve a specific customer**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
customer = store.customers.get('7')
```
**List all customers**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
customers = store.customers.all()
```
An example response:
```python
>>> print customer
Customer({
'country': u'SE',
'created_at': u'2012-12-10T19:31:07',
'email': u'johndoe@example.com',
'id': u'bz21',
'language': u'en',
'modified_at': None,
'name': u'John Doe'
})
```
#### Follower
Reference: [Follower](https://tictail.com/developers/documentation/api-reference/#Follower)
The `Follower` resource returns all the followers of a store. Listing followers accepts three optional
query parameters:
- `limit` for page size
- `before` and `after` for paginating on followers created before or after a follower with a given id
**Create a follower**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
follower = store.followers.create({'email': 'newfollower@example.com'})
```
**Delete a follower**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
# You can either delete a follower from the `Collection`...
deleted = store.followers.delete(7)
assert deleted
# ...or from the `Resource` itself.
follower = store.followers.all()[0]
deleted = follower.delete()
assert deleted
```
**List all followers**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
followers = store.followers.all()
```
**List all followers created before the follower with id '7aN'**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
followers = store.followers.all(before='7aN')
```
An example response:
```python
>>> print follower
Follower({
'created_at': u'2013-12-10T19:31:07',
'modified_at': None,
'email': u'johndoe@example.com',
'id': u'NZUr'
})
```
#### Order
Reference: [Order](https://tictail.com/developers/documentation/api-reference/#Order)
The `Order` resource returns all the orders of a store. If you wish to get the customers
of the store then use the `Customer` resource instead. Listing orders accepts
five optional query parameters:
- `limit` for page size
- `before` and `after` for for paginating on orders created before or after a orders with a given id
- `modified_before` and `modified_after` for paginating on orders modified before or after a given date (the date
can be either a string in `ISO 8601` format or a `datetime` object)
**List all orders after a specific id**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
orders = store.orders.all(after='aFQX')
```
**List all orders modified after a date**
```python
from datetime import datetime
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
# Using a datetime object...
now = datetime.now()
orders = store.orders.all(modified_after=now)
# ...or a string.
orders = store.orders.all(modified_after=now.isoformat())
```
**Retrieve a specific order**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
order = store.orders.get('aFQX')
```
An example (partial) response:
```python
>>> print order
Order({
'customer': {
'name': u'John Doe',
...
},
'transaction': {
'status': u'paid',
...
},
'prices_include_vat': True,
'discounts': [],
'items': [{
'currency': u'SEK',
'price': 0,
...
},
...
],
'fullfilment': {
'status': u'unhandled',
...
},
'price': 0,
'id': u'aFQX',
'vat': {
'price': 0,
'rate': u'0.250000'
}
})
```
#### Theme
Reference: [Theme](https://tictail.com/developers/documentation/api-reference/#Theme)
The `Theme` resource is a singleton resource that returns the currently active
theme of the store.
**Get the theme**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
theme = store.theme.get()
```
An example (partial) response:
```python
>>> print theme
Theme({
'id': u'Ag',
'markup': u'<!DOCTYPE html>\n<html lang="en">\n<head>\n...'
})
```
#### Category
Reference: [Category](https://tictail.com/developers/documentation/api-reference/#Category)
The `Category` resource returns the categories which make up the store's navigation.
They are implemented as a classical parent-child hierarchy, limited to one level of depth.
**List all categories**
```python
from tictail import Tictail
client = Tictail('<access_token>')
store = client.me()
categories = store.categories.all()
```
An example (partial) response:
```python
>>> print categories
[
Category({
'created_at': u'2012-05-01T00:47:16',
'id': u'dn',
'modified_at': u'2012-02-13T16:58:40',
'parent_id': None,
'position': 0,
'title': u'Stickers'
}),
Category({
'created_at': u'2012-10-29T12:02:09',
'id': u'dA',
'modified_at': None,
'parent_id': u'dn',
'position': 1,
'title': u'DevAwsmbx'
})
...
]
```
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
tictail-0.2.2.tar.gz
(16.0 kB
view details)
File details
Details for the file tictail-0.2.2.tar.gz
.
File metadata
- Download URL: tictail-0.2.2.tar.gz
- Upload date:
- Size: 16.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9cd52ca8bdf22ca2006692c7a75843b100e58d4291d0454ce8af4a895996015 |
|
MD5 | baf3026173f58c5b6baa2d51c69c5f4e |
|
BLAKE2b-256 | 85d4ac54e94e30f48e08aab99c573e055a2da02d5992ded0ddd4eb3e08a848dc |