Metadata-Version: 2.1
Name: sqs-polling
Version: 0.1.0
Summary: Polls AWS SQS messages and executes your callback.
Home-page: https://github.com/ohke/sqs-polling
Author: Kenta Onishi
Author-email: ohke.develop@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Requires-Python: ~=3.5
Description-Content-Type: text/markdown
Requires-Dist: boto3

# sqs-polling
`sqs-polling` is simple AWS SQS daemon. The following is all.
- Polls SQS at regular intervals.
- Receives messages and executes your callback.
- If your callback function returns True, deletes the message.

## Installation
```
$ pip install sqs-polling
```

## Usage
The key function is `sqs_polling`, please check its interface.

The simplest usage is below.
```python
from sqs_polling import sqs_polling


def your_callback(message, greeting):
    print(greeting + message["name"])
    return True


your_queue_url="https://sqs.your-region.amazonaws.com/XXXXXXXXXXXX/your-sqs",
sqs_polling(queue_url=your_queue_url, callback=your_callback, callback_args={"greeting": "Hello, "})
```

### Callback
Your callback function must return 1 bool value.
If True, deletes the processed message.
If False, the message is remaining in your SQS and reprocessed after `visibility_timeout` seconds. It is recommended to return False if message processing fails.

## Configuration

### AWS account profile
In the example above, explicit AWS account profiles is omitted.

If explicit authentication is required, you can access SQS by setting additional profiles in `aws_profile_dict` argument.

```python
your_aws_profile = {
    "region_name": "your-region",
    "aws_access_key_id": "XXXXXXXXXXXXXXXXXXXX",
    "aws_secret_access_key": "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY",
}

sqs_polling(queue_url=your_queue_url, callback=your_callback, aws_profile_dict=your_aws_profile)
```

### Polling
The arguments related to polling settings are as follows.

- `extract_body`: Whether to extract the message body. (default: True)
  - The `body` here refers to `$.Messages.Body` JSON element of SQS messages.
- `interval_seconds`: Message reception interval seconds. (default: 1.0)
- `visibility_timeout`: Message visibility timeout seconds. (default: 300)

### Concurrency
`sqs-polling` can process messages in parallel using threads or processes. It can be controlled by the following arguments.

- `max_workers`: Max number of concurrent threads or processes. (default: 1)
- `process_worker`: If this is True, processes is used instead of threads. (default: False) 

```python
# Parallel processing with up to 64 threads.
sqs_polling(queue_url=your_queue_url, callback=your_callback, max_workers=64)

# Parallel processing with up to 4 processes.
sqs_polling(queue_url=your_queue_url, callback=your_callback, process_worker=True, max_workers=4)
```

