GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Push — master ( fc6031...7d88b0 )
by Dmitry
8s
created

CropFilter.apply()   B

Complexity

Conditions 6

Size

Total Lines 31

Duplication

Lines 0
Ratio 0 %
Metric Value
cc 6
dl 0
loc 31
rs 7.5384
1
"""
2
This module implement a Crop filter.
3
"""
4
from .interface import ImagineFilterInterface
5
from PIL import Image
6
7
8
class CropFilter(ImagineFilterInterface):
9
    """
10
    Crop filter
11
    """
12
    start = None
13
    size = None
14
15
    def __init__(self, **kwargs):
16
        """
17
        :param kwargs: dict
18
        """
19
        if 'start' in kwargs and isinstance(kwargs['start'], list) and len(kwargs['start']) == 2:
20
            self.start = kwargs.get('start')
21
        else:
22
            raise ValueError('Unknown start position.')
23
24
        if 'size' in kwargs and isinstance(kwargs['size'], list) and len(kwargs['size']) == 2:
25
            self.size = kwargs.get('size')
26
        else:
27
            raise ValueError('Unknown image size.')
28
29
    def apply(self, resource):
30
        """
31
        Apply filter to resource
32
        :param resource: Image
33
        :return: Image
34
        """
35
        if not isinstance(resource, Image.Image):
36
            raise ValueError('Unknown resource format')
37
38
        original_width, original_height = resource.size
39
40
        if self.start[0] < original_width or self.start[1] < original_height:
41
            left = self.start[0]
42
            upper = self.start[1]
43
        else:
44
            left = 0
45
            upper = 0
46
47
        right = self.start[0] + self.size[0]
48
        lower = self.start[1] + self.size[1]
49
50
        resource = resource.crop(
51
            (
52
                left,
53
                upper,
54
                right if right < original_width else original_width,
55
                lower if lower < original_height else original_height
56
            )
57
        )
58
59
        return resource
60