We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
CT failing since at least 2018-01-07
CT has been failing since 2018-01-07

Based on automated runs it appears that CT has not run successfully in 2 days (2018-01-07).


```
  23:00:35 INFO scrapelib: GET - ftp://ftp.cga.ct.gov
23:00:35 CRITICAL pupa: Session(s) 2018 were reported by Connecticut.get_session_list() but were not found in Connecticut.legislative_sessions or Connecticut.ignored_scraped_sessions.
no pupa_settings on path, using defaults
ct (scrape, import)
  events: {}
  bills: {}
  people: {}
```

Visit http://bobsled.openstates.org for more info.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `openstates/ct/__init__.py`
Content:
```
1 import lxml.html
2 
3 from pupa.scrape import Jurisdiction, Organization
4 from .people import CTPersomScraper
5 from .bills import CTBillScraper
6 from .events import CTEventScraper
7 
8 settings = {
9     'SCRAPELIB_RPM': 20
10 }
11 
12 
13 class Connecticut(Jurisdiction):
14     division_id = "ocd-division/country:us/state:ct"
15     classification = "government"
16     name = "Connecticut"
17     url = "http://www.cga.ct.gov/"
18     scrapers = {
19         'people': CTPersomScraper,
20         'bills': CTBillScraper,
21         'events': CTEventScraper,
22     }
23     parties = [
24         {'name': 'Republican'},
25         {'name': 'Democratic'}
26     ]
27     legislative_sessions = [
28         {
29             "_scraped_name": "2011",
30             "identifier": "2011",
31             "name": "2011 Regular Session"
32         },
33         {
34             "_scraped_name": "2012",
35             "identifier": "2012",
36             "name": "2012 Regular Session"
37         },
38         {
39             "_scraped_name": "2013",
40             "identifier": "2013",
41             "name": "2013 Regular Session"
42         },
43         {
44             "_scraped_name": "2014",
45             "identifier": "2014",
46             "name": "2014 Regular Session"
47         },
48         {
49             "_scraped_name": "2015",
50             "identifier": "2015",
51             "name": "2015 Regular Session"
52         },
53         {
54             "_scraped_name": "2016",
55             "end_date": "2016-05-04",
56             "identifier": "2016",
57             "name": "2016 Regular Session",
58             "start_date": "2016-02-03"
59         },
60         {
61             "_scraped_name": "2017",
62             "identifier": "2017",
63             "name": "2017 Regular Session",
64             "start_date": "2017-01-04",
65             "end_date": "2017-06-07",
66         },
67     ]
68     ignored_scraped_sessions = [
69         "2010",
70         "2009",
71         "2008",
72         "2007",
73         "2006",
74         "2005"
75     ]
76 
77     def get_organizations(self):
78         legislature_name = "Connecticut General Assembly"
79         lower_chamber_name = "House"
80         lower_seats = 151
81         lower_title = "Representative"
82         upper_chamber_name = "Senate"
83         upper_seats = 36
84         upper_title = "Senator"
85 
86         legislature = Organization(name=legislature_name,
87                                    classification="legislature")
88         upper = Organization(upper_chamber_name, classification='upper',
89                              parent_id=legislature._id)
90         lower = Organization(lower_chamber_name, classification='lower',
91                              parent_id=legislature._id)
92 
93         for n in range(1, upper_seats+1):
94             upper.add_post(
95                 label=str(n), role=upper_title,
96                 division_id='{}/sldu:{}'.format(self.division_id, n))
97         for n in range(1, lower_seats+1):
98             lower.add_post(
99                 label=str(n), role=lower_title,
100                 division_id='{}/sldl:{}'.format(self.division_id, n))
101 
102         yield legislature
103         yield upper
104         yield lower
105 
106     def get_session_list(self):
107         import scrapelib
108         text = scrapelib.Scraper().get('ftp://ftp.cga.ct.gov').text
109         sessions = [line.split()[-1] for line in text.splitlines()]
110 
111         for not_session_name in ('incoming', 'pub', 'CGAAudio', 'rba', 'NCSL', "apaac",
112                                  'FOI_1', 'stainedglass', ):
113             sessions.remove(not_session_name)
114         return sessions
115 
116     def get_extract_text(self, doc, data):
117         doc = lxml.html.fromstring(data)
118         text = ' '.join(p.text_content() for p in doc.xpath('//body/p'))
119         return text
120
```

