prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Python3.3 support and requirements without it
  Scrapy still supports py3.3 (at least according to its trove classifiers in setup.py and the CI conf)
  but some of its dependencies dropped support some time ago.
  https://github.com/pyca/service_identity/blob/master/CHANGELOG.rst#backward-incompatible-changes-1
  https://github.com/pyca/cryptography/blob/master/CHANGELOG.rst#20---2017-07-17
  
  This caused some problems when testing scrapy daemon with py3.3,
  which was resolved by installing the [enum-compat virtual package](https://pypi.python.org/pypi/enum-compat/0.0.2)
  
  There are several options here.
  scrapy1.5 can drop support for python3.3,
  scrapy1.4 can restrict the max versions for those dependencies
  and enum-compat can become a requirement,
  although there may be more things broken.
  
  I didn't figure out why the python3.3 build for scrapy doesn't fail
  but here is a failed scrapyd build https://travis-ci.org/scrapy/scrapyd/jobs/299029712
  
  </issue>
  <code>
  [start of setup.py]
  1 from os.path import dirname, join
  2 from pkg_resources import parse_version
  3 from setuptools import setup, find_packages, __version__ as setuptools_version
  4 
  5 
  6 with open(join(dirname(__file__), 'scrapy/VERSION'), 'rb') as f:
  7     version = f.read().decode('ascii').strip()
  8 
  9 
  10 def has_environment_marker_platform_impl_support():
  11     """Code extracted from 'pytest/setup.py'
  12     https://github.com/pytest-dev/pytest/blob/7538680c/setup.py#L31
  13 
  14     The first known release to support environment marker with range operators
  15     it is 18.5, see:
  16     https://setuptools.readthedocs.io/en/latest/history.html#id235
  17     """
  18     return parse_version(setuptools_version) >= parse_version('18.5')
  19 
  20 
  21 extras_require = {}
  22 
  23 if has_environment_marker_platform_impl_support():
  24     extras_require[':platform_python_implementation == "PyPy"'] = [
  25         'PyPyDispatcher>=2.1.0',
  26     ]
  27 
  28 
  29 setup(
  30     name='Scrapy',
  31     version=version,
  32     url='https://scrapy.org',
  33     description='A high-level Web Crawling and Web Scraping framework',
  34     long_description=open('README.rst').read(),
  35     author='Scrapy developers',
  36     maintainer='Pablo Hoffman',
  37     maintainer_email='pablo@pablohoffman.com',
  38     license='BSD',
  39     packages=find_packages(exclude=('tests', 'tests.*')),
  40     include_package_data=True,
  41     zip_safe=False,
  42     entry_points={
  43         'console_scripts': ['scrapy = scrapy.cmdline:execute']
  44     },
  45     classifiers=[
  46         'Framework :: Scrapy',
  47         'Development Status :: 5 - Production/Stable',
  48         'Environment :: Console',
  49         'Intended Audience :: Developers',
  50         'License :: OSI Approved :: BSD License',
  51         'Operating System :: OS Independent',
  52         'Programming Language :: Python',
  53         'Programming Language :: Python :: 2',
  54         'Programming Language :: Python :: 2.7',
  55         'Programming Language :: Python :: 3',
  56         'Programming Language :: Python :: 3.3',
  57         'Programming Language :: Python :: 3.4',
  58         'Programming Language :: Python :: 3.5',
  59         'Programming Language :: Python :: 3.6',
  60         'Topic :: Internet :: WWW/HTTP',
  61         'Topic :: Software Development :: Libraries :: Application Frameworks',
  62         'Topic :: Software Development :: Libraries :: Python Modules',
  63     ],
  64     install_requires=[
  65         'Twisted>=13.1.0',
  66         'w3lib>=1.17.0',
  67         'queuelib',
  68         'lxml',
  69         'pyOpenSSL',
  70         'cssselect>=0.9',
  71         'six>=1.5.2',
  72         'parsel>=1.1',
  73         'PyDispatcher>=2.0.5',
  74         'service_identity',
  75     ],
  76     extras_require=extras_require,
  77 )
  78
  [end of setup.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/setup.py b/setup.py
  --- a/setup.py
  +++ b/setup.py
  @@ -53,7 +53,6 @@
           'Programming Language :: Python :: 2',
           'Programming Language :: Python :: 2.7',
           'Programming Language :: Python :: 3',
  -        'Programming Language :: Python :: 3.3',
           'Programming Language :: Python :: 3.4',
           'Programming Language :: Python :: 3.5',
           'Programming Language :: Python :: 3.6',
  @@ -61,6 +60,7 @@
           'Topic :: Software Development :: Libraries :: Application Frameworks',
           'Topic :: Software Development :: Libraries :: Python Modules',
       ],
  +    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',
       install_requires=[
           'Twisted>=13.1.0',
           'w3lib>=1.17.0',
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -53,7 +53,6 @@\n         'Programming Language :: Python :: 2',\n         'Programming Language :: Python :: 2.7',\n         'Programming Language :: Python :: 3',\n-        'Programming Language :: Python :: 3.3',\n         'Programming Language :: Python :: 3.4',\n         'Programming Language :: Python :: 3.5',\n         'Programming Language :: Python :: 3.6',\n@@ -61,6 +60,7 @@\n         'Topic :: Software Development :: Libraries :: Application Frameworks',\n         'Topic :: Software Development :: Libraries :: Python Modules',\n     ],\n+    python_requires='>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*',\n     install_requires=[\n         'Twisted>=13.1.0',\n         'w3lib>=1.17.0',\n", "issue": "Python3.3 support and requirements without it\nScrapy still supports py3.3 (at least according to its trove classifiers in setup.py and the CI conf)\r\nbut some of its dependencies dropped support some time ago.\r\nhttps://github.com/pyca/service_identity/blob/master/CHANGELOG.rst#backward-incompatible-changes-1\r\nhttps://github.com/pyca/cryptography/blob/master/CHANGELOG.rst#20---2017-07-17\r\n\r\nThis caused some problems when testing scrapy daemon with py3.3,\r\nwhich was resolved by installing the [enum-compat virtual package](https://pypi.python.org/pypi/enum-compat/0.0.2)\r\n\r\nThere are several options here.\r\nscrapy1.5 can drop support for python3.3,\r\nscrapy1.4 can restrict the max versions for those dependencies\r\nand enum-compat can become a requirement,\r\nalthough there may be more things broken.\r\n\r\nI didn't figure out why the python3.3 build for scrapy doesn't fail\r\nbut here is a failed scrapyd build https://travis-ci.org/scrapy/scrapyd/jobs/299029712\n", "before_files": [{"content": "from os.path import dirname, join\nfrom pkg_resources import parse_version\nfrom setuptools import setup, find_packages, __version__ as setuptools_version\n\n\nwith open(join(dirname(__file__), 'scrapy/VERSION'), 'rb') as f:\n    version = f.read().decode('ascii').strip()\n\n\ndef has_environment_marker_platform_impl_support():\n    \"\"\"Code extracted from 'pytest/setup.py'\n    https://github.com/pytest-dev/pytest/blob/7538680c/setup.py#L31\n\n    The first known release to support environment marker with range operators\n    it is 18.5, see:\n    https://setuptools.readthedocs.io/en/latest/history.html#id235\n    \"\"\"\n    return parse_version(setuptools_version) >= parse_version('18.5')\n\n\nextras_require = {}\n\nif has_environment_marker_platform_impl_support():\n    extras_require[':platform_python_implementation == \"PyPy\"'] = [\n        'PyPyDispatcher>=2.1.0',\n    ]\n\n\nsetup(\n    name='Scrapy',\n    version=version,\n    url='https://scrapy.org',\n    description='A high-level Web Crawling and Web Scraping framework',\n    long_description=open('README.rst').read(),\n    author='Scrapy developers',\n    maintainer='Pablo Hoffman',\n    maintainer_email='pablo@pablohoffman.com',\n    license='BSD',\n    packages=find_packages(exclude=('tests', 'tests.*')),\n    include_package_data=True,\n    zip_safe=False,\n    entry_points={\n        'console_scripts': ['scrapy = scrapy.cmdline:execute']\n    },\n    classifiers=[\n        'Framework :: Scrapy',\n        'Development Status :: 5 - Production/Stable',\n        'Environment :: Console',\n        'Intended Audience :: Developers',\n        'License :: OSI Approved :: BSD License',\n        'Operating System :: OS Independent',\n        'Programming Language :: Python',\n        'Programming Language :: Python :: 2',\n        'Programming Language :: Python :: 2.7',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.3',\n        'Programming Language :: Python :: 3.4',\n        'Programming Language :: Python :: 3.5',\n        'Programming Language :: Python :: 3.6',\n        'Topic :: Internet :: WWW/HTTP',\n        'Topic :: Software Development :: Libraries :: Application Frameworks',\n        'Topic :: Software Development :: Libraries :: Python Modules',\n    ],\n    install_requires=[\n        'Twisted>=13.1.0',\n        'w3lib>=1.17.0',\n        'queuelib',\n        'lxml',\n        'pyOpenSSL',\n        'cssselect>=0.9',\n        'six>=1.5.2',\n        'parsel>=1.1',\n        'PyDispatcher>=2.0.5',\n        'service_identity',\n    ],\n    extras_require=extras_require,\n)\n", "path": "setup.py"}]}