screamshot 0.1.12
Python library to capture screenshots of web applications or pages

[![Build Status](https://travis-ci.org/makinacorpus/screamshot.svg?branch=master)](https://travis-ci.org/makinacorpus/screamshot)
[![Coverage Status](https://coveralls.io/repos/github/makinacorpus/screamshot/badge.svg?branch=master&service=github)](https://coveralls.io/github/makinacorpus/screamshot?branch=master&service=github)
[![Documentation Status](https://readthedocs.org/projects/screamshot/badge/?version=latest)](https://screamshot.readthedocs.io/en/latest/?badge=latest)
[![PyPI version](https://badge.fury.io/py/screamshot.svg)](https://badge.fury.io/py/screamshot)
![Python version](https://img.shields.io/badge/Python-3.6-blue.svg?style=flat&logo=appveyor)
# Screamshot
Python library to capture screenshots of web applications

## Good practices

* Any code addition must be done in your own branch. You can name it `fl/what_this_branch_brings` where 'f' is the first letter of your first name and 'l' the first letter of your last name.
* A branch resolves a specific issue.
* Please write exhaustive tests. The coverage must not decrease.
* Please merge the master branch into yours, run the tests and checks and correct all errors and warnings before pushing your code.
* When you think you have finished you can make a pull request.

## Testing and checks
### To start the tests and checks
#### The first time

1. Install **docker** and **docker-compose**.
2. Run: `docker-compose build`, to create all the required images.
3. To start the verification, run: `docker-compose up`.

#### When it is already setup

You just need to run `docker-compose up`.

#### To clean up

* If you want to stop containers and remove containers, networks, volumes, and images created by up command, run: `docker-compose down`.
* If you want to delete all the images, run: `docker rmi -f $(docker images -q)`.

### To write new tests

* You must use the `unittest` package
* You must put your test file in the **tests** folder
* You must name your test file using the following next pattern: **test_*.py**

#### Local server

A server with a web page can be used at the following address: <http://server:5000/index.html> and <http://server:5000/other.html>

## Usage
### Documentation

The documentation is accessible [here](https://screamshot.readthedocs.io/en/latest/), on readthedocs.


### Exemple with django

The server must be launched using --nothreading and --noreload as argument.
```
# views.py in a Django project
from django.http import HttpResponse

import asyncio

from screamshot import generate_bytes_img_prom

def home(request):
    loop = asyncio.get_event_loop()
    future = asyncio.Future()

    asyncio.ensure_future(
        generate_bytes_img_prom('https://www.google.fr', future))
    loop.run_until_complete(future)

    return HttpResponse(future.result(), content_type='image')
``` 
Or using the already wrapped function
```
# views.py in a Django project
from django.http import HttpResponse

from screamshot import generate_bytes_img__django_wrap

def home(request):
    img = generate_bytes_img__django_wrap('https://www.google.fr')
    return HttpResponse(img, content_type='image')
``` 


#### Using Gunicorn

With [Gunicorn](https://gunicorn.org/) there isn't the thread related problems so we don't need to use the --nothreading and --noreload arguments.


CHANGELOG
=========

0.0.1
===

Initialization of Screamshot library
1. __init__ file:
    * __author__
    * __version__
    * __all__
2. core file:
    * A `ScreenShot` object with three methods:
        * `load`, loads a web page
        * `screamshot`, takes a screenshot of a loaded page
        * `load_and_screamshot`, loads a web page and takes a screenshot

0.1.0
===

* There is no more `ScreenShot` object just a function named `generate_bytes_img` which
takes some parameters and returns a binary `bytes` object.

0.1.1
===

* `generate_bytes_img` is no more a sync function and `generate_bytes_img_prom` has been added
* `generate_bytes_img_prom` uses the `asyncio.Future` object

0.1.2
===

* A test and verification tool using Docker is now available

0.1.3
===

* Add `browser-manager` script
* Add `screamshot` script

0.1.4
===

* Add `serialize` function
* Add `deserialize` function

0.1.5
===

* Add `generate_bytes_img_django_wrap` function

0.1.6
===

* Module is now available

0.1.7
===

* The browser endpoint is saved in the temporary directory

0.1.8
===

* `serialize` function returns a `dict` object
* `deserialize` takes a `dict` object

0.1.9
===

* Remove serializer functions
* Add a bytes_to_img function

0.1.10
===
* ``generate_bytes_img_django_wrap`` is renamed ``generate_bytes_img_wrap``
* Error are handled

0.1.11
===
* ``bytes_to_png`` is renamed ``bytes_to_file``
* ``bytes_to_file`` supports type choice

0.1.12
===
* You can now fetch http headers from another page with ``get_token``
* And store these headers in the local storage