Path: `billy_metadata/ct.py`
Content:
```
1 import datetime
2 
3 
4 metadata = {
5     'name': 'Connecticut',
6     'abbreviation': 'ct',
7     'legislature_name': 'Connecticut General Assembly',
8     'legislature_url': 'http://www.cga.ct.gov/',
9     'capitol_timezone': 'America/New_York',
10     'chambers': {
11         'upper': {'name': 'Senate', 'title': 'Senator'},
12         'lower': {'name': 'House', 'title': 'Representative'},
13     },
14     'terms': [
15         {
16             'name': '2011-2012',
17             'start_year': 2011,
18             'end_year': 2012,
19             'sessions': ['2011', '2012'],
20         },
21         {
22             'name': '2013-2014',
23             'start_year': 2013,
24             'end_year': 2014,
25             'sessions': ['2013', '2014'],
26         },
27         {
28             'name': '2015-2016',
29             'start_year': 2015,
30             'end_year': 2016,
31             'sessions': ['2015', '2016'],
32         },
33         {
34             'name': '2017-2018',
35             'start_year': 2017,
36             'end_year': 2018,
37             'sessions': ['2017'],
38         },
39     ],
40     'session_details': {
41         '2011': {
42             'display_name': '2011 Regular Session',
43             '_scraped_name': '2011',
44         },
45         '2012': {
46             'display_name': '2012 Regular Session',
47             '_scraped_name': '2012',
48         },
49         '2013': {
50             'display_name': '2013 Regular Session',
51             '_scraped_name': '2013',
52         },
53         '2014': {
54             'display_name': '2014 Regular Session',
55             '_scraped_name': '2014',
56         },
57         '2015': {
58             'display_name': '2015 Regular Session',
59             '_scraped_name': '2015',
60         },
61         '2016': {
62             'display_name': '2016 Regular Session',
63             'start_date': datetime.date(2016, 2, 3),
64             'end_date': datetime.date(2016, 5, 4),
65             '_scraped_name': '2016',
66         },
67         '2017': {
68             'display_name': '2017 Regular Session',
69             '_scraped_name': '2017',
70         },
71     },
72     'feature_flags': ['subjects', 'events', 'influenceexplorer'],
73     '_ignored_scraped_sessions': [
74         '2010',
75         '2009',
76         '2008',
77         '2007',
78         '2006',
79         '2005',
80     ],
81 }
82
```
--- 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()

