Metadata-Version: 2.1
Name: directory-forms-api-client
Version: 3.2.1
Summary: Python API client for Directory forms .
Home-page: https://github.com/uktrade/directory-forms-api-client
Author: Department for International Trade
License: MIT
Platform: UNKNOWN
Classifier: Development Status :: 5 - Production/Stable
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Framework :: Django :: 1.11
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Natural Language :: English
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3.5
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Description-Content-Type: text/markdown
Requires-Dist: directory-client-core (<5.0.0,>=4.0.2)
Provides-Extra: test
Requires-Dist: django (<2.0a1,>=1.9) ; extra == 'test'
Requires-Dist: requests (<3.0.0,>=2.18.4) ; extra == 'test'
Requires-Dist: pytest (==3.10.0) ; extra == 'test'
Requires-Dist: pytest-cov (==2.3.1) ; extra == 'test'
Requires-Dist: flake8 (==3.0.4) ; extra == 'test'
Requires-Dist: requests-mock (==1.1.0) ; extra == 'test'
Requires-Dist: codecov (==2.0.9) ; extra == 'test'
Requires-Dist: pytest-django (==3.1.0) ; extra == 'test'
Requires-Dist: twine (<2.0.0,>=1.11.0) ; extra == 'test'
Requires-Dist: wheel (<1.0.0,>=0.31.0) ; extra == 'test'
Requires-Dist: setuptools (<39.0.0,>=38.6.0) ; extra == 'test'

# directory-forms-api-client

[![code-climate-image]][code-climate]
[![circle-ci-image]][circle-ci]
[![codecov-image]][codecov]
[![pypi-image]][pypi]

**Directory forms API client for headless forms.**

---

## Requirements

## Installation

```shell
pip install directory_forms_api_client
```

## Usage

The api client must be passed into each form instance, so first set the the client settings:

| Setting                         | Notes                                                       |
| ------------------------------- | ----------------------------------------------------------- |
| DIRECTORY_FORMS_API_BASE_URL    |                                                             |
| DIRECTORY_FORMS_API_API_KEY     | Unique to client. Retrieved during the on-boarding process. |
| DIRECTORY_FORMS_API_SENDER_ID   | Unique to client. Retrieved during the on-boarding process. |
| DIRECTORY_FORMS_DEFAULT_TIMEOUT |                                                             |

Once that is done the forms can be used.


### Submit to Zendesk

```python
from directory_forms_api_client import forms


class ZendeskForm(forms.ZendeskAPIForm):
    # note that the base form provides `requester_email` email field
    title = fields.CharField()


form = ZendeskForm(data={
    'name': 'Example Person',
    'email': 'three@example.com'
})
assert form.is_valid()
form.save(
    email_address=form.cleaned_data['email'],
    full_name='Example Person',
    subject='Bo in the house',
    service_name='Foo Bar',
)
```

#### Different subdomain

The default behaviour of Forms API is to use the default configured zendesk subdomain when creating the tickets. To use a different subdomain, provide `subdomain`:

```python
form.save(
    email_address=form.cleaned_data['email'],
    full_name='Example Person',
    subject='Some ticket subject',
    subdomain='some-other-subdomain',
)
```

Note that Forms API must first be configured to expect the provided subdomain.

### Send as email

#### Send to a user-submitted email address

```python
from directory_forms_api_client import forms

class EmailForm(forms.ZendeskAPIForm):
    title = fields.CharField()
    email = fields.EmailField()

form = TestForm(data={'title': 'Example', 'email': 'a@foo.com'})

assert form.is_valid()
form.save(
    recipients=[form.cleaned_data['email']],
    subject='Some email subject',
    reply_to=['reply@example.com'],
    service_name='Foo Bar',
)

```

#### Send to a pre-defined email address
```python
from directory_forms_api_client import forms

class EmailForm(forms.EmailAPIForm):
    title = fields.CharField()

form = TestForm(data={'title': 'Example'})

assert form.is_valid()
form.save(submission_recipients=[settings.FEEDBACK_EMAIL_RECIPIENTS])

```

### Send via gov.uk Notify

```python
from directory_forms_api_client import forms

class GovNotifyForm(forms.GovNotifyAPIForm):
    title = fields.CharField()
    email = fields.EmailField()

form = TestForm(data={'title': 'Example', 'email': 'a@foo.com'})

assert form.is_valid()
form.save(
    template_id='some-template-id-from-gov-notify',
    email_address=form.cleaned_data['email'],
)
```

## Development

    $ git clone https://github.com/uktrade/directory-forms-api-client
    $ cd directory-forms-api-client
    # [create your virtual environment and activate it]
    $ pip install -e . # install the requirements defined in setup.py

### Testing

    $ make test


## Publish to PyPI

The package should be published to PyPI on merge to master. If you need to do it locally then get the credentials from rattic and add the environment variables to your host machine:

| Setting                     |
| --------------------------- |
| DIRECTORY_PYPI_USERNAME     |
| DIRECTORY_PYPI_PASSWORD     |

Then run the following command:

    make publish


[code-climate-image]: https://codeclimate.com/github/uktrade/directory-forms-api-client/badges/issue_count.svg
[code-climate]: https://codeclimate.com/github/uktrade/directory-forms-api-client

[circle-ci-image]: https://circleci.com/gh/uktrade/directory-forms-api-client/tree/master.svg?style=svg
[circle-ci]: https://circleci.com/gh/uktrade/directory-forms-api-client/tree/master

[codecov-image]: https://codecov.io/gh/uktrade/directory-forms-api-client/branch/master/graph/badge.svg
[codecov]: https://codecov.io/gh/uktrade/directory-forms-api-client

[pypi-image]: https://badge.fury.io/py/directory-forms-api-client.svg
[pypi]: https://badge.fury.io/py/directory-forms-api-client


