|
D>
|
ca
|
2026-09-16 00:27:51
|
2026-11-07 00:48:35
|
IndexError: list index out of range
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca/people.py", line 55, in scrape
yield from self.scrape_people(rows, gender, seen_urls)
File "/src/scrapers-ca-app/scrapers/ca/people.py", line 121, in scrape_people
roles = roles_node[0].xpath('//h4[contains(., "Offices and Roles")]/following-sibling::ul[1]/li/text()')
IndexError: list index out of range
|
|
C
|
ca_ab
|
2026-11-07 00:57:48
|
2026-11-07 00:57:49
|
|
|
A
|
ca_ab_airdrie
|
2026-11-07 00:54:17
|
2026-11-07 00:54:17
|
|
|
A
|
ca_ab_banff
|
2026-11-07 01:08:08
|
2026-11-07 01:08:08
|
|
|
C
|
ca_ab_calgary
|
2026-11-07 01:04:52
|
2026-11-07 01:04:52
|
|
|
A
|
ca_ab_canmore
|
2026-11-07 00:47:57
|
2026-11-07 00:47:57
|
|
|
A
|
ca_ab_cochrane
|
2026-11-07 00:50:37
|
2026-11-07 00:50:37
|
|
D>
01:09:48 WARNING pupa: validation of Membership eb271216-da47-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value '' for field '<obj>.contact_details[0].value' cannot be blank'
|
ca_ab_edmonton
|
2026-07-30 01:38:16
|
2026-11-07 01:09:48
|
Value '' for field '<obj>.contact_details[0].value' cannot be blank'
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 175, in validate
validator.validate(self.as_dict(), schema)
File "/usr/local/lib/python3.10/site-packages/validictory/validator.py", line 616, in validate
raise MultipleValidationError(self._errors)
validictory.validator.MultipleValidationError: 1 validation errors:
Value '' for field '<obj>.contact_details[0].value' cannot be blank'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 104, in do_scrape
self.save_object(obj)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 93, in save_object
self.save_object(obj)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 89, in save_object
raise ve
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 85, in save_object
obj.validate()
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 177, in validate
raise ScrapeValueError('validation of {} {} failed: {}'.format(
pupa.exceptions.ScrapeValueError: validation of Membership eb271216-da47-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value '' for field '<obj>.contact_details[0].value' cannot be blank'
|
|
A
|
ca_ab_fort_saskatchewan
|
2026-11-07 01:04:28
|
2026-11-07 01:04:28
|
|
|
C
|
ca_ab_grande_prairie
|
2026-11-07 00:54:35
|
2026-11-07 00:54:35
|
|
|
C
|
ca_ab_grande_prairie_county_no_1
|
2026-11-07 00:48:58
|
2026-11-07 00:48:58
|
|
|
A
|
ca_ab_leduc
|
2026-11-07 00:47:55
|
2026-11-07 00:47:55
|
|
|
C
|
ca_ab_lethbridge
|
2026-11-07 01:01:29
|
2026-11-07 01:01:29
|
|
|
A
|
ca_ab_medicine_hat
|
2026-11-07 01:08:09
|
2026-11-07 01:08:09
|
|
|
A
|
ca_ab_okotoks
|
2026-11-07 00:50:12
|
2026-11-07 00:50:12
|
|
|
A
|
ca_ab_red_deer
|
2026-11-07 01:08:24
|
2026-11-07 01:08:24
|
|
|
A
|
ca_ab_spruce_grove
|
2026-11-07 00:50:36
|
2026-11-07 00:50:36
|
|
|
A
|
ca_ab_st_albert
|
2026-11-07 00:48:28
|
2026-11-07 00:48:28
|
|
D>
00:57:49 WARNING scrapelib: sleeping for 10 seconds before retry
00:57:59 WARNING scrapelib: sleeping for 20 seconds before retry
00:58:19 WARNING scrapelib: sleeping for 40 seconds before retry
|
ca_ab_strathcona_county
|
2026-09-24 01:00:16
|
2026-11-07 00:58:59
|
scrapelib.HTTPError: 500 while retrieving https://opendata.arcgis.com/api/v3/datasets/b7b1aa0fbad6445c8aa8ab66cb13347f_0/dow…
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/utils.py", line 413, in scrape
reader = self.csv_reader(
File "/src/scrapers-ca-app/scrapers/utils.py", line 256, in csv_reader
response = self.get(url, **kwargs)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 500 while retrieving https://opendata.arcgis.com/api/v3/datasets/b7b1aa0fbad6445c8aa8ab66cb13347f_0/downloads/data?format=csv&spatialRefId=3857&where=1%3D1
|
|
C
|
ca_ab_wood_buffalo
|
2026-11-07 01:05:03
|
2026-11-07 01:05:03
|
|
|
C
|
ca_bc
|
2026-11-07 00:46:28
|
2026-11-07 00:46:28
|
|
|
C
|
ca_bc_abbotsford
|
2026-11-07 00:47:53
|
2026-11-07 00:47:53
|
|
|
C
|
ca_bc_burnaby
|
2026-11-07 00:46:43
|
2026-11-07 00:46:43
|
|
|
A
|
ca_bc_campbell_river
|
2026-11-07 01:06:28
|
2026-11-07 01:06:28
|
|
|
A
|
ca_bc_chilliwack
|
2026-11-07 00:48:44
|
2026-11-07 00:48:44
|
|
|
D>
|
ca_bc_coquitlam
|
2026-08-09 01:20:55
|
2026-11-07 00:59:14
|
AssertionError: No councillors found
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_coquitlam/people.py", line 20, in scrape
assert len(councillors), "No councillors found"
AssertionError: No councillors found
|
D>
01:01:59 WARNING scrapelib: sleeping for 10 seconds before retry
01:02:09 WARNING scrapelib: sleeping for 20 seconds before retry
01:02:30 WARNING scrapelib: sleeping for 40 seconds before retry
|
ca_bc_courtenay
|
2026-10-20 00:24:59
|
2026-11-07 01:03:10
|
scrapelib.HTTPError: 403 while retrieving https://www.courtenay.ca/city-hall/mayor-and-council/contact-council
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_courtenay/people.py", line 20, in scrape
page = self.lxmlize(CONTACT_PAGE, verify=False)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 403 while retrieving https://www.courtenay.ca/city-hall/mayor-and-council/contact-council
|
|
D>
|
ca_bc_delta
|
2026-11-03 00:27:38
|
2026-11-07 00:54:34
|
Exception: No phone pattern in Councillor Daniel Boisvert Daniel Boisvert has lived in Tsawwassen for the past 12 years and…
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_delta/people.py", line 40, in scrape
phone = self.get_phone(member, area_codes=[604, 778])
File "/src/scrapers-ca-app/scrapers/utils.py", line 191, in get_phone
raise Exception(f"No phone pattern in {node.text_content()}")
Exception: No phone pattern in Councillor Daniel Boisvert Daniel Boisvert has lived in Tsawwassen for the past 12 years and grew up in Ladner. He has called Delta home for more than 50 years. Daniel has two children, Noah and Abby, who are currently attending University.Daniel was commissioned as Notary Public in May 2008 and has a busy legal practice in Delta.Daniel has a bachelor’s degree in Commerce from Royal Roads University and studied at the Sauder School of Business at UBC to become a Notary Public where he received both the Robert Reid award in Property Law and the BDO Dunwoody Award for achieving the highest marks in both course work and examination.Daniel is a Director of the Society of Notaries Public, the public regulator of Notaries. He is also the past president of the BC Notaries Association, an advocacy group for BC Notaries.Daniel is also a past Director of the Heron Hospice Society of Delta, which provides compassionate care to individuals facing life-limiting illness and support to people who are grieving the loss of a loved one. In October 2018, Daniel was elected to the Delta Board of Education, where he last held the position of Vice-Chair of the Board. Daniel believes the enhancement of public education is vital to the positive advancement of our society.In October 2022, Daniel was elected to Delta City Council to serve a four-year term. Daniel was re-elected to another 4-year term in 2026.Email:dboisvert@delta.ca
|
|
D>
|
ca_bc_kamloops
|
2026-11-03 00:21:32
|
2026-11-07 00:48:31
|
AssertionError: Expected 9 council members
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_kamloops/people.py", line 28, in scrape
assert len(members) == 9, "Expected 9 council members"
AssertionError: Expected 9 council members
|
|
C
|
ca_bc_kelowna
|
2026-11-07 00:50:28
|
2026-11-07 00:50:28
|
|
|
A
|
ca_bc_langford
|
2026-11-07 01:03:37
|
2026-11-07 01:03:37
|
|
|
C
|
ca_bc_langley
|
2026-11-07 00:51:00
|
2026-11-07 00:51:00
|
|
D>
01:10:42 WARNING scrapelib: sleeping for 10 seconds before retry
01:10:52 WARNING scrapelib: sleeping for 20 seconds before retry
01:11:12 WARNING scrapelib: sleeping for 40 seconds before retry
|
ca_bc_langley_city
|
2026-11-03 01:07:44
|
2026-11-07 01:11:52
|
scrapelib.HTTPError: 403 while retrieving https://www.langleycity.ca/city-hall/city-council
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_langley_city/people.py", line 11, in scrape
page = self.lxmlize(COUNCIL_PAGE)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 403 while retrieving https://www.langleycity.ca/city-hall/city-council
|
D>
00:51:01 WARNING pupa: validation of CanadianPerson 4db25074-da45-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value "Bob D'Eith, KC" for field '<obj>.name' does not match regular expression 'regex.Regex('\\A(?!(?:Chair|Commissioner|Conseiller|Councillor|Deputy|Dr|M|Maire|Mayor|Miss|Mme|Mr|Mrs|Ms|Regional|Warden)\\b)(?:(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)(?:\'|-| - | ))+(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)\\Z', flags=regex.V0)'
|
ca_bc_maple_ridge
|
2026-11-03 00:24:00
|
2026-11-07 00:51:01
|
Value "Bob D'Eith, KC" for field '<obj>.name' does not match regular expression 'regex.Regex('\\A(?!(?:Chair|Commissioner|Co…
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 175, in validate
validator.validate(self.as_dict(), schema)
File "/usr/local/lib/python3.10/site-packages/validictory/validator.py", line 616, in validate
raise MultipleValidationError(self._errors)
validictory.validator.MultipleValidationError: 1 validation errors:
Value "Bob D'Eith, KC" for field '<obj>.name' does not match regular expression 'regex.Regex('\\A(?!(?:Chair|Commissioner|Conseiller|Councillor|Deputy|Dr|M|Maire|Mayor|Miss|Mme|Mr|Mrs|Ms|Regional|Warden)\\b)(?:(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)(?:\'|-| - | ))+(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)\\Z', flags=regex.V0)'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 104, in do_scrape
self.save_object(obj)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 89, in save_object
raise ve
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 85, in save_object
obj.validate()
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 177, in validate
raise ScrapeValueError('validation of {} {} failed: {}'.format(
pupa.exceptions.ScrapeValueError: validation of CanadianPerson 4db25074-da45-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value "Bob D'Eith, KC" for field '<obj>.name' does not match regular expression 'regex.Regex('\\A(?!(?:Chair|Commissioner|Conseiller|Councillor|Deputy|Dr|M|Maire|Mayor|Miss|Mme|Mr|Mrs|Ms|Regional|Warden)\\b)(?:(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)(?:\'|-| - | ))+(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)\\Z', flags=regex.V0)'
|
|
A
|
ca_bc_mission
|
2026-11-07 00:59:00
|
2026-11-07 00:59:00
|
|
|
D>
|
ca_bc_nanaimo
|
2026-07-29 01:23:15
|
2026-11-07 01:09:36
|
AssertionError: Expected 9 council members
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_nanaimo/people.py", line 16, in scrape
assert len(members) == 9, "Expected 9 council members"
AssertionError: Expected 9 council members
|
|
C
|
ca_bc_new_westminster
|
2026-11-07 01:04:39
|
2026-11-07 01:04:39
|
|
|
A
|
ca_bc_north_vancouver
|
2026-11-07 00:48:45
|
2026-11-07 00:48:45
|
|
|
D>
|
ca_bc_north_vancouver_city
|
2026-11-04 00:16:21
|
2026-11-07 00:47:55
|
AssertionError: Expected 7 council profiles
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_north_vancouver_city/people.py", line 20, in scrape
assert len(urls) == 7, "Expected 7 council profiles"
AssertionError: Expected 7 council profiles
|
|
A
|
ca_bc_penticton
|
2026-11-07 00:43:40
|
2026-11-07 00:43:40
|
|
|
D>
|
ca_bc_port_coquitlam
|
2026-08-12 01:13:40
|
2026-11-07 01:06:40
|
AssertionError: Expected 7 council members
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_port_coquitlam/people.py", line 13, in scrape
assert len(members) == 7, "Expected 7 council members"
AssertionError: Expected 7 council members
|
|
D>
|
ca_bc_port_moody
|
2026-11-03 01:07:41
|
2026-11-07 01:10:40
|
AssertionError: No council members found
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_port_moody/people.py", line 28, in scrape
assert members, "No council members found"
AssertionError: No council members found
|
|
A
|
ca_bc_prince_george
|
2026-11-07 01:03:10
|
2026-11-07 01:03:10
|
|
|
D>
|
ca_bc_richmond
|
2026-11-06 01:15:05
|
2026-11-07 01:04:31
|
IndexError: list index out of range
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_richmond/people.py", line 17, in scrape
photo_url = page.xpath('//img[@class="float-right"]/@src')[0]
IndexError: list index out of range
|
|
C
|
ca_bc_saanich
|
2026-11-07 00:46:32
|
2026-11-07 00:46:32
|
|
|
D>
|
ca_bc_surrey
|
2026-11-03 00:48:16
|
2026-11-07 00:59:19
|
IndexError: list index out of range
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_surrey/people.py", line 18, in scrape
photo_url = member.xpath(".//figure//img/@src")[0]
IndexError: list index out of range
|
|
D>
|
ca_bc_tofino
|
2026-11-04 00:40:11
|
2026-11-07 01:09:39
|
AssertionError: Expected mayor and 6 councillors
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_tofino/people.py", line 27, in scrape
assert len(members) == 7, "Expected mayor and 6 councillors"
AssertionError: Expected mayor and 6 councillors
|
|
C
|
ca_bc_vancouver
|
2026-11-07 01:06:42
|
2026-11-07 01:06:42
|
|
|
A
|
ca_bc_vernon
|
2026-11-07 00:46:23
|
2026-11-07 00:46:23
|
|
|
D>
|
ca_bc_victoria
|
2026-11-05 01:34:53
|
2026-11-07 01:08:24
|
IndexError: list index out of range
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_bc_victoria/people.py", line 18, in scrape
photo = councillor.xpath(".//img/@src")[0]
IndexError: list index out of range
|
D>
01:05:28 WARNING pupa: validation of CanadianPerson 5279e818-da47-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value 'Honoured to be serving his inaugural term as West Kelowna Mayor, Stephen Johnston' for field '<obj>.name' does not match regular expression 'regex.Regex('\\A(?!(?:Chair|Commissioner|Conseiller|Councillor|Deputy|Dr|M|Maire|Mayor|Miss|Mme|Mr|Mrs|Ms|Regional|Warden)\\b)(?:(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)(?:\'|-| - | ))+(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)\\Z', flags=regex.V0)'
|
ca_bc_west_kelowna
|
2026-11-03 00:52:59
|
2026-11-07 01:05:28
|
Value 'Honoured to be serving his inaugural term as West Kelowna Mayor, Stephen Johnston' for field '<obj>.name' does not ma…
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 175, in validate
validator.validate(self.as_dict(), schema)
File "/usr/local/lib/python3.10/site-packages/validictory/validator.py", line 616, in validate
raise MultipleValidationError(self._errors)
validictory.validator.MultipleValidationError: 1 validation errors:
Value 'Honoured to be serving his inaugural term as West Kelowna Mayor, Stephen Johnston' for field '<obj>.name' does not match regular expression 'regex.Regex('\\A(?!(?:Chair|Commissioner|Conseiller|Councillor|Deputy|Dr|M|Maire|Mayor|Miss|Mme|Mr|Mrs|Ms|Regional|Warden)\\b)(?:(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)(?:\'|-| - | ))+(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)\\Z', flags=regex.V0)'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 104, in do_scrape
self.save_object(obj)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 89, in save_object
raise ve
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 85, in save_object
obj.validate()
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 177, in validate
raise ScrapeValueError('validation of {} {} failed: {}'.format(
pupa.exceptions.ScrapeValueError: validation of CanadianPerson 5279e818-da47-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value 'Honoured to be serving his inaugural term as West Kelowna Mayor, Stephen Johnston' for field '<obj>.name' does not match regular expression 'regex.Regex('\\A(?!(?:Chair|Commissioner|Conseiller|Councillor|Deputy|Dr|M|Maire|Mayor|Miss|Mme|Mr|Mrs|Ms|Regional|Warden)\\b)(?:(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)(?:\'|-| - | ))+(?:(?:\\p{Lu}\\.)+|\\p{Lu}+|(?:Jr|Rev|Sr|St)\\.|da|de|den|der|la|van|von|[("](?:\\p{Lu}+|\\p{Lu}\\p{Ll}*(?:-\\p{Lu}\\p{Ll}*)*)[)"]|(?:D\'|d\'|De|de|Des|Di|Du|L\'|La|Le|Mac|Mc|O\'|San|St\\.|Van|Vander?|van|vanden)?\\p{Lu}\\p{Ll}+|\\p{Lu}\\p{Ll}+Anne?|Marie\\p{Lu}\\p{Ll}+|[ᐁᐃᐄᐅᐆᐊᐋᐯᐱᐲᐳᐴᐸᐹᑉᑊᑌᑎᑏᑐᑑᑕᑖᑦᑫᑭᑮᑯᑰᑲᑳᒃᒉᒋᒌᒍᒎᒐᒑᒡᒣᒥᒦᒧᒨᒪᒫᒻᓀᓂᓃᓄᓅᓇᓈᓐᓓᓕᓖᓗᓘᓚᓛᓪᓭᓯᓰᓱᓲᓴᓵᔅᔦᔨᔩᔪᔫᔭᔮᔾᕂᕆᕇᕈᕉᕋᕌᕐᕓᕕᕖᕗᕘᕙᕚᕝᕴᕵᕶᕷᕸᕹᕺᕻᕼᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᖖᖠᖡᖢᖣᖤᖥᖦᖨᖩᖪᖫᖬᖭᖮᖯᙯᙰᙱᙲᙳᙴᙵᙶ\U00011ab0\U00011ab1\U00011ab2\U00011ab3\U00011ab4\U00011ab5\U00011ab6\U00011ab7\U00011ab8\U00011ab9\U00011aba\U00011abb]+|Á\'a:líya|A\'aliya|Ch\'ng|Prud\'homme|Qwulti\'stunaat|Ya\'ara|D!ONNE|ChiefCalf|IsaBelle)\\Z', flags=regex.V0)'
|
|
A
|
ca_bc_west_vancouver
|
2026-11-07 01:05:22
|
2026-11-07 01:05:22
|
|
|
A
|
ca_bc_whistler
|
2026-11-07 01:04:37
|
2026-11-07 01:04:37
|
|
D>
01:10:21 ERROR ca_candidates.people:
01:10:22 ERROR ca_candidates.people:
01:10:24 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/2 (https://www.greenparty.ca/en/candidates/page/2)
01:10:25 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/3 (https://www.greenparty.ca/en/candidates/page/3)
01:10:26 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/4 (https://www.greenparty.ca/en/candidates/page/4)
01:10:27 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/5 (https://www.greenparty.ca/en/candidates/page/5)
01:10:28 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/6 (https://www.greenparty.ca/en/candidates/page/6)
01:10:29 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/7 (https://www.greenparty.ca/en/candidates/page/7)
01:10:30 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/8 (https://www.greenparty.ca/en/candidates/page/8)
01:10:31 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/9 (https://www.greenparty.ca/en/candidates/page/9)
01:10:32 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/10 (https://www.greenparty.ca/en/candidates/page/10)
01:10:33 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/11 (https://www.greenparty.ca/en/candidates/page/11)
01:10:34 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/12 (https://www.greenparty.ca/en/candidates/page/12)
01:10:35 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/13 (https://www.greenparty.ca/en/candidates/page/13)
01:10:36 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/14 (https://www.greenparty.ca/en/candidates/page/14)
01:10:37 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/15 (https://www.greenparty.ca/en/candidates/page/15)
01:10:38 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/16 (https://www.greenparty.ca/en/candidates/page/16)
01:10:39 WARNING ca_candidates.people: 404 while retrieving https://www.greenparty.ca/en/candidates/page/17 (https://www.greenparty.ca/en/candidates/page/17)
|
ca_candidates
|
2026-08-31 01:06:11
|
2026-11-07 01:10:39
|
AssertionError: No Green candidates found
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_candidates/people.py", line 162, in scrape
for p in getattr(self, f"scrape_{party}")():
File "/src/scrapers-ca-app/scrapers/ca_candidates/people.py", line 393, in scrape_green
assert len(candidates), "No Green candidates found"
AssertionError: No Green candidates found
|
|
C
|
ca_mb
|
2026-11-07 00:54:14
|
2026-11-07 00:54:14
|
|
|
D>
|
ca_mb_brandon
|
2026-10-29 01:26:23
|
2026-11-07 01:09:44
|
AssertionError: Expected 11 council members
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_mb_brandon/people.py", line 17, in scrape
assert len(members) == 11, "Expected 11 council members"
AssertionError: Expected 11 council members
|
|
C
|
ca_mb_winnipeg
|
2026-11-07 00:48:47
|
2026-11-07 00:48:47
|
|
|
C
|
ca_nb
|
2026-11-07 01:04:27
|
2026-11-07 01:04:27
|
|
|
A
|
ca_nb_dieppe
|
2026-11-07 01:06:29
|
2026-11-07 01:06:29
|
|
|
C
|
ca_nb_fredericton
|
2026-11-07 01:01:19
|
2026-11-07 01:01:19
|
|
|
C
|
ca_nb_moncton
|
2026-11-07 01:03:36
|
2026-11-07 01:03:36
|
|
|
C
|
ca_nb_saint_john
|
2026-11-07 01:05:08
|
2026-11-07 01:05:08
|
|
|
C
|
ca_nl
|
2026-11-07 00:46:26
|
2026-11-07 00:46:26
|
|
|
A
|
ca_nl_conception_bay_south
|
2026-11-07 00:47:57
|
2026-11-07 00:47:57
|
|
|
C
|
ca_nl_st_john_s
|
2026-11-07 00:46:57
|
2026-11-07 00:46:57
|
|
|
C
|
ca_ns
|
2026-11-07 00:55:39
|
2026-11-07 00:55:39
|
|
|
C
|
ca_ns_cape_breton
|
2026-11-07 01:01:00
|
2026-11-07 01:01:00
|
|
|
C
|
ca_ns_halifax
|
2026-11-07 01:12:12
|
2026-11-07 01:12:12
|
|
|
D>
|
ca_nt
|
2026-08-05 01:04:18
|
2026-11-07 00:59:36
|
IndexError: list index out of range
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_nt/people.py", line 74, in scrape
handle_address(p, address_section, "legislature")
File "/src/scrapers-ca-app/scrapers/ca_nt/people.py", line 42, in handle_address
+ contact.xpath('./div[contains(@class, "office-address-wrapper")]/div[2]/div[2]')[0]
IndexError: list index out of range
|
|
D>
|
ca_nt_yellowknife
|
2026-11-02 00:27:25
|
2026-11-07 00:46:23
|
pupa.exceptions.UnresolvedIdError: cannot resolve pseudo id to Post: ~{"label": "Yellowknife (seat 9)", "organization__class…
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 307, in do_handle
report['import'] = self.do_import(juris, args)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 211, in do_import
report.update(membership_importer.import_directory(datadir))
File "/usr/local/lib/python3.10/site-packages/pupa/importers/base.py", line 190, in import_directory
return self.import_data(json_stream())
File "/usr/local/lib/python3.10/site-packages/pupa/importers/base.py", line 227, in import_data
obj_id, what = self.import_item(data)
File "/usr/local/lib/python3.10/site-packages/pupa/importers/base.py", line 247, in import_item
data = self.prepare_for_db(data)
File "/usr/local/lib/python3.10/site-packages/pupa/importers/memberships.py", line 50, in prepare_for_db
data['post_id'] = self.post_importer.resolve_json_id(data['post_id'])
File "/usr/local/lib/python3.10/site-packages/pupa/importers/base.py", line 165, in resolve_json_id
raise UnresolvedIdError(errmsg)
pupa.exceptions.UnresolvedIdError: cannot resolve pseudo id to Post: ~{"label": "Yellowknife (seat 9)", "organization__classification": "legislature", "role": "Councillor"}
|
|
A
|
ca_nu
|
2026-11-07 01:05:59
|
2026-11-07 01:05:59
|
|
|
A
|
ca_nu_iqaluit
|
2026-11-07 01:08:07
|
2026-11-07 01:08:07
|
|
|
C
|
ca_on
|
2026-11-07 00:45:47
|
2026-11-07 00:45:47
|
|
|
C
|
ca_on_ajax
|
2026-11-07 01:06:14
|
2026-11-07 01:06:14
|
|
D>
01:08:25 WARNING scrapelib: sleeping for 10 seconds before retry
01:08:35 WARNING scrapelib: sleeping for 20 seconds before retry
01:08:55 WARNING scrapelib: sleeping for 40 seconds before retry
|
ca_on_barrie
|
2026-07-31 01:16:17
|
2026-11-07 01:09:35
|
scrapelib.HTTPError: 403 while retrieving https://www.barrie.ca/government/council-committees/city-council/mayor
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_barrie/people.py", line 13, in scrape
page = self.lxmlize(url)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 403 while retrieving https://www.barrie.ca/government/council-committees/city-council/mayor
|
|
C
|
ca_on_belleville
|
2026-11-07 01:09:43
|
2026-11-07 01:09:43
|
|
|
A
|
ca_on_bradford_west_gwillimbury
|
2026-11-07 01:04:28
|
2026-11-07 01:04:28
|
|
|
C
|
ca_on_brampton
|
2026-11-07 01:05:36
|
2026-11-07 01:05:36
|
|
|
C
|
ca_on_brantford
|
2026-11-07 01:09:41
|
2026-11-07 01:09:41
|
|
|
D>
|
ca_on_burlington
|
2026-07-28 00:54:13
|
2026-11-07 00:46:24
|
AssertionError: No councillors found
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_burlington/people.py", line 15, in scrape
assert len(councillors), "No councillors found"
AssertionError: No councillors found
|
|
C
|
ca_on_caledon
|
2026-11-07 00:46:21
|
2026-11-07 00:46:21
|
|
|
C
|
ca_on_cambridge
|
2026-11-07 01:12:14
|
2026-11-07 01:12:14
|
|
|
A
|
ca_on_centre_wellington
|
2026-11-07 01:06:00
|
2026-11-07 01:06:00
|
|
|
C
|
ca_on_chatham_kent
|
2026-11-07 00:53:12
|
2026-11-07 00:53:12
|
|
|
C
|
ca_on_clarington
|
2026-11-07 00:47:14
|
2026-11-07 00:47:14
|
|
|
A
|
ca_on_cornwall
|
2026-11-07 01:06:41
|
2026-11-07 01:06:41
|
|
|
C
|
ca_on_fort_erie
|
2026-11-07 00:54:34
|
2026-11-07 00:54:34
|
|
|
C
|
ca_on_georgina
|
2026-11-07 01:09:53
|
2026-11-07 01:09:53
|
|
|
C
|
ca_on_greater_sudbury
|
2026-11-07 01:05:21
|
2026-11-07 01:05:21
|
|
|
C
|
ca_on_grimsby
|
2026-11-07 00:51:03
|
2026-11-07 00:51:03
|
|
|
C
|
ca_on_guelph
|
2026-11-07 01:11:54
|
2026-11-07 01:11:54
|
|
|
C
|
ca_on_haldimand_county
|
2026-11-07 00:46:57
|
2026-11-07 00:46:57
|
|
|
A
|
ca_on_halton_hills
|
2026-11-07 00:54:37
|
2026-11-07 00:54:37
|
|
|
D>
|
ca_on_hamilton
|
2026-09-14 00:46:36
|
2026-11-07 01:06:26
|
Exception: No email node in b'<div class="section container-md image--right post-card post-card--large bg--#FFFFFF" style="b…
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_hamilton/people.py", line 22, in scrape
yield self.councillor_data(url)
File "/src/scrapers-ca-app/scrapers/ca_on_hamilton/people.py", line 33, in councillor_data
email = self.get_email(info_node)
File "/src/scrapers-ca-app/scrapers/utils.py", line 143, in get_email
raise Exception(f"No email node in {etree.tostring(node)}")
Exception: No email node in b'<div class="section container-md image--right post-card post-card--large bg--#FFFFFF" style="background-color: #FFFFFF">\n <div class="row">\n <div class="image">\n <article class="media media--type-image media--view-mode-post-card">\n \n <picture>\n <source srcset="/sites/default/files/styles/post_card_xxl_1x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=VztC07io 1x, /sites/default/files/styles/post_card_xxl_2x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=S4PoRgXN 2x" media="(min-width: 1400px)" type="image/jpeg" width="700" height="591"/>\n <source srcset="/sites/default/files/styles/post_card_xl_1x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=DICmBaf_ 1x, /sites/default/files/styles/post_card_xl_2x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=CDSHBGhB 2x" media="(min-width: 1200px) and (max-width: 1399.98px)" type="image/jpeg" width="700" height="591"/>\n <source srcset="/sites/default/files/styles/post_card_lg_1x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=WiNkg7Ei 1x, /sites/default/files/styles/post_card_lg_2x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=DXRmRk1L 2x" media="(min-width: 992px) and (max-width: 1199.98px)" type="image/jpeg" width="700" height="591"/>\n <source srcset="/sites/default/files/styles/post_card_md_1x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=aeJyWGCF 1x, /sites/default/files/styles/post_card_md_2x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=BX6KrtRM 2x" media="(min-width: 768px) and (max-width: 991.98px)" type="image/jpeg" width="700" height="591"/>\n <source srcset="/sites/default/files/styles/post_card_sm_1x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=6Fi9dx9J 1x, /sites/default/files/styles/post_card_sm_2x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=e9dke7Ii 2x" media="(min-width: 576px) and (max-width: 767.98px)" type="image/jpeg" width="315" height="338"/>\n <source srcset="/sites/default/files/styles/post_card_xs_1x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=YSna7GiJ 1x, /sites/default/files/styles/post_card_xs_2x/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=JOdZmO8E 2x" media="(max-width: 575.98px)" type="image/jpeg" width="315" height="338"/>\n <img loading="lazy" src="https://www.hamilton.ca/sites/default/files/styles/hero_lg/public/2022-11/Postcard-CityHall.jpg.jpeg?h=1df8a340&itok=sAupJ2aB" width="1200" height="387" alt="Hamilton City Hall during the day" class="img-fluid"/>\n\n </picture>\n\n\n </article>\n\n\n </div>\n\n <div class="content-wrapper">\n <div class="content">\n <div class="pre-title">\n Councillor\n </div>\n <h2 class="title">\n Vacant\n </h2>\n <div class="card-content">\n <p>Hamilton City Hall<br/>2nd floor - 71 Main Street West<br/>Hamilton, Ontario L8P 4Y5</p>\n </div>\n <div class="cta">\n \n\n\t\n\n\n <div class="cta--content cta--type-primary-dark">\n <div class="cta--link"><a href="https://bm-public-hamilton.escribemeetings.com/Member/MemberDetail/20">Committee & Board membership</a></div>\n </div>\n\n\n </div>\n </div>\n </div>\n </div>\n</div>\n\n '
|
|
C
|
ca_on_huron
|
2026-11-07 00:43:31
|
2026-11-07 00:43:31
|
|
|
A
|
ca_on_innisfil
|
2026-11-07 01:04:32
|
2026-11-07 01:04:32
|
|
|
C
|
ca_on_kawartha_lakes
|
2026-11-07 01:09:50
|
2026-11-07 01:09:50
|
|
|
C
|
ca_on_king
|
2026-11-07 00:54:41
|
2026-11-07 00:54:41
|
|
|
C
|
ca_on_kingston
|
2026-11-07 01:10:17
|
2026-11-07 01:10:17
|
|
|
C
|
ca_on_kitchener
|
2026-11-07 01:04:53
|
2026-11-07 01:04:53
|
|
|
D>
|
ca_on_lambton
|
2026-10-08 00:39:24
|
2026-11-07 00:54:15
|
scrapelib.HTTPError: 404 while retrieving https://www.lambtoncounty.ca/en/county-government/councillors.aspx
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_lambton/people.py", line 11, in scrape
page = self.lxmlize(COUNCIL_PAGE)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 404 while retrieving https://www.lambtoncounty.ca/en/county-government/councillors.aspx
|
|
C
|
ca_on_lasalle
|
2026-11-07 00:50:27
|
2026-11-07 00:50:27
|
|
|
C
|
ca_on_lincoln
|
2026-11-07 00:48:46
|
2026-11-07 00:48:46
|
|
|
C
|
ca_on_london
|
2026-11-07 00:54:37
|
2026-11-07 00:54:37
|
|
|
C
|
ca_on_markham
|
2026-11-07 00:47:12
|
2026-11-07 00:47:12
|
|
|
D>
|
ca_on_milton
|
2026-10-07 00:26:36
|
2026-11-07 01:09:55
|
scrapelib.HTTPError: 404 while retrieving https://www.milton.ca/en/town-hall/councillors.aspx
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_milton/people.py", line 10, in scrape
page = self.lxmlize(COUNCIL_PAGE)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 404 while retrieving https://www.milton.ca/en/town-hall/councillors.aspx
|
|
C
|
ca_on_mississauga
|
2026-11-07 01:06:13
|
2026-11-07 01:06:13
|
|
|
C
|
ca_on_newmarket
|
2026-11-07 01:03:11
|
2026-11-07 01:03:11
|
|
|
C
|
ca_on_niagara
|
2026-11-07 01:08:12
|
2026-11-07 01:08:12
|
|
|
A
|
ca_on_niagara_falls
|
2026-11-07 00:55:40
|
2026-11-07 00:55:40
|
|
|
C
|
ca_on_niagara_on_the_lake
|
2026-11-07 00:51:12
|
2026-11-07 00:51:12
|
|
|
A
|
ca_on_norfolk_county
|
2026-11-07 01:05:00
|
2026-11-07 01:05:00
|
|
|
A
|
ca_on_north_bay
|
2026-11-07 01:05:20
|
2026-11-07 01:05:20
|
|
|
C
|
ca_on_north_dumfries
|
2026-11-07 00:48:36
|
2026-11-07 00:48:36
|
|
|
D>
|
ca_on_oakville
|
2026-08-06 01:22:51
|
2026-11-07 01:08:10
|
Exception: No email node in b'<div class="card h-100">\n <div class="img-container">\n …
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_oakville/people.py", line 26, in scrape
email = self.get_email(councillor)
File "/src/scrapers-ca-app/scrapers/utils.py", line 143, in get_email
raise Exception(f"No email node in {etree.tostring(node)}")
Exception: No email node in b'<div class="card h-100">\n <div class="img-container">\n <img src="https://www.oakville.ca/getmedia/a72ece52-cdc9-4a10-a191-ad441c887431/570-Councillor-Grant.jpg?width=570&height=950&ext=.jpg" class="card-img-top" alt="Image of Councillor Marc Grant" title="Councillor Marc Grant"/>\n </div>\n <div class="card-body pt-3 pb-2 px-0">\n <div class="user-function">Ward 5 Town Councillor</div>\n <div class="user-name">Marc Grant</div>\n </div>\n <div class="my-2">\n <a href="https://www.oakville.ca/town-hall/mayor-council-administration/mayor-council/councillor-marc-grant/" title="Ward 5 Town Councillor" class="btn">Learn More</a>\n </div>\n </div>\n '
|
|
A
|
ca_on_orangeville
|
2026-11-07 00:54:32
|
2026-11-07 00:54:32
|
|
|
A
|
ca_on_orillia
|
2026-11-07 01:05:29
|
2026-11-07 01:05:29
|
|
|
C
|
ca_on_oshawa
|
2026-11-07 00:51:14
|
2026-11-07 00:51:14
|
|
|
C
|
ca_on_ottawa
|
2026-11-07 00:48:29
|
2026-11-07 00:48:29
|
|
|
C
|
ca_on_peel
|
2026-11-07 00:48:33
|
2026-11-07 00:48:33
|
|
|
A
|
ca_on_peterborough
|
2026-11-07 00:46:31
|
2026-11-07 00:46:31
|
|
|
C
|
ca_on_pickering
|
2026-11-07 00:51:12
|
2026-11-07 00:51:12
|
|
|
A
|
ca_on_prince_edward_county
|
2026-11-07 01:04:30
|
2026-11-07 01:04:30
|
|
|
C
|
ca_on_richmond_hill
|
2026-11-07 01:06:40
|
2026-11-07 01:06:40
|
|
|
A
|
ca_on_sarnia
|
2026-11-07 01:11:53
|
2026-11-07 01:11:53
|
|
|
C
|
ca_on_sault_ste_marie
|
2026-11-07 01:09:38
|
2026-11-07 01:09:38
|
|
|
C
|
ca_on_st_catharines
|
2026-11-07 01:05:31
|
2026-11-07 01:05:31
|
|
|
A
|
ca_on_stratford
|
2026-11-07 00:51:13
|
2026-11-07 00:51:13
|
|
|
D>
|
ca_on_st_thomas
|
2026-09-30 00:42:24
|
2026-11-07 00:47:13
|
scrapelib.HTTPError: 404 while retrieving https://www.stthomas.ca/city_hall/city_council
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_st_thomas/people.py", line 17, in scrape
page = self.lxmlize(LISTING_URL, user_agent=BROWSER_USER_AGENT)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 404 while retrieving https://www.stthomas.ca/city_hall/city_council
|
|
D>
|
ca_on_thunder_bay
|
2026-08-06 00:49:39
|
2026-11-07 00:47:51
|
scrapelib.HTTPError: 404 while retrieving https://www.thunderbay.ca/en/city-hall/mayor-and-council-profiles.aspx
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_thunder_bay/people.py", line 34, in scrape
page = self.lxmlize(COUNCIL_PAGE, verify=False)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 404 while retrieving https://www.thunderbay.ca/en/city-hall/mayor-and-council-profiles.aspx
|
|
A
|
ca_on_timmins
|
2026-11-07 00:48:57
|
2026-11-07 00:48:57
|
|
|
C
|
ca_on_toronto
|
2026-11-07 01:09:40
|
2026-11-07 01:09:40
|
|
|
C
|
ca_on_uxbridge
|
2026-11-07 00:50:10
|
2026-11-07 00:50:10
|
|
|
D>
|
ca_on_vaughan
|
2026-10-20 00:29:58
|
2026-11-07 01:08:08
|
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://www.vaughan.ca/council
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_vaughan/people.py", line 11, in scrape
page = self.cloudscrape(COUNCIL_PAGE)
File "/src/scrapers-ca-app/scrapers/utils.py", line 210, in cloudscrape
response.raise_for_status()
File "/usr/local/lib/python3.10/site-packages/requests/models.py", line 1028, in raise_for_status
raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 403 Client Error: Forbidden for url: https://www.vaughan.ca/council
|
|
D>
|
ca_on_waterloo
|
2026-11-06 01:15:53
|
2026-11-07 01:05:27
|
AssertionError: No councillors found
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_waterloo/people.py", line 44, in scrape
assert people, "No councillors found"
AssertionError: No councillors found
|
|
C
|
ca_on_waterloo_region
|
2026-11-07 00:48:19
|
2026-11-07 00:48:19
|
|
|
C
|
ca_on_welland
|
2026-11-07 01:06:30
|
2026-11-07 01:06:30
|
|
|
C
|
ca_on_wellesley
|
2026-11-07 01:11:55
|
2026-11-07 01:11:55
|
|
|
C
|
ca_on_whitby
|
2026-11-07 00:54:18
|
2026-11-07 00:54:18
|
|
|
C
|
ca_on_whitchurch_stouffville
|
2026-11-07 01:04:56
|
2026-11-07 01:04:56
|
|
|
D>
|
ca_on_wilmot
|
2026-08-26 00:57:06
|
2026-11-07 00:59:16
|
AssertionError: No councillors found
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_on_wilmot/people.py", line 55, in scrape
assert count, "No councillors found"
AssertionError: No councillors found
|
|
C
|
ca_on_windsor
|
2026-11-07 01:05:01
|
2026-11-07 01:05:01
|
|
|
A
|
ca_on_woodstock
|
2026-11-07 01:01:05
|
2026-11-07 01:01:05
|
|
|
C
|
ca_on_woolwich
|
2026-11-07 00:45:58
|
2026-11-07 00:45:58
|
|
|
C
|
ca_pe
|
2026-11-07 01:01:57
|
2026-11-07 01:01:57
|
|
|
C
|
ca_pe_charlottetown
|
2026-11-07 01:08:11
|
2026-11-07 01:08:11
|
|
|
C
|
ca_pe_stratford
|
2026-11-07 00:47:59
|
2026-11-07 00:47:59
|
|
|
D>
|
ca_pe_summerside
|
2026-09-02 01:22:17
|
2026-11-07 01:04:34
|
ValueError: not enough values to unpack (expected 2, got 1)
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_pe_summerside/people.py", line 30, in scrape
role, name = role_name.split(" ", 1)
ValueError: not enough values to unpack (expected 2, got 1)
|
D>
00:48:58 WARNING scrapelib: sleeping for 10 seconds before retry
00:49:08 WARNING scrapelib: sleeping for 20 seconds before retry
00:49:28 WARNING scrapelib: sleeping for 40 seconds before retry
00:50:08 WARNING pupa: could not save RunPlan, no successful runs of ocd-jurisdiction/country:ca/province:qc/legislature yet
|
ca_qc
|
|
2026-11-07 00:50:08
|
scrapelib.HTTPError: 403 while retrieving https://www.assnat.qc.ca/fr/deputes/index.html
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_qc/people.py", line 200, in scrape
page = self.lxmlize(COUNCIL_PAGE, user_agent=BROWSER_USER_AGENT, verify=False)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 403 while retrieving https://www.assnat.qc.ca/fr/deputes/index.html
|
|
A
|
ca_qc_alma
|
2026-11-07 01:04:59
|
2026-11-07 01:04:59
|
|
|
C
|
ca_qc_beaconsfield
|
2026-11-07 01:09:49
|
2026-11-07 01:09:49
|
|
D>
00:59:17 WARNING pupa: could not save RunPlan, no successful runs of ocd-jurisdiction/country:ca/csd:2473015/legislature yet
|
ca_qc_blainville
|
|
2026-11-07 00:59:17
|
pupa.exceptions.UnresolvedIdError: cannot resolve pseudo id to Post: ~{"label": "District d'Alen\u00e7on (no 8)", "organizat…
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 307, in do_handle
report['import'] = self.do_import(juris, args)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 211, in do_import
report.update(membership_importer.import_directory(datadir))
File "/usr/local/lib/python3.10/site-packages/pupa/importers/base.py", line 190, in import_directory
return self.import_data(json_stream())
File "/usr/local/lib/python3.10/site-packages/pupa/importers/base.py", line 227, in import_data
obj_id, what = self.import_item(data)
File "/usr/local/lib/python3.10/site-packages/pupa/importers/base.py", line 247, in import_item
data = self.prepare_for_db(data)
File "/usr/local/lib/python3.10/site-packages/pupa/importers/memberships.py", line 50, in prepare_for_db
data['post_id'] = self.post_importer.resolve_json_id(data['post_id'])
File "/usr/local/lib/python3.10/site-packages/pupa/importers/base.py", line 165, in resolve_json_id
raise UnresolvedIdError(errmsg)
pupa.exceptions.UnresolvedIdError: cannot resolve pseudo id to Post: ~{"label": "District d'Alen\u00e7on (no 8)", "organization__classification": "legislature", "role": "Conseiller"}
|
|
A
|
ca_qc_boisbriand
|
2026-11-07 00:46:30
|
2026-11-07 00:46:30
|
|
D>
00:59:36 WARNING scrapelib: sleeping for 10 seconds before retry
00:59:46 WARNING scrapelib: sleeping for 20 seconds before retry
01:00:06 WARNING scrapelib: sleeping for 40 seconds before retry
|
ca_qc_brossard
|
2026-11-05 01:27:31
|
2026-11-07 01:00:46
|
scrapelib.HTTPError: 403 while retrieving https://www.brossard.ca/elus-municipaux
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_qc_brossard/people.py", line 25, in scrape
page = self.lxmlize(COUNCIL_PAGE)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 403 while retrieving https://www.brossard.ca/elus-municipaux
|
|
C
|
ca_qc_cote_saint_luc
|
2026-11-07 00:50:26
|
2026-11-07 00:50:26
|
|
|
C
|
ca_qc_dollard_des_ormeaux
|
2026-11-07 01:01:05
|
2026-11-07 01:01:05
|
|
|
C
|
ca_qc_dorval
|
2026-11-07 00:46:22
|
2026-11-07 00:46:22
|
|
|
A
|
ca_qc_drummondville
|
2026-11-07 01:01:02
|
2026-11-07 01:01:02
|
|
|
C
|
ca_qc_gatineau
|
2026-11-07 01:10:16
|
2026-11-07 01:10:16
|
|
|
A
|
ca_qc_granby
|
2026-11-07 00:47:58
|
2026-11-07 00:47:58
|
|
D>
01:09:54 WARNING pupa: could not save RunPlan, no successful runs of ocd-jurisdiction/country:ca/csd:2466102/legislature yet
|
ca_qc_kirkland
|
|
2026-11-07 01:09:54
|
IndexError: list index out of range
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_qc_kirkland/people.py", line 27, in scrape
name = councillor.xpath(".//strong/text()")[0]
IndexError: list index out of range
|
|
C
|
ca_qc_laval
|
2026-11-07 00:48:00
|
2026-11-07 00:48:00
|
|
|
D>
|
ca_qc_levis
|
2026-08-18 01:40:33
|
2026-11-07 01:06:27
|
AssertionError: No councillors found
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_qc_levis/people.py", line 30, in scrape
assert len(councillors), "No councillors found"
AssertionError: No councillors found
|
D>
01:06:56 WARNING scrapelib: got No connection adapters were found for 'mailto:mairie@longueuil.quebec' sleeping for 10 seconds before retry
01:07:06 WARNING scrapelib: got No connection adapters were found for 'mailto:mairie@longueuil.quebec' sleeping for 20 seconds before retry
01:07:26 WARNING scrapelib: got No connection adapters were found for 'mailto:mairie@longueuil.quebec' sleeping for 40 seconds before retry
|
ca_qc_longueuil
|
2026-07-13 01:00:54
|
2026-11-07 01:08:06
|
requests.exceptions.InvalidSchema: No connection adapters were found for 'mailto:mairie@longueuil.quebec'
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_qc_longueuil/people.py", line 40, in scrape
detail_page = self.lxmlize(detail_url, "utf-8")
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 596, in request
resp = super().request(
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 411, in request
resp = super().request(
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 239, in request
return super().request(
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 182, in request
raise exception_raised
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 124, in request
resp = super().request(
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 592, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 700, in send
adapter = self.get_adapter(url=request.url)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 795, in get_adapter
raise InvalidSchema(f"No connection adapters were found for {url!r}")
requests.exceptions.InvalidSchema: No connection adapters were found for 'mailto:mairie@longueuil.quebec'
|
|
A
|
ca_qc_magog
|
2026-11-07 00:48:20
|
2026-11-07 00:48:20
|
|
|
D>
|
ca_qc_mercier
|
2026-09-21 00:15:58
|
2026-11-07 00:43:30
|
scrapelib.HTTPError: 404 while retrieving https://www.ville.mercier.qc.ca/affaires-municipales/conseil-municipal/membres-du-…
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_qc_mercier/people.py", line 9, in scrape
page = self.lxmlize(COUNCIL_PAGE, user_agent=CUSTOM_USER_AGENT)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 619, in request
raise HTTPError(resp)
scrapelib.HTTPError: 404 while retrieving https://www.ville.mercier.qc.ca/affaires-municipales/conseil-municipal/membres-du-conseil/
|
|
A
|
ca_qc_mirabel
|
2026-11-07 01:04:51
|
2026-11-07 01:04:51
|
|
D>
01:01:58 WARNING pupa: validation of Membership d5801f26-da46-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value 'Cell. :\nFax : 514-868-3324' for field '' does not match regular expression '\A1 \d{3} \d{3}-\d{4}(?: x\d+)?\Z'
01:01:58 WARNING pupa: could not save RunPlan, no successful runs of ocd-jurisdiction/country:ca/csd:2466023/legislature yet
|
ca_qc_montreal
|
|
2026-11-07 01:01:58
|
Value 'Cell. :\nFax : 514-868-3324' for field '' does not match regular expression '\A1 \d{3} \d{3}-\d{4}(?: x\d+)?\Z'
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 175, in validate
validator.validate(self.as_dict(), schema)
File "/usr/local/lib/python3.10/site-packages/validictory/validator.py", line 616, in validate
raise MultipleValidationError(self._errors)
validictory.validator.MultipleValidationError: 1 validation errors:
Value 'Cell. :\nFax : 514-868-3324' for field '' does not match regular expression '\A1 \d{3} \d{3}-\d{4}(?: x\d+)?\Z'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 104, in do_scrape
self.save_object(obj)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 93, in save_object
self.save_object(obj)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 89, in save_object
raise ve
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 85, in save_object
obj.validate()
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 177, in validate
raise ScrapeValueError('validation of {} {} failed: {}'.format(
pupa.exceptions.ScrapeValueError: validation of Membership d5801f26-da46-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value 'Cell. :\nFax : 514-868-3324' for field '' does not match regular expression '\A1 \d{3} \d{3}-\d{4}(?: x\d+)?\Z'
|
D>
01:12:16 WARNING pupa: validation of CanadianPerson 45b729f0-da48-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMzAiIGhlaWdodD0iMjc1IiB2aWV3Qm94PSIwIDAgMjMwIDI3NSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=' for field '<obj>.image' does not match regular expression '\A(?:(?:ftp|https?)://|\Z)'
|
ca_qc_montreal_est
|
2026-09-21 00:41:11
|
2026-11-07 01:12:16
|
Value 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMzAiIGhlaWdodD0iMjc1IiB2aWV…
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 175, in validate
validator.validate(self.as_dict(), schema)
File "/usr/local/lib/python3.10/site-packages/validictory/validator.py", line 616, in validate
raise MultipleValidationError(self._errors)
validictory.validator.MultipleValidationError: 1 validation errors:
Value 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMzAiIGhlaWdodD0iMjc1IiB2aWV3Qm94PSIwIDAgMjMwIDI3NSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=' for field '<obj>.image' does not match regular expression '\A(?:(?:ftp|https?)://|\Z)'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 104, in do_scrape
self.save_object(obj)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 89, in save_object
raise ve
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 85, in save_object
obj.validate()
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 177, in validate
raise ScrapeValueError('validation of {} {} failed: {}'.format(
pupa.exceptions.ScrapeValueError: validation of CanadianPerson 45b729f0-da48-11f1-ae32-56b5fa2d7c6e failed: 1 validation errors:
Value 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMzAiIGhlaWdodD0iMjc1IiB2aWV3Qm94PSIwIDAgMjMwIDI3NSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=' for field '<obj>.image' does not match regular expression '\A(?:(?:ftp|https?)://|\Z)'
|
|
C
|
ca_qc_pointe_claire
|
2026-11-07 00:48:03
|
2026-11-07 00:48:03
|
|
|
C
|
ca_qc_quebec
|
2026-11-07 00:51:01
|
2026-11-07 00:51:01
|
|
|
A
|
ca_qc_repentigny
|
2026-11-07 00:54:31
|
2026-11-07 00:54:31
|
|
|
A
|
ca_qc_rimouski
|
2026-11-07 01:10:41
|
2026-11-07 01:10:41
|
|
|
A
|
ca_qc_rouyn_noranda
|
2026-11-07 01:01:04
|
2026-11-07 01:01:04
|
|
|
C
|
ca_qc_saguenay
|
2026-11-07 00:46:02
|
2026-11-07 00:46:02
|
|
|
D>
|
ca_qc_sainte_anne_de_bellevue
|
2026-11-02 00:36:52
|
2026-11-07 00:54:42
|
pupa.exceptions.ScrapeError: no objects returned from SainteAnneDeBellevuePersonScraper scrape
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 108, in do_scrape
raise ScrapeError('no objects returned from {} scrape'.format(self.__class__.__name__))
pupa.exceptions.ScrapeError: no objects returned from SainteAnneDeBellevuePersonScraper scrape
|
|
A
|
ca_qc_sainte_julie
|
2026-11-07 01:06:15
|
2026-11-07 01:06:15
|
|
|
A
|
ca_qc_saint_eustache
|
2026-11-07 00:53:13
|
2026-11-07 00:53:13
|
|
|
A
|
ca_qc_saint_georges
|
2026-11-07 00:59:18
|
2026-11-07 00:59:18
|
|
|
D>
|
ca_qc_saint_hyacinthe
|
2026-07-30 01:00:58
|
2026-11-07 00:47:52
|
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.st-hyacinthe.ca', port=443): Max retries exceeded with url: /vil…
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 464, in _make_request
self._validate_conn(conn)
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 1106, in _validate_conn
conn.connect()
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 796, in connect
sock_and_verified = _ssl_wrap_socket_and_match_hostname(
File "/usr/local/lib/python3.10/site-packages/urllib3/connection.py", line 975, in _ssl_wrap_socket_and_match_hostname
ssl_sock = ssl_wrap_socket(
File "/usr/local/lib/python3.10/site-packages/urllib3/util/ssl_.py", line 433, in ssl_wrap_socket
ssl_sock = _ssl_wrap_socket_impl(sock, context, tls_in_tls, server_hostname)
File "/usr/local/lib/python3.10/site-packages/urllib3/util/ssl_.py", line 477, in _ssl_wrap_socket_impl
return ssl_context.wrap_socket(sock, server_hostname=server_hostname)
File "/usr/local/lib/python3.10/ssl.py", line 513, in wrap_socket
return self.sslsocket_class._create(
File "/usr/local/lib/python3.10/ssl.py", line 1104, in _create
self.do_handshake()
File "/usr/local/lib/python3.10/ssl.py", line 1375, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 788, in urlopen
response = self._make_request(
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 488, in _make_request
raise new_e
urllib3.exceptions.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 645, in send
resp = conn.urlopen(
File "/usr/local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 842, in urlopen
retries = retries.increment(
File "/usr/local/lib/python3.10/site-packages/urllib3/util/retry.py", line 543, in increment
raise MaxRetryError(_pool, url, reason) from reason # type: ignore[arg-type]
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='www.st-hyacinthe.ca', port=443): Max retries exceeded with url: /ville/vie-democratique/conseil-municipal (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)')))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_qc_saint_hyacinthe/people.py", line 12, in scrape
page = self.lxmlize(COUNCIL_PAGE)
File "/src/scrapers-ca-app/scrapers/utils.py", line 222, in lxmlize
response = self.get(url, cookies=cookies, verify=verify)
File "/src/scrapers-ca-app/scrapers/utils.py", line 203, in get
return super().get(*args, verify=kwargs.pop("verify", SSL_VERIFY), **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 605, in get
return self.request("GET", url, **kwargs)
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 596, in request
resp = super().request(
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 411, in request
resp = super().request(
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 239, in request
return super().request(
File "/usr/local/lib/python3.10/site-packages/scrapelib/__init__.py", line 124, in request
resp = super().request(
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 592, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/sessions.py", line 706, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.10/site-packages/requests/adapters.py", line 676, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='www.st-hyacinthe.ca', port=443): Max retries exceeded with url: /ville/vie-democratique/conseil-municipal (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1017)')))
|
|
C
|
ca_qc_saint_jean_sur_richelieu
|
2026-11-07 00:50:25
|
2026-11-07 00:50:25
|
|
|
C
|
ca_qc_saint_jerome
|
2026-11-07 00:48:02
|
2026-11-07 00:48:02
|
|
|
A
|
ca_qc_salaberry_de_valleyfield
|
2026-11-07 00:47:51
|
2026-11-07 00:47:51
|
|
|
C
|
ca_qc_senneville
|
2026-11-07 00:50:09
|
2026-11-07 00:50:09
|
|
|
A
|
ca_qc_sept_iles
|
2026-11-07 00:54:36
|
2026-11-07 00:54:36
|
|
|
A
|
ca_qc_shawinigan
|
2026-11-07 00:59:13
|
2026-11-07 00:59:13
|
|
|
C
|
ca_qc_sherbrooke
|
2026-11-07 00:52:51
|
2026-11-07 00:52:51
|
|
|
A
|
ca_qc_sorel_tracy
|
2026-11-07 00:53:15
|
2026-11-07 00:53:15
|
|
|
D>
|
ca_qc_terrebonne
|
2026-10-29 01:24:50
|
2026-11-07 01:08:14
|
(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('…
Traceback (most recent call last):
File "/src/scrapers-ca-app/reports/utils.py", line 73, in scrape_people
report.report = subcommand.handle(args, other)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 260, in handle
return self.do_handle(args, other, juris)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 305, in do_handle
report['scrape'] = self.do_scrape(juris, args, scrapers)
File "/usr/local/lib/python3.10/site-packages/pupa/cli/commands/update.py", line 173, in do_scrape
report[scraper_name] = scraper.do_scrape(**scrape_args)
File "/usr/local/lib/python3.10/site-packages/pupa/scrape/base.py", line 99, in do_scrape
for obj in self.scrape(**kwargs) or []:
File "/src/scrapers-ca-app/scrapers/ca_qc_terrebonne/people.py", line 27, in scrape
phone = self.get_phone(page)
File "/src/scrapers-ca-app/scrapers/utils.py", line 191, in get_phone
raise Exception(f"No phone pattern in {node.text_content()}")
Exception: No phone pattern in
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-PBMCN6CL');
Mathieu Traversy - Ville de Terrebonne
{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/terrebonne.ca\/maire\/","url":"https:\/\/terrebonne.ca\/maire\/","name":"Mathieu Traversy - Ville de Terrebonne","isPartOf":{"@id":"https:\/\/terrebonne.ca\/#website"},"primaryImageOfPage":{"@id":"https:\/\/terrebonne.ca\/maire\/#primaryimage"},"image":{"@id":"https:\/\/terrebonne.ca\/maire\/#primaryimage"},"thumbnailUrl":"https:\/\/terrebonne.ca\/wp-content\/uploads\/2023\/05\/mairie-traversy-mathieu-330x351-1.jpg","datePublished":"2023-05-16T11:40:32+00:00","dateModified":"2026-10-29T14:06:48+00:00","description":"La Ville de Terrebonne privilégie la bienveillance dans ses communications. Tous les échanges doivent se faire dans le respect et la tolérance envers les","breadcrumb":{"@id":"https:\/\/terrebonne.ca\/maire\/#breadcrumb"},"inLanguage":"fr-CA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/terrebonne.ca\/maire\/"]}]},{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/terrebonne.ca\/maire\/#primaryimage","url":"https:\/\/terrebonne.ca\/wp-content\/uploads\/2023\/05\/mairie-traversy-mathieu-330x351-1.jpg","contentUrl":"https:\/\/terrebonne.ca\/wp-content\/uploads\/2023\/05\/mairie-traversy-mathieu-330x351-1.jpg","width":330,"height":351,"caption":"Mathieu Traversy - Maire de Terrebonne"},{"@type":"BreadcrumbList","@id":"https:\/\/terrebonne.ca\/maire\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/terrebonne.ca\/"},{"@type":"ListItem","position":2,"name":"Ville","item":"https:\/\/terrebonne.ca\/a-propos-de-la-ville\/"},{"@type":"ListItem","position":3,"name":"Administration et gouvernance","item":"https:\/\/terrebonne.ca\/administration-et-gouvernance\/"},{"@type":"ListItem","position":4,"name":"Conseil municipal","item":"https:\/\/terrebonne.ca\/conseil-municipal\/"},{"@type":"ListItem","position":5,"name":"Membres du conseil municipal","item":"https:\/\/terrebonne.ca\/membres-du-conseil-municipal\/"},{"@type":"ListItem","position":6,"name":"Mathieu Traversy"}]},{"@type":"WebSite","@id":"https:\/\/terrebonne.ca\/#website","url":"https:\/\/terrebonne.ca\/","name":"Ville de Terrebonne","description":"","publisher":{"@id":"https:\/\/terrebonne.ca\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/terrebonne.ca\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-CA"},{"@type":"Organization","@id":"https:\/\/terrebonne.ca\/#organization","name":"Ville de Terrebonne","url":"https:\/\/terrebonne.ca\/","logo":{"@type":"ImageObject","inLanguage":"fr-CA","@id":"https:\/\/terrebonne.ca\/#\/schema\/logo\/image\/","url":"https:\/\/terrebonne.ca\/wp-content\/uploads\/2025\/03\/logo-ville-de-terrebonne.jpg","contentUrl":"https:\/\/terrebonne.ca\/wp-content\/uploads\/2025\/03\/logo-ville-de-terrebonne.jpg","width":696,"height":696,"caption":"Ville de Terrebonne"},"image":{"@id":"https:\/\/terrebonne.ca\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/VilledeTerrebonne","https:\/\/x.com\/terrebonneville"]}]}
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
/*# sourceURL=wp-emoji-styles-inline-css */
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}
/*# sourceURL=https://terrebonne.ca/wp/wp-includes/blocks/list/style.min.css */
.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
/*# sourceURL=https://terrebonne.ca/wp/wp-includes/blocks/paragraph/style.min.css */
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--yellow: #FFC95E;--wp--preset--color--secondary: #FFA450;--wp--preset--color--blue: #61B0E3;--wp--preset--color--green: #5DD38D;--wp--preset--color--background: #F6F6F4;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: clamp(1rem, 1rem + ((1vw - 0.2rem) * 0.079), 1.0625rem);--wp--preset--font-size--medium: clamp(1rem, 1rem + ((1vw - 0.2rem) * 0.313), 1.25rem);--wp--preset--font-size--large: clamp(1.25rem, 1.25rem + ((1vw - 0.2rem) * 0.391), 1.5625rem);--wp--preset--font-size--x-large: clamp(25.014px, 1.563rem + ((1vw - 3.2px) * 1.327), 42px);--wp--preset--font-family--crimson-pro: "Crimson Pro", serif;--wp--preset--font-family--rubik: 'Rubik', sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: clamp(1.5rem, 5vw, 2rem);--wp--preset--spacing--40: clamp(1.8rem, 1.8rem + ((1vw - 0.48rem) * 2.885), 3rem);--wp--preset--spacing--50: clamp(2.5rem, 8vw, 4.5rem);--wp--preset--spacing--60: clamp(3.75rem, 10vw, 7rem);--wp--preset--spacing--70: clamp(5rem, 5.25rem + ((1vw - 0.48rem) * 9.096), 8rem);--wp--preset--spacing--80: clamp(7rem, 14vw, 11rem);--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button .wp-block-button__link{--wp--preset--spacing--small: 10px;--wp--preset--spacing--default: clamp(0.625rem, 0rem + 1.8182vw, 1.25rem);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:root { --wp--style--global--content-size: 1200px;--wp--style--global--wide-size: 100%; }:where(body) { margin: 0; }.wp-site-blocks { padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom); }.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: clamp(1.875rem, 0.9231rem + 2.7692vw, 3rem); margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: clamp(1.875rem, 0.9231rem + 2.7692vw, 3rem); }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: clamp(1.875rem, 0.9231rem + 2.7692vw, 3rem);margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: clamp(1.875rem, 0.9231rem + 2.7692vw, 3rem);margin-block-end: 0;}:root :where(.is-layout-flex){gap: clamp(1.875rem, 0.9231rem + 2.7692vw, 3rem);}:root :where(.is-layout-grid){gap: clamp(1.875rem, 0.9231rem + 2.7692vw, 3rem);}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{background-color: white;color: #1D1814;font-family: var(--wp--preset--font-family--rubik);font-size: var(--wp--preset--font-size--medium);line-height: 1.6;--wp--style--root--padding-top: var(--wp--preset--spacing--40);--wp--style--root--padding-right: var(--bs-gutter-x, 0.75rem);--wp--style--root--padding-bottom: var(--wp--preset--spacing--40);--wp--style--root--padding-left: var(--bs-gutter-x, 0.75rem);}a:where(:not(.wp-element-button)){color: var(--wp--preset--color--orange);text-decoration: underline;}:root :where(a:where(:not(.wp-element-button)):visited){color: #457fa5;}:root :where(a:where(:not(.wp-element-button)):hover){text-decoration: none;}:root :where(a:where(:not(.wp-element-button)):focus){text-decoration: underline dashed;}:root :where(a:where(:not(.wp-element-button)):active){color: var(--wp--preset--color--blue);text-decoration: none;}h1, h2, h3, h4, h5, h6{font-family: var(--wp--preset--font-family--crimson-pro);font-weight: 400;line-height: 1.4;margin-top: clamp(2.5625rem, 0.625rem + 2.7273vw, 2.5rem);margin-bottom: clamp(2.5625rem, 0.625rem + 2.7273vw, 2.5rem);}h1{font-size: clamp(2.8125rem, 0.75rem + 6vw, 4.875rem);letter-spacing: -2px;line-height: clamp(2.5rem, 1.1875rem + 3.8182vw, 3.8125rem);}h2{font-size: clamp(2.8125rem, 2.125rem + 2vw, 3.5rem);letter-spacing: -1px;line-height: clamp(2.5rem, 2rem + 1.4545vw, 3rem);}h3{font-size: clamp(1.875rem, 1.375rem + 1.4545vw, 2.375rem);font-weight: 500;letter-spacing: -0.5px;line-height: clamp(1.875rem, 1.375rem + 1.3333vw, 2.375rem);margin-top: clamp(2rem, 0.625rem + 2.7273vw, 1.5rem);margin-bottom: clamp(2rem, 0.625rem + 2.7273vw, 1.5rem);}h4{font-size: clamp(1.5625rem, 1.25rem + 0.9091vw, 1.875rem);;font-weight: 500;letter-spacing: -0.2px;line-height: 30px;margin-top: clamp(2rem, 0.625rem + 2.7273vw, 1.5rem);margin-bottom: clamp(2rem, 0.625rem + 2.7273vw, 1.5rem);}h5{font-family: var(--wp--preset--font-family--rubik);font-size: clamp(1.125rem, 0.875rem + 0.7273vw, 1.375rem);;font-weight: 500;line-height: 30px;margin-top: 30px;margin-bottom: 30px;}h6{font-family: var(--wp--preset--font-family--rubik);font-size: clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.234), 17px);font-weight: 500;line-height: 20px;margin-top: 30px;margin-bottom: 30px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: transparent;border-radius: 12px;border-color: #1D1814;border-width: 2px;border-style: solid;border-bottom-width: 4px;color: #1D1814;font-family: inherit;font-size: clamp(1rem, 0.9375rem + 0.1818vw, 1.0625rem);font-style: inherit;font-weight: 500;letter-spacing: -0.3px;line-height: inherit;padding-top: clamp(0.625rem, 0rem + 1.8182vw, 1.25rem);padding-right: 30px;padding-bottom: clamp(0.625rem, 0rem + 1.8182vw, 1.25rem);padding-left: 30px;text-decoration: none;text-transform: inherit;}:root :where(.wp-element-button:visited, .wp-block-button__link:visited){color: #1D1814;}:root :where(.wp-element-button:hover, .wp-block-button__link:hover){color: white;}:root :where(.wp-element-button:focus, .wp-block-button__link:focus){background-color: #1D1814;color: white;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-yellow-color{color: var(--wp--preset--color--yellow) !important;}.has-secondary-color{color: var(--wp--preset--color--secondary) !important;}.has-blue-color{color: var(--wp--preset--color--blue) !important;}.has-green-color{color: var(--wp--preset--color--green) !important;}.has-background-color{color: var(--wp--preset--color--background) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-yellow-background-color{background-color: var(--wp--preset--color--yellow) !important;}.has-secondary-background-color{background-color: var(--wp--preset--color--secondary) !important;}.has-blue-background-color{background-color: var(--wp--preset--color--blue) !important;}.has-green-background-color{background-color: var(--wp--preset--color--green) !important;}.has-background-background-color{background-color: var(--wp--preset--color--background) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-yellow-border-color{border-color: var(--wp--preset--color--yellow) !important;}.has-secondary-border-color{border-color: var(--wp--preset--color--secondary) !important;}.has-blue-border-color{border-color: var(--wp--preset--color--blue) !important;}.has-green-border-color{border-color: var(--wp--preset--color--green) !important;}.has-background-border-color{border-color: var(--wp--preset--color--background) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-crimson-pro-font-family{font-family: var(--wp--preset--font-family--crimson-pro) !important;}.has-rubik-font-family{font-family: var(--wp--preset--font-family--rubik) !important;}
:root :where(.wp-block-list){margin-top: 30px;}
/*# sourceURL=global-styles-inline-css */
@font-face{font-family:"Crimson Pro";font-style:normal;font-weight:400;font-display:fallback;font-stretch:normal;}
@font-face{font-family:Rubik;font-style:normal;font-weight:400;font-display:fallback;font-stretch:normal;}
Please ensure Javascript is enabled for purposes of
website accessibility
Aller au contenu principal
Emplois
Nous joindre
Calendrier des événements
Cartes interactives
Recherche
Se connecter
Mes requêtes
Bibliothèques
Loisirs
Taxes
Permis et déclaration de travaux
Alerte Terrebonne
Services
Retour
Services
Services
Services à la population
Retour
Services à la population
Trouver mes services par adresse
Aide, soutien et subventions
Assermentation
Collectes
Constat d’infraction et cour municipale
Déneigement et stationnement
Sécurité publique
Taxes et rôle foncier
Transport
Travaux, entretien et avis d’ébullition
Wi-Fi gratuit
Services aux organismes
Retour
Services aux organismes
Admissibilité
Aide financière
Boîte à outils
Demande d’affichage
Organismes mandataires
Programme d’action bénévole
Réservation de plateaux et équipements
Répondants municipaux
Services aux entreprises
Retour
Services aux entreprises
Appel d’offres et gestion contractuelle
Collecte dans les commerces
Commerces amis des animaux
Développement économique
Entreprises d’utilité publique
Ouverture d'un service de garde
Règlements et permis
Soutien et subventions
Vente et achat d’actifs immobiliers municipaux
Permis, règlements et conseils
Retour
Permis, règlements et conseils
Voir tout
Arbres
Aménagement extérieur
Animaux et insectes
Arrosage
Construction, rénovation et travaux
Sécurité
Urbanisme
Vie de quartier
Loisirs et culture
Retour
Loisirs et culture
Activités avec inscription
Retour
Activités avec inscription
Camps de jour
Carte Accès Terrebonne
Inscription et réservation d'activités
Programmation Loisirs+
Programmes favorisant l’accessibilité
Activités et festivités
Retour
Activités et festivités
Calendrier des événements
Activités estivales
Activités hivernales
Activités et animations en bibliothèque
Festival La Bordée
Festival POP ton été
Quoi faire dans le Vieux
Quoi faire dans vos parcs
Espaces récréatifs et culturels
Retour
Espaces récréatifs et culturels
Arénas
Bibliothèques
Chalet de parc
Complexe aquatique
Jeux d’eau
Parcs
Patinoires extérieures
Terrains sportifs
Sentiers et espaces verts
Vie collective
Retour
Vie collective
Activités des organismes
Bénévolat et implication citoyenne
Fête des voisins
Figurants pour photos et vidéos
Jardins communautaires et forêts nourricières
Un brin de jasette
Ventes de garage
Ville
Retour
Ville
Ville
Administration et gouvernance
Retour
Administration et gouvernance
Conseil municipal
Administration municipale
Accès à l’information
Avis publics
Bureau d'intégrité et d'éthique
Comité exécutif
Commissions et comités
Documentation et orientations
Vérificateur général
Découvrir Terrebonne
Retour
Découvrir Terrebonne
Actualités
Histoire et patrimoine
Identité municipale (logo)
Installations et espaces publics
Mission, vision, valeurs
Présentation de la ville
Secteurs et développements
Tourisme
350e anniversaire
Enjeux et projets porteurs
Retour
Enjeux et projets porteurs
Développement social
Milieu candidat – Finale Jeux du Québec 2029
Participation citoyenne
Propreté et embellissement
Sécurité urbaine
Stratégie bleue
Territoire Terrebonne
Transition écologique
Sécurité publique
Retour
Sécurité publique
Alerte Terrebonne
Inspection, porte-à-porte et patrouille
Sécurité civile et mesures d’urgence
Service de police
Service de sécurité incendie
Emplois
Nous joindre
Accueil Ville Administration et gouvernance Conseil municipal Membres du conseil municipal Mathieu Traversy
Mathieu Traversy
Maire
Avant d’interpeller votre élu, vous devriez d’abord faire une requête en ligne.
Faire une requête en ligne
Coordonnées
Avant de communiquer avec votre élu, assurez-vous d’avoir en main votre numéro de requête.
[email protected]
La Ville de Terrebonne privilégie la bienveillance dans ses communications. Tous les échanges doivent se faire dans le respect et la tolérance envers les élus et les équipes.
Maire
Président du Comité exécutif
Président de l’Entente de coopération avec la Ville de Namur
Président de Jumelage Vitré-Terrebonne
Préfet de la MRC Les Moulins
Délégué de l’Association internationale des maires de la Francophonie
Membre de la Communauté métropolitaine de Montréal (CMM)
Membre du conseil d’administration d’Exo (Réseau de transport métropolitain)
Membre de la Commission de l’environnement et de la transition écologique de la Communauté métropolitaine de Montréal (CMM)
Membre du conseil d’administration et du comité exécutif de l’Union des municipalités du Québec (UMQ)
Membre de la Table des préfets et des élus de la couronne nord
Membres du conseil municipal
Partager
Recherche
Sujets populaires
Avis de travaux
Collectes
Encombrants
Ménage de l’automne
Aménagement du parc nature du Boisé
Bureau du service aux citoyens
Vous êtes importants pour nous : Communiquez avec nous ou créez une requête en ligne.
Du lundi au vendredi, de 7 h 30 à 19 h 30
708 A, boulevard des Seigneurs,
Terrebonne
Nous joindre
Infolettre citoyenne
Vous y trouverez les plus récentes actualités et événements en condensé, directement dans votre boîte courriel.
L’infolettre est diffusée une fois par mois.
M’abonner à l’infolettre
Alerte Terrebonne
Messages automatisés pour être informé en cas d’urgence.
Alerte Terrebonne, la plateforme d’appels et de messages textes utilisée par la Ville de Terrebonne lors de mesures d’urgence.
M’inscrire aux alertes
Suivez-nous !
Nous suivre
©2026 Tous droits réservés Ville de Terrebonne
Politique de confidentialité et conditions d’utilisation
Accessibilité universelle
Plan du site
Mon dossier employé
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp/wp-*.php","/wp/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/ville-de-terrebonne/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://terrebonne.ca/wp/wp-includes/js/wp-emoji-release.min.js?ver=7.1.4"}}
/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://terrebonne.ca/wp/wp-includes/js/wp-emoji-loader.min.js
(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a56872145f73fac7',t:'MTc5NDAxMzY5NA=='};var l=window.parent.location,o;try{o=new URL(l.origin).origin}catch(e){try{o=new URL(new URL(l.href).origin).origin}catch(e){o=''}}var u='/cdn-cgi/challenge-platform/scripts/jsd/main.js?ray=a56872145f73fac7',a=document.createElement('script');a.src=o?new URL(u,o).href:u;document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();
|
|
A
|
ca_qc_thetford_mines
|
2026-11-07 00:59:16
|
2026-11-07 00:59:16
|
|
|
C
|
ca_qc_trois_rivieres
|
2026-11-07 00:51:31
|
2026-11-07 00:51:31
|
|
|
A
|
ca_qc_val_dor
|
2026-11-07 01:04:29
|
2026-11-07 01:04:29
|
|
|
A
|
ca_qc_vaudreuil_dorion
|
2026-11-07 00:45:57
|
2026-11-07 00:45:57
|
|
|
A
|
ca_qc_victoriaville
|
2026-11-07 00:48:31
|
2026-11-07 00:48:31
|
|
|
C
|
ca_qc_westmount
|
2026-11-07 00:53:16
|
2026-11-07 00:53:16
|
|
|
C
|
ca_sk
|
2026-11-07 00:52:33
|
2026-11-07 00:52:33
|
|
|
C
|
ca_sk_regina
|
2026-11-07 00:50:50
|
2026-11-07 00:50:50
|
|
|
C
|
ca_sk_saskatoon
|
2026-11-07 00:47:41
|
2026-11-07 00:47:41
|
|
|
C
|
ca_yt
|
2026-11-07 00:51:04
|
2026-11-07 00:51:04
|
|
|
A
|
ca_yt_whitehorse
|
2026-11-07 01:12:14
|
2026-11-07 01:12:14
|
|