```

diff --git a/billy_metadata/ct.py b/billy_metadata/ct.py
--- a/billy_metadata/ct.py
+++ b/billy_metadata/ct.py
@@ -34,7 +34,7 @@
             'name': '2017-2018',
             'start_year': 2017,
             'end_year': 2018,
-            'sessions': ['2017'],
+            'sessions': ['2017', '2018'],
         },
     ],
     'session_details': {
@@ -68,6 +68,12 @@
             'display_name': '2017 Regular Session',
             '_scraped_name': '2017',
         },
+        '2018': {
+            'display_name': '2018 Regular Session',
+            'start_date': datetime.date(2018, 1, 10),
+            'end_date': datetime.date(2018, 5, 9),
+            '_scraped_name': '2018',
+        },
     },
     'feature_flags': ['subjects', 'events', 'influenceexplorer'],
     '_ignored_scraped_sessions': [
diff --git a/openstates/ct/__init__.py b/openstates/ct/__init__.py
--- a/openstates/ct/__init__.py
+++ b/openstates/ct/__init__.py
@@ -64,6 +64,13 @@
             "start_date": "2017-01-04",
             "end_date": "2017-06-07",
         },
+        {
+            "_scraped_name": "2018",
+            "identifier": "2018",
+            "name": "2018 Regular Session",
+            "start_date": "2018-01-10",
+            "end_date": "2018-05-09",
+        },
     ]
     ignored_scraped_sessions = [
         "2010",

{"golden_diff": "diff --git a/billy_metadata/ct.py b/billy_metadata/ct.py\n--- a/billy_metadata/ct.py\n+++ b/billy_metadata/ct.py\n@@ -34,7 +34,7 @@\n             'name': '2017-2018',\n             'start_year': 2017,\n             'end_year': 2018,\n-            'sessions': ['2017'],\n+            'sessions': ['2017', '2018'],\n         },\n     ],\n     'session_details': {\n@@ -68,6 +68,12 @@\n             'display_name': '2017 Regular Session',\n             '_scraped_name': '2017',\n         },\n+        '2018': {\n+            'display_name': '2018 Regular Session',\n+            'start_date': datetime.date(2018, 1, 10),\n+            'end_date': datetime.date(2018, 5, 9),\n+            '_scraped_name': '2018',\n+        },\n     },\n     'feature_flags': ['subjects', 'events', 'influenceexplorer'],\n     '_ignored_scraped_sessions': [\ndiff --git a/openstates/ct/__init__.py b/openstates/ct/__init__.py\n--- a/openstates/ct/__init__.py\n+++ b/openstates/ct/__init__.py\n@@ -64,6 +64,13 @@\n             \"start_date\": \"2017-01-04\",\n             \"end_date\": \"2017-06-07\",\n         },\n+        {\n+            \"_scraped_name\": \"2018\",\n+            \"identifier\": \"2018\",\n+            \"name\": \"2018 Regular Session\",\n+            \"start_date\": \"2018-01-10\",\n+            \"end_date\": \"2018-05-09\",\n+        },\n     ]\n     ignored_scraped_sessions = [\n         \"2010\",\n", "issue": "CT failing since at least 2018-01-07\nCT has been failing since 2018-01-07\n\nBased on automated runs it appears that CT has not run successfully in 2 days (2018-01-07).\n\n\n```\n  23:00:35 INFO scrapelib: GET - ftp://ftp.cga.ct.gov\n23:00:35 CRITICAL pupa: Session(s) 2018 were reported by Connecticut.get_session_list() but were not found in Connecticut.legislative_sessions or Connecticut.ignored_scraped_sessions.\nno pupa_settings on path, using defaults\nct (scrape, import)\n  events: {}\n  bills: {}\n  people: {}\n```\n\nVisit http://bobsled.openstates.org for more info.\n\n", "before_files": [{"content": "import lxml.html\n\nfrom pupa.scrape import Jurisdiction, Organization\nfrom .people import CTPersomScraper\nfrom .bills import CTBillScraper\nfrom .events import CTEventScraper\n\nsettings = {\n    'SCRAPELIB_RPM': 20\n}\n\n\nclass Connecticut(Jurisdiction):\n    division_id = \"ocd-division/country:us/state:ct\"\n    classification = \"government\"\n    name = \"Connecticut\"\n    url = \"http://www.cga.ct.gov/\"\n    scrapers = {\n        'people': CTPersomScraper,\n        'bills': CTBillScraper,\n        'events': CTEventScraper,\n    }\n    parties = [\n        {'name': 'Republican'},\n        {'name': 'Democratic'}\n    ]\n    legislative_sessions = [\n        {\n            \"_scraped_name\": \"2011\",\n            \"identifier\": \"2011\",\n            \"name\": \"2011 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2012\",\n            \"identifier\": \"2012\",\n            \"name\": \"2012 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2013\",\n            \"identifier\": \"2013\",\n            \"name\": \"2013 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2014\",\n            \"identifier\": \"2014\",\n            \"name\": \"2014 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2015\",\n            \"identifier\": \"2015\",\n            \"name\": \"2015 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2016\",\n            \"end_date\": \"2016-05-04\",\n            \"identifier\": \"2016\",\n            \"name\": \"2016 Regular Session\",\n            \"start_date\": \"2016-02-03\"\n        },\n        {\n            \"_scraped_name\": \"2017\",\n            \"identifier\": \"2017\",\n            \"name\": \"2017 Regular Session\",\n            \"start_date\": \"2017-01-04\",\n            \"end_date\": \"2017-06-07\",\n        },\n    ]\n    ignored_scraped_sessions = [\n        \"2010\",\n        \"2009\",\n        \"2008\",\n        \"2007\",\n        \"2006\",\n        \"2005\"\n    ]\n\n    def get_organizations(self):\n        legislature_name = \"Connecticut General Assembly\"\n        lower_chamber_name = \"House\"\n        lower_seats = 151\n        lower_title = \"Representative\"\n        upper_chamber_name = \"Senate\"\n        upper_seats = 36\n        upper_title = \"Senator\"\n\n        legislature = Organization(name=legislature_name,\n                                   classification=\"legislature\")\n        upper = Organization(upper_chamber_name, classification='upper',\n                             parent_id=legislature._id)\n        lower = Organization(lower_chamber_name, classification='lower',\n                             parent_id=legislature._id)\n\n        for n in range(1, upper_seats+1):\n            upper.add_post(\n                label=str(n), role=upper_title,\n                division_id='{}/sldu:{}'.format(self.division_id, n))\n        for n in range(1, lower_seats+1):\n            lower.add_post(\n                label=str(n), role=lower_title,\n                division_id='{}/sldl:{}'.format(self.division_id, n))\n\n        yield legislature\n        yield upper\n        yield lower\n\n    def get_session_list(self):\n        import scrapelib\n        text = scrapelib.Scraper().get('ftp://ftp.cga.ct.gov').text\n        sessions = [line.split()[-1] for line in text.splitlines()]\n\n        for not_session_name in ('incoming', 'pub', 'CGAAudio', 'rba', 'NCSL', \"apaac\",\n                                 'FOI_1', 'stainedglass', ):\n            sessions.remove(not_session_name)\n        return sessions\n\n    def get_extract_text(self, doc, data):\n        doc = lxml.html.fromstring(data)\n        text = ' '.join(p.text_content() for p in doc.xpath('//body/p'))\n        return text\n", "path": "openstates/ct/__init__.py"}, {"content": "import datetime\n\n\nmetadata = {\n    'name': 'Connecticut',\n    'abbreviation': 'ct',\n    'legislature_name': 'Connecticut General Assembly',\n    'legislature_url': 'http://www.cga.ct.gov/',\n    'capitol_timezone': 'America/New_York',\n    'chambers': {\n        'upper': {'name': 'Senate', 'title': 'Senator'},\n        'lower': {'name': 'House', 'title': 'Representative'},\n    },\n    'terms': [\n        {\n            'name': '2011-2012',\n            'start_year': 2011,\n            'end_year': 2012,\n            'sessions': ['2011', '2012'],\n        },\n        {\n            'name': '2013-2014',\n            'start_year': 2013,\n            'end_year': 2014,\n            'sessions': ['2013', '2014'],\n        },\n        {\n            'name': '2015-2016',\n            'start_year': 2015,\n            'end_year': 2016,\n            'sessions': ['2015', '2016'],\n        },\n        {\n            'name': '2017-2018',\n            'start_year': 2017,\n            'end_year': 2018,\n            'sessions': ['2017'],\n        },\n    ],\n    'session_details': {\n        '2011': {\n            'display_name': '2011 Regular Session',\n            '_scraped_name': '2011',\n        },\n        '2012': {\n            'display_name': '2012 Regular Session',\n            '_scraped_name': '2012',\n        },\n        '2013': {\n            'display_name': '2013 Regular Session',\n            '_scraped_name': '2013',\n        },\n        '2014': {\n            'display_name': '2014 Regular Session',\n            '_scraped_name': '2014',\n        },\n        '2015': {\n            'display_name': '2015 Regular Session',\n            '_scraped_name': '2015',\n        },\n        '2016': {\n            'display_name': '2016 Regular Session',\n            'start_date': datetime.date(2016, 2, 3),\n            'end_date': datetime.date(2016, 5, 4),\n            '_scraped_name': '2016',\n        },\n        '2017': {\n            'display_name': '2017 Regular Session',\n            '_scraped_name': '2017',\n        },\n    },\n    'feature_flags': ['subjects', 'events', 'influenceexplorer'],\n    '_ignored_scraped_sessions': [\n        '2010',\n        '2009',\n        '2008',\n        '2007',\n        '2006',\n        '2005',\n    ],\n}\n", "path": "billy_metadata/ct.py"}], "after_files": [{"content": "import lxml.html\n\nfrom pupa.scrape import Jurisdiction, Organization\nfrom .people import CTPersomScraper\nfrom .bills import CTBillScraper\nfrom .events import CTEventScraper\n\nsettings = {\n    'SCRAPELIB_RPM': 20\n}\n\n\nclass Connecticut(Jurisdiction):\n    division_id = \"ocd-division/country:us/state:ct\"\n    classification = \"government\"\n    name = \"Connecticut\"\n    url = \"http://www.cga.ct.gov/\"\n    scrapers = {\n        'people': CTPersomScraper,\n        'bills': CTBillScraper,\n        'events': CTEventScraper,\n    }\n    parties = [\n        {'name': 'Republican'},\n        {'name': 'Democratic'}\n    ]\n    legislative_sessions = [\n        {\n            \"_scraped_name\": \"2011\",\n            \"identifier\": \"2011\",\n            \"name\": \"2011 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2012\",\n            \"identifier\": \"2012\",\n            \"name\": \"2012 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2013\",\n            \"identifier\": \"2013\",\n            \"name\": \"2013 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2014\",\n            \"identifier\": \"2014\",\n            \"name\": \"2014 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2015\",\n            \"identifier\": \"2015\",\n            \"name\": \"2015 Regular Session\"\n        },\n        {\n            \"_scraped_name\": \"2016\",\n            \"end_date\": \"2016-05-04\",\n            \"identifier\": \"2016\",\n            \"name\": \"2016 Regular Session\",\n            \"start_date\": \"2016-02-03\"\n        },\n        {\n            \"_scraped_name\": \"2017\",\n            \"identifier\": \"2017\",\n            \"name\": \"2017 Regular Session\",\n            \"start_date\": \"2017-01-04\",\n            \"end_date\": \"2017-06-07\",\n        },\n        {\n            \"_scraped_name\": \"2018\",\n            \"identifier\": \"2018\",\n            \"name\": \"2018 Regular Session\",\n            \"start_date\": \"2018-01-10\",\n            \"end_date\": \"2018-05-09\",\n        },\n    ]\n    ignored_scraped_sessions = [\n        \"2010\",\n        \"2009\",\n        \"2008\",\n        \"2007\",\n        \"2006\",\n        \"2005\"\n    ]\n\n    def get_organizations(self):\n        legislature_name = \"Connecticut General Assembly\"\n        lower_chamber_name = \"House\"\n        lower_seats = 151\n        lower_title = \"Representative\"\n        upper_chamber_name = \"Senate\"\n        upper_seats = 36\n        upper_title = \"Senator\"\n\n        legislature = Organization(name=legislature_name,\n                                   classification=\"legislature\")\n        upper = Organization(upper_chamber_name, classification='upper',\n                             parent_id=legislature._id)\n        lower = Organization(lower_chamber_name, classification='lower',\n                             parent_id=legislature._id)\n\n        for n in range(1, upper_seats+1):\n            upper.add_post(\n                label=str(n), role=upper_title,\n                division_id='{}/sldu:{}'.format(self.division_id, n))\n        for n in range(1, lower_seats+1):\n            lower.add_post(\n                label=str(n), role=lower_title,\n                division_id='{}/sldl:{}'.format(self.division_id, n))\n\n        yield legislature\n        yield upper\n        yield lower\n\n    def get_session_list(self):\n        import scrapelib\n        text = scrapelib.Scraper().get('ftp://ftp.cga.ct.gov').text\n        sessions = [line.split()[-1] for line in text.splitlines()]\n\n        for not_session_name in ('incoming', 'pub', 'CGAAudio', 'rba', 'NCSL', \"apaac\",\n                                 'FOI_1', 'stainedglass', ):\n            sessions.remove(not_session_name)\n        return sessions\n\n    def get_extract_text(self, doc, data):\n        doc = lxml.html.fromstring(data)\n        text = ' '.join(p.text_content() for p in doc.xpath('//body/p'))\n        return text\n", "path": "openstates/ct/__init__.py"}, {"content": "import datetime\n\n\nmetadata = {\n    'name': 'Connecticut',\n    'abbreviation': 'ct',\n    'legislature_name': 'Connecticut General Assembly',\n    'legislature_url': 'http://www.cga.ct.gov/',\n    'capitol_timezone': 'America/New_York',\n    'chambers': {\n        'upper': {'name': 'Senate', 'title': 'Senator'},\n        'lower': {'name': 'House', 'title': 'Representative'},\n    },\n    'terms': [\n        {\n            'name': '2011-2012',\n            'start_year': 2011,\n            'end_year': 2012,\n            'sessions': ['2011', '2012'],\n        },\n        {\n            'name': '2013-2014',\n            'start_year': 2013,\n            'end_year': 2014,\n            'sessions': ['2013', '2014'],\n        },\n        {\n            'name': '2015-2016',\n            'start_year': 2015,\n            'end_year': 2016,\n            'sessions': ['2015', '2016'],\n        },\n        {\n            'name': '2017-2018',\n            'start_year': 2017,\n            'end_year': 2018,\n            'sessions': ['2017', '2018'],\n        },\n    ],\n    'session_details': {\n        '2011': {\n            'display_name': '2011 Regular Session',\n            '_scraped_name': '2011',\n        },\n        '2012': {\n            'display_name': '2012 Regular Session',\n            '_scraped_name': '2012',\n        },\n        '2013': {\n            'display_name': '2013 Regular Session',\n            '_scraped_name': '2013',\n        },\n        '2014': {\n            'display_name': '2014 Regular Session',\n            '_scraped_name': '2014',\n        },\n        '2015': {\n            'display_name': '2015 Regular Session',\n            '_scraped_name': '2015',\n        },\n        '2016': {\n            'display_name': '2016 Regular Session',\n            'start_date': datetime.date(2016, 2, 3),\n            'end_date': datetime.date(2016, 5, 4),\n            '_scraped_name': '2016',\n        },\n        '2017': {\n            'display_name': '2017 Regular Session',\n            '_scraped_name': '2017',\n        },\n        '2018': {\n            'display_name': '2018 Regular Session',\n            'start_date': datetime.date(2018, 1, 10),\n            'end_date': datetime.date(2018, 5, 9),\n            '_scraped_name': '2018',\n        },\n    },\n    'feature_flags': ['subjects', 'events', 'influenceexplorer'],\n    '_ignored_scraped_sessions': [\n        '2010',\n        '2009',\n        '2008',\n        '2007',\n        '2006',\n        '2005',\n    ],\n}\n", "path": "billy_metadata/ct.py"}]}