prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Missing dataclasses
  Following the tom_base install instructions, I pip installed the requirements.txt and then tried 
  > ./manage.py migrate
  
  which ended with the following error:
    File "<frozen importlib._bootstrap_external>", line 678, in exec_module
    File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
    File "/Users/rstreet/software/tom_base/tom_alerts/urls.py", line 3, in <module>
      from tom_alerts.views import BrokerQueryCreateView, BrokerQueryListView, BrokerQueryUpdateView, RunQueryView
    File "/Users/rstreet/software/tom_base/tom_alerts/views.py", line 3, in <module>
      from tom_alerts.alerts import get_service_class, get_service_classes
    File "/Users/rstreet/software/tom_base/tom_alerts/alerts.py", line 5, in <module>
      from dataclasses import dataclass
  ModuleNotFoundError: No module named 'dataclasses'
  
  
  </issue>
  <code>
  [start of setup.py]
  1 from setuptools import setup, find_packages
  2 from os import path
  3 
  4 here = path.abspath(path.dirname(__file__))
  5 with open(path.join(here, 'README.md'), encoding='utf-8') as f:
  6     long_description = f.read()
  7 
  8 setup(
  9     name='tomtoolkit',
  10     version='1.1.0',
  11     description='The TOM Toolkit and base modules',
  12     long_description=long_description,
  13     long_description_content_type='text/markdown',
  14     url='https://tomtoolkit.github.io',
  15     author='TOM Toolkit Project',
  16     author_email='ariba@lco.global',
  17     classifiers=[
  18         'Development Status :: 3 - Alpha',
  19         'Intended Audience :: Science/Research',
  20         'License :: OSI Approved :: BSD License',
  21         'Operating System :: OS Independent',
  22         'Programming Language :: Python :: 3',
  23         'Programming Language :: Python :: 3.7',
  24         'Topic :: Scientific/Engineering :: Astronomy',
  25         'Topic :: Scientific/Engineering :: Physics'
  26     ],
  27     keywords=['tomtoolkit', 'astronomy', 'astrophysics', 'cosmology', 'science', 'fits', 'observatory'],
  28     packages=find_packages(),
  29     install_requires=[
  30         'django',
  31         'django-bootstrap4',
  32         'django-extensions',
  33         'django-filter',
  34         'django-contrib-comments',
  35         'django-gravatar2',
  36         'django-crispy-forms',
  37         'django-guardian',
  38         'numpy',
  39         'python-dateutil',
  40         'requests',
  41         'astroquery',
  42         'astropy',
  43         'astroplan',
  44         'plotly',
  45         'matplotlib',
  46         'pillow',
  47         'fits2image',
  48         'specutils',
  49     ],
  50     extras_require={
  51         'test': ['factory_boy']
  52     },
  53     include_package_data=True,
  54 )
  55
  [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
  @@ -46,6 +46,7 @@
           'pillow',
           'fits2image',
           'specutils',
  +        "dataclasses; python_version < '3.7'",
       ],
       extras_require={
           'test': ['factory_boy']
  
verification_info: {"golden_diff": "diff --git a/setup.py b/setup.py\n--- a/setup.py\n+++ b/setup.py\n@@ -46,6 +46,7 @@\n         'pillow',\n         'fits2image',\n         'specutils',\n+        \"dataclasses; python_version < '3.7'\",\n     ],\n     extras_require={\n         'test': ['factory_boy']\n", "issue": "Missing dataclasses\nFollowing the tom_base install instructions, I pip installed the requirements.txt and then tried \r\n> ./manage.py migrate\r\n\r\nwhich ended with the following error:\r\n  File \"<frozen importlib._bootstrap_external>\", line 678, in exec_module\r\n  File \"<frozen importlib._bootstrap>\", line 205, in _call_with_frames_removed\r\n  File \"/Users/rstreet/software/tom_base/tom_alerts/urls.py\", line 3, in <module>\r\n    from tom_alerts.views import BrokerQueryCreateView, BrokerQueryListView, BrokerQueryUpdateView, RunQueryView\r\n  File \"/Users/rstreet/software/tom_base/tom_alerts/views.py\", line 3, in <module>\r\n    from tom_alerts.alerts import get_service_class, get_service_classes\r\n  File \"/Users/rstreet/software/tom_base/tom_alerts/alerts.py\", line 5, in <module>\r\n    from dataclasses import dataclass\r\nModuleNotFoundError: No module named 'dataclasses'\r\n\n", "before_files": [{"content": "from setuptools import setup, find_packages\nfrom os import path\n\nhere = path.abspath(path.dirname(__file__))\nwith open(path.join(here, 'README.md'), encoding='utf-8') as f:\n    long_description = f.read()\n\nsetup(\n    name='tomtoolkit',\n    version='1.1.0',\n    description='The TOM Toolkit and base modules',\n    long_description=long_description,\n    long_description_content_type='text/markdown',\n    url='https://tomtoolkit.github.io',\n    author='TOM Toolkit Project',\n    author_email='ariba@lco.global',\n    classifiers=[\n        'Development Status :: 3 - Alpha',\n        'Intended Audience :: Science/Research',\n        'License :: OSI Approved :: BSD License',\n        'Operating System :: OS Independent',\n        'Programming Language :: Python :: 3',\n        'Programming Language :: Python :: 3.7',\n        'Topic :: Scientific/Engineering :: Astronomy',\n        'Topic :: Scientific/Engineering :: Physics'\n    ],\n    keywords=['tomtoolkit', 'astronomy', 'astrophysics', 'cosmology', 'science', 'fits', 'observatory'],\n    packages=find_packages(),\n    install_requires=[\n        'django',\n        'django-bootstrap4',\n        'django-extensions',\n        'django-filter',\n        'django-contrib-comments',\n        'django-gravatar2',\n        'django-crispy-forms',\n        'django-guardian',\n        'numpy',\n        'python-dateutil',\n        'requests',\n        'astroquery',\n        'astropy',\n        'astroplan',\n        'plotly',\n        'matplotlib',\n        'pillow',\n        'fits2image',\n        'specutils',\n    ],\n    extras_require={\n        'test': ['factory_boy']\n    },\n    include_package_data=True,\n)\n", "path": "setup.py"}]}