prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Spider holiday_stationstores is broken
  During the global build at 2021-08-18-14-42-26, spider **holiday_stationstores** failed with **552 features** and **10 errors**.
  
  Here's [the log](https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/logs/holiday_stationstores.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/output/holiday_stationstores.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/output/holiday_stationstores.geojson))
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `locations/spiders/holiday_stationstores.py`
  Content:
  ```
  1 # -*- coding: utf-8 -*-
  2 import scrapy
  3 import json
  4 import re
  5 
  6 from locations.items import GeojsonPointItem
  7 
  8 
  9 class HolidayStationstoreSpider(scrapy.Spider):
  10     name = "holiday_stationstores"
  11     item_attributes = {'brand': 'Holiday Stationstores',
  12                        'brand_wikidata': 'Q5880490'}
  13     allowed_domains = ["www.holidaystationstores.com"]
  14     download_delay = 0.2
  15 
  16     def start_requests(self):
  17         yield scrapy.Request('https://www.holidaystationstores.com/Locations/GetAllStores',
  18                              method='POST',
  19                              callback=self.parse_all_stores)
  20 
  21     def parse_all_stores(self, response):
  22         all_stores = json.loads(response.body_as_unicode())
  23 
  24         for store_id, store in all_stores.items():
  25             # GET requests get blocked by their CDN, but POST works fine
  26             yield scrapy.Request(f"https://www.holidaystationstores.com/Locations/Detail?storeNumber={store_id}",
  27                                  method='POST',
  28                                  meta={'store': store})
  29 
  30     def parse(self, response):
  31         store = response.meta['store']
  32 
  33         address = response.css(
  34             '.row.HolidayBackgroundColorBlue div::text').extract_first().strip()
  35         phone = response.css(
  36             '.body-content .col-lg-4 .HolidayFontColorRed::text').extract_first().strip()
  37         services = '|'.join(response.css(
  38             '.body-content .col-lg-4 ul li::text').extract()).lower()
  39         open_24_hours = '24 hours' in response.css(
  40             '.body-content .col-lg-4').get().lower()
  41 
  42         properties = {
  43             'name': f"Holiday #{store['Name']}",
  44             'lon': store['Lng'],
  45             'lat': store['Lat'],
  46             'addr_full': address,
  47             'phone': phone,
  48             'ref': store['ID'],
  49             'opening_hours': '24/7' if open_24_hours else self.opening_hours(response),
  50             'extras': {
  51                 'amenity:fuel': True,
  52                 'fuel:diesel': 'diesel' in services or None,
  53                 'atm': 'atm' in services or None,
  54                 'fuel:e85': 'e85' in services or None,
  55                 'hgv': 'truck' in services or None,
  56                 'fuel:propane': 'propane' in services or None,
  57                 'car_wash': 'car wash' in services or None,
  58                 'fuel:cng': 'cng' in services or None
  59             }
  60         }
  61 
  62         yield GeojsonPointItem(**properties)
  63 
  64     def opening_hours(self, response):
  65         hour_part_elems = response.css(
  66             '.body-content .col-lg-4 .row div::text').extract()
  67         day_groups = []
  68         this_day_group = None
  69 
  70         if hour_part_elems:
  71             def slice(source, step):
  72                 return [source[i:i+step] for i in range(0, len(source), step)]
  73 
  74             for day, hours in slice(hour_part_elems, 2):
  75                 day = day[:2]
  76                 match = re.search(
  77                     r'^(\d{1,2}):(\d{2})\s*(a|p)m - (\d{1,2}):(\d{2})\s*(a|p)m?$', hours.lower())
  78                 (f_hr, f_min, f_ampm, t_hr, t_min, t_ampm) = match.groups()
  79 
  80                 f_hr = int(f_hr)
  81                 if f_ampm == 'p':
  82                     f_hr += 12
  83                 elif f_ampm == 'a' and f_hr == 12:
  84                     f_hr = 0
  85                 t_hr = int(t_hr)
  86                 if t_ampm == 'p':
  87                     t_hr += 12
  88                 elif t_ampm == 'a' and t_hr == 12:
  89                     t_hr = 0
  90 
  91                 hours = '{:02d}:{}-{:02d}:{}'.format(
  92                     f_hr,
  93                     f_min,
  94                     t_hr,
  95                     t_min,
  96                 )
  97 
  98                 if not this_day_group:
  99                     this_day_group = {
  100                         'from_day': day,
  101                         'to_day': day,
  102                         'hours': hours
  103                     }
  104                 elif this_day_group['hours'] != hours:
  105                     day_groups.append(this_day_group)
  106                     this_day_group = {
  107                         'from_day': day,
  108                         'to_day': day,
  109                         'hours': hours
  110                     }
  111                 elif this_day_group['hours'] == hours:
  112                     this_day_group['to_day'] = day
  113 
  114             day_groups.append(this_day_group)
  115 
  116         hour_part_elems = response.xpath(
  117             '//span[@style="font-size:90%"]/text()').extract()
  118         if hour_part_elems:
  119             day_groups.append(
  120                 {'from_day': 'Mo', 'to_day': 'Su', 'hours': '00:00-23:59'})
  121 
  122         opening_hours = ""
  123         if len(day_groups) == 1 and day_groups[0]['hours'] in ('00:00-23:59', '00:00-00:00'):
  124             opening_hours = '24/7'
  125         else:
  126             for day_group in day_groups:
  127                 if day_group['from_day'] == day_group['to_day']:
  128                     opening_hours += '{from_day} {hours}; '.format(**day_group)
  129                 elif day_group['from_day'] == 'Su' and day_group['to_day'] == 'Sa':
  130                     opening_hours += '{hours}; '.format(**day_group)
  131                 else:
  132                     opening_hours += '{from_day}-{to_day} {hours}; '.format(
  133                         **day_group)
  134             opening_hours = opening_hours[:-2]
  135 
  136         return opening_hours
  137
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/locations/spiders/holiday_stationstores.py b/locations/spiders/holiday_stationstores.py
  --- a/locations/spiders/holiday_stationstores.py
  +++ b/locations/spiders/holiday_stationstores.py
  @@ -19,10 +19,10 @@
                                callback=self.parse_all_stores)
   
       def parse_all_stores(self, response):
  -        all_stores = json.loads(response.body_as_unicode())
  +        all_stores = json.loads(response.text)
   
           for store_id, store in all_stores.items():
  -            # GET requests get blocked by their CDN, but POST works fine
  +            # GET requests get blocked by their Incapsula bot protection, but POST works fine
               yield scrapy.Request(f"https://www.holidaystationstores.com/Locations/Detail?storeNumber={store_id}",
                                    method='POST',
                                    meta={'store': store})
  @@ -30,12 +30,9 @@
       def parse(self, response):
           store = response.meta['store']
   
  -        address = response.css(
  -            '.row.HolidayBackgroundColorBlue div::text').extract_first().strip()
  -        phone = response.css(
  -            '.body-content .col-lg-4 .HolidayFontColorRed::text').extract_first().strip()
  -        services = '|'.join(response.css(
  -            '.body-content .col-lg-4 ul li::text').extract()).lower()
  +        address = response.xpath('//div[@class="col-lg-4 col-sm-12"]/text()')[1].extract().strip()
  +        phone = response.xpath('//div[@class="HolidayFontColorRed"]/text()').extract_first().strip()
  +        services = '|'.join(response.xpath('//ul[@style="list-style-type: none; padding-left: 1.0em; font-size: 12px;"]/li/text()').extract()).lower()
           open_24_hours = '24 hours' in response.css(
               '.body-content .col-lg-4').get().lower()
   
  @@ -62,16 +59,18 @@
           yield GeojsonPointItem(**properties)
   
       def opening_hours(self, response):
  -        hour_part_elems = response.css(
  -            '.body-content .col-lg-4 .row div::text').extract()
  +        hour_part_elems = response.xpath('//div[@class="row"][@style="font-size: 12px;"]')
           day_groups = []
           this_day_group = None
   
           if hour_part_elems:
  -            def slice(source, step):
  -                return [source[i:i+step] for i in range(0, len(source), step)]
  +            for hour_part_elem in hour_part_elems:
  +                day = hour_part_elem.xpath('.//div[@class="col-3"]/text()').extract_first()
  +                hours = hour_part_elem.xpath('.//div[@class="col-9"]/text()').extract_first()
  +
  +                if not hours:
  +                    continue
   
  -            for day, hours in slice(hour_part_elems, 2):
                   day = day[:2]
                   match = re.search(
                       r'^(\d{1,2}):(\d{2})\s*(a|p)m - (\d{1,2}):(\d{2})\s*(a|p)m?$', hours.lower())
  @@ -111,13 +110,12 @@
                   elif this_day_group['hours'] == hours:
                       this_day_group['to_day'] = day
   
  -            day_groups.append(this_day_group)
  +            if this_day_group:
  +                day_groups.append(this_day_group)
   
  -        hour_part_elems = response.xpath(
  -            '//span[@style="font-size:90%"]/text()').extract()
  +        hour_part_elems = response.xpath('//span[@style="font-size:90%"]/text()').extract()
           if hour_part_elems:
  -            day_groups.append(
  -                {'from_day': 'Mo', 'to_day': 'Su', 'hours': '00:00-23:59'})
  +            day_groups.append({'from_day': 'Mo', 'to_day': 'Su', 'hours': '00:00-23:59'})
   
           opening_hours = ""
           if len(day_groups) == 1 and day_groups[0]['hours'] in ('00:00-23:59', '00:00-00:00'):
  
verification_info: {"golden_diff": "diff --git a/locations/spiders/holiday_stationstores.py b/locations/spiders/holiday_stationstores.py\n--- a/locations/spiders/holiday_stationstores.py\n+++ b/locations/spiders/holiday_stationstores.py\n@@ -19,10 +19,10 @@\n                              callback=self.parse_all_stores)\n \n     def parse_all_stores(self, response):\n-        all_stores = json.loads(response.body_as_unicode())\n+        all_stores = json.loads(response.text)\n \n         for store_id, store in all_stores.items():\n-            # GET requests get blocked by their CDN, but POST works fine\n+            # GET requests get blocked by their Incapsula bot protection, but POST works fine\n             yield scrapy.Request(f\"https://www.holidaystationstores.com/Locations/Detail?storeNumber={store_id}\",\n                                  method='POST',\n                                  meta={'store': store})\n@@ -30,12 +30,9 @@\n     def parse(self, response):\n         store = response.meta['store']\n \n-        address = response.css(\n-            '.row.HolidayBackgroundColorBlue div::text').extract_first().strip()\n-        phone = response.css(\n-            '.body-content .col-lg-4 .HolidayFontColorRed::text').extract_first().strip()\n-        services = '|'.join(response.css(\n-            '.body-content .col-lg-4 ul li::text').extract()).lower()\n+        address = response.xpath('//div[@class=\"col-lg-4 col-sm-12\"]/text()')[1].extract().strip()\n+        phone = response.xpath('//div[@class=\"HolidayFontColorRed\"]/text()').extract_first().strip()\n+        services = '|'.join(response.xpath('//ul[@style=\"list-style-type: none; padding-left: 1.0em; font-size: 12px;\"]/li/text()').extract()).lower()\n         open_24_hours = '24 hours' in response.css(\n             '.body-content .col-lg-4').get().lower()\n \n@@ -62,16 +59,18 @@\n         yield GeojsonPointItem(**properties)\n \n     def opening_hours(self, response):\n-        hour_part_elems = response.css(\n-            '.body-content .col-lg-4 .row div::text').extract()\n+        hour_part_elems = response.xpath('//div[@class=\"row\"][@style=\"font-size: 12px;\"]')\n         day_groups = []\n         this_day_group = None\n \n         if hour_part_elems:\n-            def slice(source, step):\n-                return [source[i:i+step] for i in range(0, len(source), step)]\n+            for hour_part_elem in hour_part_elems:\n+                day = hour_part_elem.xpath('.//div[@class=\"col-3\"]/text()').extract_first()\n+                hours = hour_part_elem.xpath('.//div[@class=\"col-9\"]/text()').extract_first()\n+\n+                if not hours:\n+                    continue\n \n-            for day, hours in slice(hour_part_elems, 2):\n                 day = day[:2]\n                 match = re.search(\n                     r'^(\\d{1,2}):(\\d{2})\\s*(a|p)m - (\\d{1,2}):(\\d{2})\\s*(a|p)m?$', hours.lower())\n@@ -111,13 +110,12 @@\n                 elif this_day_group['hours'] == hours:\n                     this_day_group['to_day'] = day\n \n-            day_groups.append(this_day_group)\n+            if this_day_group:\n+                day_groups.append(this_day_group)\n \n-        hour_part_elems = response.xpath(\n-            '//span[@style=\"font-size:90%\"]/text()').extract()\n+        hour_part_elems = response.xpath('//span[@style=\"font-size:90%\"]/text()').extract()\n         if hour_part_elems:\n-            day_groups.append(\n-                {'from_day': 'Mo', 'to_day': 'Su', 'hours': '00:00-23:59'})\n+            day_groups.append({'from_day': 'Mo', 'to_day': 'Su', 'hours': '00:00-23:59'})\n \n         opening_hours = \"\"\n         if len(day_groups) == 1 and day_groups[0]['hours'] in ('00:00-23:59', '00:00-00:00'):\n", "issue": "Spider holiday_stationstores is broken\nDuring the global build at 2021-08-18-14-42-26, spider **holiday_stationstores** failed with **552 features** and **10 errors**.\n\nHere's [the log](https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/logs/holiday_stationstores.txt) and [the output](https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/output/holiday_stationstores.geojson) ([on a map](https://data.alltheplaces.xyz/map.html?show=https://data.alltheplaces.xyz/runs/2021-08-18-14-42-26/output/holiday_stationstores.geojson))\n", "before_files": [{"content": "# -*- coding: utf-8 -*-\nimport scrapy\nimport json\nimport re\n\nfrom locations.items import GeojsonPointItem\n\n\nclass HolidayStationstoreSpider(scrapy.Spider):\n    name = \"holiday_stationstores\"\n    item_attributes = {'brand': 'Holiday Stationstores',\n                       'brand_wikidata': 'Q5880490'}\n    allowed_domains = [\"www.holidaystationstores.com\"]\n    download_delay = 0.2\n\n    def start_requests(self):\n        yield scrapy.Request('https://www.holidaystationstores.com/Locations/GetAllStores',\n                             method='POST',\n                             callback=self.parse_all_stores)\n\n    def parse_all_stores(self, response):\n        all_stores = json.loads(response.body_as_unicode())\n\n        for store_id, store in all_stores.items():\n            # GET requests get blocked by their CDN, but POST works fine\n            yield scrapy.Request(f\"https://www.holidaystationstores.com/Locations/Detail?storeNumber={store_id}\",\n                                 method='POST',\n                                 meta={'store': store})\n\n    def parse(self, response):\n        store = response.meta['store']\n\n        address = response.css(\n            '.row.HolidayBackgroundColorBlue div::text').extract_first().strip()\n        phone = response.css(\n            '.body-content .col-lg-4 .HolidayFontColorRed::text').extract_first().strip()\n        services = '|'.join(response.css(\n            '.body-content .col-lg-4 ul li::text').extract()).lower()\n        open_24_hours = '24 hours' in response.css(\n            '.body-content .col-lg-4').get().lower()\n\n        properties = {\n            'name': f\"Holiday #{store['Name']}\",\n            'lon': store['Lng'],\n            'lat': store['Lat'],\n            'addr_full': address,\n            'phone': phone,\n            'ref': store['ID'],\n            'opening_hours': '24/7' if open_24_hours else self.opening_hours(response),\n            'extras': {\n                'amenity:fuel': True,\n                'fuel:diesel': 'diesel' in services or None,\n                'atm': 'atm' in services or None,\n                'fuel:e85': 'e85' in services or None,\n                'hgv': 'truck' in services or None,\n                'fuel:propane': 'propane' in services or None,\n                'car_wash': 'car wash' in services or None,\n                'fuel:cng': 'cng' in services or None\n            }\n        }\n\n        yield GeojsonPointItem(**properties)\n\n    def opening_hours(self, response):\n        hour_part_elems = response.css(\n            '.body-content .col-lg-4 .row div::text').extract()\n        day_groups = []\n        this_day_group = None\n\n        if hour_part_elems:\n            def slice(source, step):\n                return [source[i:i+step] for i in range(0, len(source), step)]\n\n            for day, hours in slice(hour_part_elems, 2):\n                day = day[:2]\n                match = re.search(\n                    r'^(\\d{1,2}):(\\d{2})\\s*(a|p)m - (\\d{1,2}):(\\d{2})\\s*(a|p)m?$', hours.lower())\n                (f_hr, f_min, f_ampm, t_hr, t_min, t_ampm) = match.groups()\n\n                f_hr = int(f_hr)\n                if f_ampm == 'p':\n                    f_hr += 12\n                elif f_ampm == 'a' and f_hr == 12:\n                    f_hr = 0\n                t_hr = int(t_hr)\n                if t_ampm == 'p':\n                    t_hr += 12\n                elif t_ampm == 'a' and t_hr == 12:\n                    t_hr = 0\n\n                hours = '{:02d}:{}-{:02d}:{}'.format(\n                    f_hr,\n                    f_min,\n                    t_hr,\n                    t_min,\n                )\n\n                if not this_day_group:\n                    this_day_group = {\n                        'from_day': day,\n                        'to_day': day,\n                        'hours': hours\n                    }\n                elif this_day_group['hours'] != hours:\n                    day_groups.append(this_day_group)\n                    this_day_group = {\n                        'from_day': day,\n                        'to_day': day,\n                        'hours': hours\n                    }\n                elif this_day_group['hours'] == hours:\n                    this_day_group['to_day'] = day\n\n            day_groups.append(this_day_group)\n\n        hour_part_elems = response.xpath(\n            '//span[@style=\"font-size:90%\"]/text()').extract()\n        if hour_part_elems:\n            day_groups.append(\n                {'from_day': 'Mo', 'to_day': 'Su', 'hours': '00:00-23:59'})\n\n        opening_hours = \"\"\n        if len(day_groups) == 1 and day_groups[0]['hours'] in ('00:00-23:59', '00:00-00:00'):\n            opening_hours = '24/7'\n        else:\n            for day_group in day_groups:\n                if day_group['from_day'] == day_group['to_day']:\n                    opening_hours += '{from_day} {hours}; '.format(**day_group)\n                elif day_group['from_day'] == 'Su' and day_group['to_day'] == 'Sa':\n                    opening_hours += '{hours}; '.format(**day_group)\n                else:\n                    opening_hours += '{from_day}-{to_day} {hours}; '.format(\n                        **day_group)\n            opening_hours = opening_hours[:-2]\n\n        return opening_hours\n", "path": "locations/spiders/holiday_stationstores.py"}], "after_files": [{"content": "# -*- coding: utf-8 -*-\nimport scrapy\nimport json\nimport re\n\nfrom locations.items import GeojsonPointItem\n\n\nclass HolidayStationstoreSpider(scrapy.Spider):\n    name = \"holiday_stationstores\"\n    item_attributes = {'brand': 'Holiday Stationstores',\n                       'brand_wikidata': 'Q5880490'}\n    allowed_domains = [\"www.holidaystationstores.com\"]\n    download_delay = 0.2\n\n    def start_requests(self):\n        yield scrapy.Request('https://www.holidaystationstores.com/Locations/GetAllStores',\n                             method='POST',\n                             callback=self.parse_all_stores)\n\n    def parse_all_stores(self, response):\n        all_stores = json.loads(response.text)\n\n        for store_id, store in all_stores.items():\n            # GET requests get blocked by their Incapsula bot protection, but POST works fine\n            yield scrapy.Request(f\"https://www.holidaystationstores.com/Locations/Detail?storeNumber={store_id}\",\n                                 method='POST',\n                                 meta={'store': store})\n\n    def parse(self, response):\n        store = response.meta['store']\n\n        address = response.xpath('//div[@class=\"col-lg-4 col-sm-12\"]/text()')[1].extract().strip()\n        phone = response.xpath('//div[@class=\"HolidayFontColorRed\"]/text()').extract_first().strip()\n        services = '|'.join(response.xpath('//ul[@style=\"list-style-type: none; padding-left: 1.0em; font-size: 12px;\"]/li/text()').extract()).lower()\n        open_24_hours = '24 hours' in response.css(\n            '.body-content .col-lg-4').get().lower()\n\n        properties = {\n            'name': f\"Holiday #{store['Name']}\",\n            'lon': store['Lng'],\n            'lat': store['Lat'],\n            'addr_full': address,\n            'phone': phone,\n            'ref': store['ID'],\n            'opening_hours': '24/7' if open_24_hours else self.opening_hours(response),\n            'extras': {\n                'amenity:fuel': True,\n                'fuel:diesel': 'diesel' in services or None,\n                'atm': 'atm' in services or None,\n                'fuel:e85': 'e85' in services or None,\n                'hgv': 'truck' in services or None,\n                'fuel:propane': 'propane' in services or None,\n                'car_wash': 'car wash' in services or None,\n                'fuel:cng': 'cng' in services or None\n            }\n        }\n\n        yield GeojsonPointItem(**properties)\n\n    def opening_hours(self, response):\n        hour_part_elems = response.xpath('//div[@class=\"row\"][@style=\"font-size: 12px;\"]')\n        day_groups = []\n        this_day_group = None\n\n        if hour_part_elems:\n            for hour_part_elem in hour_part_elems:\n                day = hour_part_elem.xpath('.//div[@class=\"col-3\"]/text()').extract_first()\n                hours = hour_part_elem.xpath('.//div[@class=\"col-9\"]/text()').extract_first()\n\n                if not hours:\n                    continue\n\n                day = day[:2]\n                match = re.search(\n                    r'^(\\d{1,2}):(\\d{2})\\s*(a|p)m - (\\d{1,2}):(\\d{2})\\s*(a|p)m?$', hours.lower())\n                (f_hr, f_min, f_ampm, t_hr, t_min, t_ampm) = match.groups()\n\n                f_hr = int(f_hr)\n                if f_ampm == 'p':\n                    f_hr += 12\n                elif f_ampm == 'a' and f_hr == 12:\n                    f_hr = 0\n                t_hr = int(t_hr)\n                if t_ampm == 'p':\n                    t_hr += 12\n                elif t_ampm == 'a' and t_hr == 12:\n                    t_hr = 0\n\n                hours = '{:02d}:{}-{:02d}:{}'.format(\n                    f_hr,\n                    f_min,\n                    t_hr,\n                    t_min,\n                )\n\n                if not this_day_group:\n                    this_day_group = {\n                        'from_day': day,\n                        'to_day': day,\n                        'hours': hours\n                    }\n                elif this_day_group['hours'] != hours:\n                    day_groups.append(this_day_group)\n                    this_day_group = {\n                        'from_day': day,\n                        'to_day': day,\n                        'hours': hours\n                    }\n                elif this_day_group['hours'] == hours:\n                    this_day_group['to_day'] = day\n\n            if this_day_group:\n                day_groups.append(this_day_group)\n\n        hour_part_elems = response.xpath('//span[@style=\"font-size:90%\"]/text()').extract()\n        if hour_part_elems:\n            day_groups.append({'from_day': 'Mo', 'to_day': 'Su', 'hours': '00:00-23:59'})\n\n        opening_hours = \"\"\n        if len(day_groups) == 1 and day_groups[0]['hours'] in ('00:00-23:59', '00:00-00:00'):\n            opening_hours = '24/7'\n        else:\n            for day_group in day_groups:\n                if day_group['from_day'] == day_group['to_day']:\n                    opening_hours += '{from_day} {hours}; '.format(**day_group)\n                elif day_group['from_day'] == 'Su' and day_group['to_day'] == 'Sa':\n                    opening_hours += '{hours}; '.format(**day_group)\n                else:\n                    opening_hours += '{from_day}-{to_day} {hours}; '.format(\n                        **day_group)\n            opening_hours = opening_hours[:-2]\n\n        return opening_hours\n", "path": "locations/spiders/holiday_stationstores.py"}]}