prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Possible timezone related failure
  ### Describe the issue
  
  https://github.com/ietf-tools/datatracker/actions/runs/4071644533/jobs/7013629899
  
  ### Code of Conduct
  
  - [X] I agree to follow the [IETF's Code of Conduct](https://github.com/ietf-tools/.github/blob/main/CODE_OF_CONDUCT.md)
  
  </issue>
  <code>
  [start of ietf/group/factories.py]
  1 # Copyright The IETF Trust 2015-2022, All Rights Reserved
  2 import datetime
  3 import debug # pyflakes:ignore
  4 import factory
  5 
  6 from typing import List    # pyflakes:ignore
  7 
  8 from django.utils import timezone
  9 
  10 from ietf.group.models import Group, Role, GroupEvent, GroupMilestone, \
  11                               GroupHistory, RoleHistory
  12 from ietf.review.factories import ReviewTeamSettingsFactory
  13 
  14 class GroupFactory(factory.django.DjangoModelFactory):
  15     class Meta:
  16         model = Group
  17         django_get_or_create = ('acronym',)
  18 
  19     name = factory.Faker('sentence',nb_words=6)
  20     acronym = factory.Sequence(lambda n: 'acronym%d' %n)
  21     state_id = 'active'
  22     type_id = 'wg'
  23     list_email = factory.LazyAttribute(lambda a: '%s@ietf.org'% a.acronym)
  24     uses_milestone_dates = True
  25     used_roles = [] # type: List[str]
  26 
  27     @factory.lazy_attribute
  28     def parent(self):
  29         if self.type_id in ['wg','ag']:
  30             return GroupFactory(type_id='area')
  31         elif self.type_id in ['rg','rag']:
  32             return GroupFactory(acronym='irtf', type_id='irtf')
  33         else:
  34             return None
  35 
  36 class ReviewTeamFactory(GroupFactory):
  37 
  38     type_id = 'review'
  39 
  40     @factory.post_generation
  41     def settings(obj, create, extracted, **kwargs):
  42         ReviewTeamSettingsFactory.create(group=obj,**kwargs)
  43 
  44 class RoleFactory(factory.django.DjangoModelFactory):
  45     class Meta:
  46         model = Role
  47 
  48     group = factory.SubFactory(GroupFactory)
  49     person = factory.SubFactory('ietf.person.factories.PersonFactory')
  50     email = factory.LazyAttribute(lambda obj: obj.person.email())
  51 
  52 class GroupEventFactory(factory.django.DjangoModelFactory):
  53     class Meta:
  54         model = GroupEvent
  55 
  56     group = factory.SubFactory(GroupFactory)
  57     by = factory.SubFactory('ietf.person.factories.PersonFactory')
  58     type = 'comment'
  59     desc = factory.Faker('paragraph')
  60 
  61 class BaseGroupMilestoneFactory(factory.django.DjangoModelFactory):
  62     class Meta:
  63         model = GroupMilestone
  64 
  65     group = factory.SubFactory(GroupFactory)
  66     state_id = 'active'
  67     desc = factory.Faker('sentence')
  68 
  69 class DatedGroupMilestoneFactory(BaseGroupMilestoneFactory):
  70     group = factory.SubFactory(GroupFactory, uses_milestone_dates=True)
  71     due = timezone.now()+datetime.timedelta(days=180)
  72 
  73 class DatelessGroupMilestoneFactory(BaseGroupMilestoneFactory):
  74     group = factory.SubFactory(GroupFactory, uses_milestone_dates=False)
  75     order = factory.Sequence(lambda n: n)
  76 
  77 class GroupHistoryFactory(factory.django.DjangoModelFactory):
  78     class Meta:
  79         model=GroupHistory
  80 
  81     time = lambda: timezone.now()
  82     group = factory.SubFactory(GroupFactory, state_id='active')
  83 
  84     name = factory.LazyAttribute(lambda obj: obj.group.name)
  85     state_id = factory.LazyAttribute(lambda obj: obj.group.state_id)
  86     type_id = factory.LazyAttribute(lambda obj: obj.group.type_id)
  87     parent = factory.LazyAttribute(lambda obj: obj.group.parent)
  88     uses_milestone_dates = factory.LazyAttribute(lambda obj: obj.group.uses_milestone_dates)
  89     used_roles = factory.LazyAttribute(lambda obj: obj.group.used_roles)
  90     description = factory.LazyAttribute(lambda obj: obj.group.description)
  91     list_email = factory.LazyAttribute(lambda obj: '%s@ietf.org'% obj.group.acronym) #TODO : move this to GroupFactory
  92     list_subscribe = factory.LazyAttribute(lambda obj: obj.group.list_subscribe)
  93     list_archive = factory.LazyAttribute(lambda obj: obj.group.list_archive)
  94     comments = factory.LazyAttribute(lambda obj: obj.group.comments)
  95     meeting_seen_as_area = factory.LazyAttribute(lambda obj: obj.group.meeting_seen_as_area)
  96     acronym = factory.LazyAttribute(lambda obj: obj.group.acronym)
  97 
  98     @factory.post_generation
  99     def unused_states(obj, create, extracted, **kwargs):
  100         if create:
  101             if extracted:
  102                 obj.unused_states.set(extracted)
  103             else:
  104                 obj.unused_states.set(obj.group.unused_states.all())
  105     @factory.post_generation
  106     def unused_tags(obj, create, extracted, **kwargs):
  107         if create:
  108             if extracted:
  109                 obj.unused_tags.set(extracted)
  110             else:
  111                 obj.unused_tags.set(obj.group.unused_states.all())            
  112 
  113 class RoleHistoryFactory(factory.django.DjangoModelFactory):
  114     class Meta:
  115         model=RoleHistory
  116 
  117     group = factory.SubFactory(GroupHistoryFactory)
  118     person = factory.SubFactory('ietf.person.factories.PersonFactory')
  119     email = factory.LazyAttribute(lambda obj: obj.person.email())
  120 
  121
  [end of ietf/group/factories.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/ietf/group/factories.py b/ietf/group/factories.py
  --- a/ietf/group/factories.py
  +++ b/ietf/group/factories.py
  @@ -10,6 +10,8 @@
   from ietf.group.models import Group, Role, GroupEvent, GroupMilestone, \
                                 GroupHistory, RoleHistory
   from ietf.review.factories import ReviewTeamSettingsFactory
  +from ietf.utils.timezone import date_today
  +
   
   class GroupFactory(factory.django.DjangoModelFactory):
       class Meta:
  @@ -68,7 +70,7 @@
   
   class DatedGroupMilestoneFactory(BaseGroupMilestoneFactory):
       group = factory.SubFactory(GroupFactory, uses_milestone_dates=True)
  -    due = timezone.now()+datetime.timedelta(days=180)
  +    due = date_today() + datetime.timedelta(days=180)
   
   class DatelessGroupMilestoneFactory(BaseGroupMilestoneFactory):
       group = factory.SubFactory(GroupFactory, uses_milestone_dates=False)
  
verification_info: {"golden_diff": "diff --git a/ietf/group/factories.py b/ietf/group/factories.py\n--- a/ietf/group/factories.py\n+++ b/ietf/group/factories.py\n@@ -10,6 +10,8 @@\n from ietf.group.models import Group, Role, GroupEvent, GroupMilestone, \\\n                               GroupHistory, RoleHistory\n from ietf.review.factories import ReviewTeamSettingsFactory\n+from ietf.utils.timezone import date_today\n+\n \n class GroupFactory(factory.django.DjangoModelFactory):\n     class Meta:\n@@ -68,7 +70,7 @@\n \n class DatedGroupMilestoneFactory(BaseGroupMilestoneFactory):\n     group = factory.SubFactory(GroupFactory, uses_milestone_dates=True)\n-    due = timezone.now()+datetime.timedelta(days=180)\n+    due = date_today() + datetime.timedelta(days=180)\n \n class DatelessGroupMilestoneFactory(BaseGroupMilestoneFactory):\n     group = factory.SubFactory(GroupFactory, uses_milestone_dates=False)\n", "issue": "Possible timezone related failure\n### Describe the issue\n\nhttps://github.com/ietf-tools/datatracker/actions/runs/4071644533/jobs/7013629899\n\n### Code of Conduct\n\n- [X] I agree to follow the [IETF's Code of Conduct](https://github.com/ietf-tools/.github/blob/main/CODE_OF_CONDUCT.md)\n", "before_files": [{"content": "# Copyright The IETF Trust 2015-2022, All Rights Reserved\nimport datetime\nimport debug # pyflakes:ignore\nimport factory\n\nfrom typing import List    # pyflakes:ignore\n\nfrom django.utils import timezone\n\nfrom ietf.group.models import Group, Role, GroupEvent, GroupMilestone, \\\n                              GroupHistory, RoleHistory\nfrom ietf.review.factories import ReviewTeamSettingsFactory\n\nclass GroupFactory(factory.django.DjangoModelFactory):\n    class Meta:\n        model = Group\n        django_get_or_create = ('acronym',)\n\n    name = factory.Faker('sentence',nb_words=6)\n    acronym = factory.Sequence(lambda n: 'acronym%d' %n)\n    state_id = 'active'\n    type_id = 'wg'\n    list_email = factory.LazyAttribute(lambda a: '%s@ietf.org'% a.acronym)\n    uses_milestone_dates = True\n    used_roles = [] # type: List[str]\n\n    @factory.lazy_attribute\n    def parent(self):\n        if self.type_id in ['wg','ag']:\n            return GroupFactory(type_id='area')\n        elif self.type_id in ['rg','rag']:\n            return GroupFactory(acronym='irtf', type_id='irtf')\n        else:\n            return None\n\nclass ReviewTeamFactory(GroupFactory):\n\n    type_id = 'review'\n\n    @factory.post_generation\n    def settings(obj, create, extracted, **kwargs):\n        ReviewTeamSettingsFactory.create(group=obj,**kwargs)\n\nclass RoleFactory(factory.django.DjangoModelFactory):\n    class Meta:\n        model = Role\n\n    group = factory.SubFactory(GroupFactory)\n    person = factory.SubFactory('ietf.person.factories.PersonFactory')\n    email = factory.LazyAttribute(lambda obj: obj.person.email())\n\nclass GroupEventFactory(factory.django.DjangoModelFactory):\n    class Meta:\n        model = GroupEvent\n\n    group = factory.SubFactory(GroupFactory)\n    by = factory.SubFactory('ietf.person.factories.PersonFactory')\n    type = 'comment'\n    desc = factory.Faker('paragraph')\n\nclass BaseGroupMilestoneFactory(factory.django.DjangoModelFactory):\n    class Meta:\n        model = GroupMilestone\n\n    group = factory.SubFactory(GroupFactory)\n    state_id = 'active'\n    desc = factory.Faker('sentence')\n\nclass DatedGroupMilestoneFactory(BaseGroupMilestoneFactory):\n    group = factory.SubFactory(GroupFactory, uses_milestone_dates=True)\n    due = timezone.now()+datetime.timedelta(days=180)\n\nclass DatelessGroupMilestoneFactory(BaseGroupMilestoneFactory):\n    group = factory.SubFactory(GroupFactory, uses_milestone_dates=False)\n    order = factory.Sequence(lambda n: n)\n\nclass GroupHistoryFactory(factory.django.DjangoModelFactory):\n    class Meta:\n        model=GroupHistory\n\n    time = lambda: timezone.now()\n    group = factory.SubFactory(GroupFactory, state_id='active')\n\n    name = factory.LazyAttribute(lambda obj: obj.group.name)\n    state_id = factory.LazyAttribute(lambda obj: obj.group.state_id)\n    type_id = factory.LazyAttribute(lambda obj: obj.group.type_id)\n    parent = factory.LazyAttribute(lambda obj: obj.group.parent)\n    uses_milestone_dates = factory.LazyAttribute(lambda obj: obj.group.uses_milestone_dates)\n    used_roles = factory.LazyAttribute(lambda obj: obj.group.used_roles)\n    description = factory.LazyAttribute(lambda obj: obj.group.description)\n    list_email = factory.LazyAttribute(lambda obj: '%s@ietf.org'% obj.group.acronym) #TODO : move this to GroupFactory\n    list_subscribe = factory.LazyAttribute(lambda obj: obj.group.list_subscribe)\n    list_archive = factory.LazyAttribute(lambda obj: obj.group.list_archive)\n    comments = factory.LazyAttribute(lambda obj: obj.group.comments)\n    meeting_seen_as_area = factory.LazyAttribute(lambda obj: obj.group.meeting_seen_as_area)\n    acronym = factory.LazyAttribute(lambda obj: obj.group.acronym)\n\n    @factory.post_generation\n    def unused_states(obj, create, extracted, **kwargs):\n        if create:\n            if extracted:\n                obj.unused_states.set(extracted)\n            else:\n                obj.unused_states.set(obj.group.unused_states.all())\n    @factory.post_generation\n    def unused_tags(obj, create, extracted, **kwargs):\n        if create:\n            if extracted:\n                obj.unused_tags.set(extracted)\n            else:\n                obj.unused_tags.set(obj.group.unused_states.all())            \n\nclass RoleHistoryFactory(factory.django.DjangoModelFactory):\n    class Meta:\n        model=RoleHistory\n\n    group = factory.SubFactory(GroupHistoryFactory)\n    person = factory.SubFactory('ietf.person.factories.PersonFactory')\n    email = factory.LazyAttribute(lambda obj: obj.person.email())\n\n", "path": "ietf/group/factories.py"}]}