<commit_before>import urllib.request
import http.cookiejar
from bs4 import BeautifulSoup
import os
import re
import time
import sysErrorLog
import socket
import sqlite3

### Create cities DB, feel free to edit the list of cities
def createCitiesDatabase( self ):
	cities = """Akaa, Alahärmä, Alajärvi, Alastaro, Alastaro, Alavieska, Alavus, Anjala, Artjärvi, 
	Asikkala, Askainen, Askola, Aura, Auttoinen, Dragsfjärd, Ekenäs, Elimäki, Eno, Enonkoski, 
	Enontekiö, Espoo, Eura, Eurajoki, Evijärvi, Forssa, Haapajärvi, Haapavesi, Hailuoto, Halikko, 
	Halsua, Hamina, Hankasalmi, Hanko, Harjavalta, Hartola, Hauho, Haukipudas, Haukivuori, Hausjärvi, 
	Heinola, Heinävesi, Helsinki, Himanka, Hirvensalmi, Hollola, Honkajoki, Houtskär, Huittinen, Humppila, 
	Hyrynsalmi, Hyvinkää, Hämeenkoski, Hämeenkyrö, Hämeenlinna, Ii, Iisalmi, Iitti, Ikaalinen, Ilmajoki, 
	Ilomantsi, Imatra, Inari, Ingå, Iniö, Isojoki, Isokyrö, Ivalo, Jaala, Jakobstad, Jalasjärvi, Janakkala, 
	Joensuu, Jokioinen, Joroinen, Joutsa, Joutseno, Juankoski, Jurva, Juuka, Juupajoki, Juva, Jyväskylä, Jämijärvi, 
	Jämsä, Jämsänkoski, Jäppilä, Järvenpää, Kaarina, Kaavi, Kajaani, Kalajoki, Kalvola, Kangasala, Kangaslampi, 
	Kangasniemi, Kankaanpää, Kannonkoski, Kannus, Karhula, Karijoki, Karinainen, Karis, Karjalohja, Karkkila, 
	Karleby, Karstula, Karttula, Karvia, Karvia, Kaskinen, Kauhajoki, Kauhava, Kauniainen, Kaustinen, Keitele, 
	Kemi, Kemijärvi, Keminmaa, Kempele, Kerava, Kerimäki, Kestilä, Kesälahti, Keuruu, Kihniö, Kiihtelysvaara, 
	Kiikala, Kiikoinen, Kiiminki, Kilo, Kilpisjärvi, Kimito, Kinnula, Kinnula, Kirkkonummi, Kisko, Kitee, Kittilä, 
	Kiukainen, Kiuruvesi, Kivijärvi, Kokemäki, Kolari, Konnevesi, Kontiolahti, Korpilahti, Korsholm, Korsnäs, Kortesjärvi, 
	Koski, Kotka, Koukkuniemi, Kouvola, Kristinestad, Kronoby, Kuhmalahti, Kuhmo, Kuhmoinen, Kuivaniemi, Kullaa, Kuopio, 
	Kuortane, Kurikka, Kuru, Kuusamo, Kuusankoski, Kuusjoki, Kylmäkoski, Kyyjärvi, Kälviä, Kärkölä, Kärkölä, Kärsämäki, 
	Köyliö, Lahti, Laihia, Laitila, Lammi, Lapinjärvi, Lapinlahti, Lappajärvi, Lappeenranta, Lappi, Lapua, Larsmo, Laukaa, 
	Lavia, Lehtimäki, Leivonmäki, Lemi, Lempäälä, Lemu, Leppävirta, Lestijärvi, Lieksa, Lieto, Liljendal, Liminka, Liperi, 
	Lohja, Lohtaja, Loimaa, Loimaan Kunta, Loppi, Lovisa, Luhanka, Lumijoki, Luopioinen, Luumäki, Luvia, Längelmäki, 
	Länsi-Turunmaa, Maaninka, Malax, Marttila, Masku, Mellilä, Merijärvi, Merikarvia, Merimasku, Miehikkälä, Mietoinen, 
	Mikkeli, Mouhijärvi, Muhos, Muhos, Multia, Muonio, Muurame, Muurla, Mynämäki, Myrskylä, Mäntsälä, Mänttä, Mäntyharju, 
	Naantali, Nagu, Nakkila, Nastola, Nilsiä, Nivala, Nokia, Noormarkku, Nousiainen, Nurmes, Nurmijärvi, Nurmo, Nykarleby, 
	Oravais, Orimattila, Oripää, Orivesi, Otaniemi, Oulainen, Oulu, Oulunsalo, Outokumpu, Padasjoki, Paimio, Paltamo, Pargas, 
	Parikkala, Parkano, Pedersöre, Pelkosenniemi, Pello, Perho, Perniö, Pernå, Pertteli, Pertunmaa, Petäjävesi, 
	Pieksämäen Maalaiskunta, Pieksämäki, Pielavesi, Pihtipudas, Piikkiö, Piippola, Pirkkala, Pohja, Polvijärvi, Pomarkku, 
	Pori, Pornainen, Porvoo, Posio, Pudasjärvi, Pukkila, Pulkkila, Punkaharju, Punkalaidun, Puolanka, Puumala, Pyhtää, Pyhäjoki, 
	Pyhäjärvi, Pyhäjärvi, Pyhäntä, Pyhäranta, Pyhäselkä, Pylkönmäki, Pälkäne, Pöytyä, Raahe, Raisio, Rantasalmi, Rantsila, 
	Ranua, Rauma, Rautalampi, Rautavaara, Rautjärvi, Reisjärvi, Renko, Replot, Riihimäki, Ristiina, Ristijärvi, Ristinummi, 
	Rovaniemi, Ruokolahti, Ruotsinpyhtää, Ruovesi, Rusko, Ruukki, Rymättylä, Rääkkylä, Saari, Saarijärvi, Sahalahti, Salla, Salo, 
	Sammatti, Sauvo, Savitaipale, Savonlinna, Savonranta, Savukoski, Seinäjoki, Sibbo, Sievi, Siikainen, Siikajoki, Siilinjärvi, 
	Simo, Simo, Siuntio, Sodankylä, Soini, Somero, Sonkajärvi, Sotkamo, Sulkava, Sumiainen, Suodenniemi, Suolahti, Suomusjärvi, 
	Suomussalmi, Suonenjoki, Sysmä, Säkylä, Särkisalo, Säynätsalo, Taipalsaari, Taivalkoski, Taivassalo, Tammela, Tampere, 
	Tarvasjoki, Teekkarikylä, Tervakoski, Tervo, Tervola, Teuva, Tohmajärvi, Toholampi, Toijala, Toivakka, Tornio, Turku, 
	Tuulos, Tuupovaara, Tuusniemi, Tuusula, Tyrnävä, Töysä, Ullava, Ulvila, Urjala, Utajärvi, Utsjoki, Uurainen, Uusikaupunki, 
	Vaala, Vaasa, Vahto, Valkeakoski, Valkeala, Valtimo, Vammala, Vampula, Vantaa, Varkaus, Varpaisjärvi, Vehmaa, Vehmersalmi, 
	Velkua, Vesanto, Vesilahti, Veteli, Vieremä, Vihanti, Vihti, Viiala, Viitasaari, Viljakkala, Vilppula, Vimpeli, Virrat, 
	Virtasalmi, Vuolijoki, Vähäkyrö, Västanfjärd, Vörå, Yli-Ii, Ylihärmä, Ylikiiminki, Ylistaro, Ylitornio, Ylivieska, Ylämaa, 
	Yläne, Ylöjärvi, Ypäjä, Äetsä, Ähtäri, Äänekoski"""

	citiesList = cities.split(",")

	try:
		db = sqlite3.connect("modules/data/fmiCities.db")

		cursor = db.cursor()

		## Drop the table if it exists
		cursor.execute("""
				DROP TABLE IF EXISTS cities
				""")
		## Create cities table
		cursor.execute("""
				CREATE TABLE IF NOT EXISTS cities(id INTEGER PRIMARY KEY NOT NULL, city TEXT)
				""")
		## Create nicks table
		cursor.execute("""
				CREATE TABLE IF NOT EXISTS nicks(id INTEGER PRIMARY KEY NOT NULL, nick TEXT, city TEXT)
				""")
		## Loop through the cities and add them to the db
		for city in citiesList:
			cursor.execute("""
				INSERT INTO cities(city) VALUES (?)
				""", (city.strip(),))
		## Commit changes to the db
		db.commit()
	except Exception as e:
		## Roll back if some error occured
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createCitiesDatabase() stating: {0}".format(e)
		sysErrorLog.log( self ) ## LOG the error
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## END

def createAutomodesDatabase( self ):
	try:
		db = sqlite3.connect("modules/data/automodes.db")

		cursor = db.cursor()
		cursor.execute("""DROP TABLE IF EXISTS automodes""")
		cursor.execute("""
			CREATE TABLE IF NOT EXISTS automodes(id INTEGER PRIMARY KEY NOT NULL,
			identhost TEXT, channel TEXT, mode TEXT)""")
		db.commit()
	except Exception as e:
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createAutomodesDataBase() stating: {0}".format(e)
		sysErrorLog.log ( self )
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## END

def createSeenDatabase( self ):
	try:
		db = sqlite3.connect(self.config["log-path"]+"seen.db")

		cursor = db.cursor()
		cursor.execute("""DROP TABLE IF EXISTS seendb""")
		cursor.execute("""CREATE TABLE IF NOT EXISTS seendb(id INTEGER PRIMARY KEY NOT NULL,
			nick TEXT, channel TEXT, time TEXT, usertxt TEXT)""")
		db.commit()
	except Exception as e:
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createSeenDataBase() stating: {0}".format(e)
		sysErrorLog.log ( self )
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## END

def createTellDatabase( self ):
	try:
		db = sqlite3.connect("modules/data/tell.db")
		cur = db.cursor()
		cur.execute("""DROP TABLE IF EXISTS tell""")
		cur.execute("""CREATE TABLE IF NOT EXISTS tell(id INTEGER PRIMARY KEY NOT NULL,
			nick TEXT, who TEXT, channel TEXT, message TEXT)""")
		db.commit()
	except Exception as e:
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createTellDatabase() stating: {0}".format(e)
		sysErrorLog.log ( self )
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## End

## Create Database for commits
def createCommitsDatabase( self ):
	try:
		db = sqlite3.connect("sysmodules/data/commits.db")
		cur = db.cursor()
		cur.execute("""DROP TABLE IF EXISTS commits""")
		cur.execute("""CREATE TABLE IF NOT EXISTS commits(id INTEGER PRIMARY KEY NOT NULL, rev INTEGER)""")
		db.commit()
	except Exception as e:
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createCommitsDatabase() stating: {0}".format(e)
		sysErrorLog.log ( self )
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## End

## Get HTML for given url
def getHtml( self, url, useragent):
	try:
		cookies = http.cookiejar.CookieJar()
		opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookies))
		if useragent:
			user_agent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"
			headers = { 'User-Agent' : user_agent }
			req = urllib.request.Request(url, None, headers)
		else:
			req = urllib.request.Request(url, None)
		html = opener.open(req)
		return(html)
	except urllib.error.URLError as e:
		print(e.reason)
		if e.reason == "Forbidden":
			self.send_chan("~ Forbidden")
			self.errormsg = "[ERROR]-[syscmd] getHtml() stating: Forbidden {0}".format(url)<commit_msg>I always forget these fscking prints<commit_after>import urllib.request
import http.cookiejar
from bs4 import BeautifulSoup
import os
import re
import time
import sysErrorLog
import socket
import sqlite3

### Create cities DB, feel free to edit the list of cities
def createCitiesDatabase( self ):
	cities = """Akaa, Alahärmä, Alajärvi, Alastaro, Alastaro, Alavieska, Alavus, Anjala, Artjärvi, 
	Asikkala, Askainen, Askola, Aura, Auttoinen, Dragsfjärd, Ekenäs, Elimäki, Eno, Enonkoski, 
	Enontekiö, Espoo, Eura, Eurajoki, Evijärvi, Forssa, Haapajärvi, Haapavesi, Hailuoto, Halikko, 
	Halsua, Hamina, Hankasalmi, Hanko, Harjavalta, Hartola, Hauho, Haukipudas, Haukivuori, Hausjärvi, 
	Heinola, Heinävesi, Helsinki, Himanka, Hirvensalmi, Hollola, Honkajoki, Houtskär, Huittinen, Humppila, 
	Hyrynsalmi, Hyvinkää, Hämeenkoski, Hämeenkyrö, Hämeenlinna, Ii, Iisalmi, Iitti, Ikaalinen, Ilmajoki, 
	Ilomantsi, Imatra, Inari, Ingå, Iniö, Isojoki, Isokyrö, Ivalo, Jaala, Jakobstad, Jalasjärvi, Janakkala, 
	Joensuu, Jokioinen, Joroinen, Joutsa, Joutseno, Juankoski, Jurva, Juuka, Juupajoki, Juva, Jyväskylä, Jämijärvi, 
	Jämsä, Jämsänkoski, Jäppilä, Järvenpää, Kaarina, Kaavi, Kajaani, Kalajoki, Kalvola, Kangasala, Kangaslampi, 
	Kangasniemi, Kankaanpää, Kannonkoski, Kannus, Karhula, Karijoki, Karinainen, Karis, Karjalohja, Karkkila, 
	Karleby, Karstula, Karttula, Karvia, Karvia, Kaskinen, Kauhajoki, Kauhava, Kauniainen, Kaustinen, Keitele, 
	Kemi, Kemijärvi, Keminmaa, Kempele, Kerava, Kerimäki, Kestilä, Kesälahti, Keuruu, Kihniö, Kiihtelysvaara, 
	Kiikala, Kiikoinen, Kiiminki, Kilo, Kilpisjärvi, Kimito, Kinnula, Kinnula, Kirkkonummi, Kisko, Kitee, Kittilä, 
	Kiukainen, Kiuruvesi, Kivijärvi, Kokemäki, Kolari, Konnevesi, Kontiolahti, Korpilahti, Korsholm, Korsnäs, Kortesjärvi, 
	Koski, Kotka, Koukkuniemi, Kouvola, Kristinestad, Kronoby, Kuhmalahti, Kuhmo, Kuhmoinen, Kuivaniemi, Kullaa, Kuopio, 
	Kuortane, Kurikka, Kuru, Kuusamo, Kuusankoski, Kuusjoki, Kylmäkoski, Kyyjärvi, Kälviä, Kärkölä, Kärkölä, Kärsämäki, 
	Köyliö, Lahti, Laihia, Laitila, Lammi, Lapinjärvi, Lapinlahti, Lappajärvi, Lappeenranta, Lappi, Lapua, Larsmo, Laukaa, 
	Lavia, Lehtimäki, Leivonmäki, Lemi, Lempäälä, Lemu, Leppävirta, Lestijärvi, Lieksa, Lieto, Liljendal, Liminka, Liperi, 
	Lohja, Lohtaja, Loimaa, Loimaan Kunta, Loppi, Lovisa, Luhanka, Lumijoki, Luopioinen, Luumäki, Luvia, Längelmäki, 
	Länsi-Turunmaa, Maaninka, Malax, Marttila, Masku, Mellilä, Merijärvi, Merikarvia, Merimasku, Miehikkälä, Mietoinen, 
	Mikkeli, Mouhijärvi, Muhos, Muhos, Multia, Muonio, Muurame, Muurla, Mynämäki, Myrskylä, Mäntsälä, Mänttä, Mäntyharju, 
	Naantali, Nagu, Nakkila, Nastola, Nilsiä, Nivala, Nokia, Noormarkku, Nousiainen, Nurmes, Nurmijärvi, Nurmo, Nykarleby, 
	Oravais, Orimattila, Oripää, Orivesi, Otaniemi, Oulainen, Oulu, Oulunsalo, Outokumpu, Padasjoki, Paimio, Paltamo, Pargas, 
	Parikkala, Parkano, Pedersöre, Pelkosenniemi, Pello, Perho, Perniö, Pernå, Pertteli, Pertunmaa, Petäjävesi, 
	Pieksämäen Maalaiskunta, Pieksämäki, Pielavesi, Pihtipudas, Piikkiö, Piippola, Pirkkala, Pohja, Polvijärvi, Pomarkku, 
	Pori, Pornainen, Porvoo, Posio, Pudasjärvi, Pukkila, Pulkkila, Punkaharju, Punkalaidun, Puolanka, Puumala, Pyhtää, Pyhäjoki, 
	Pyhäjärvi, Pyhäjärvi, Pyhäntä, Pyhäranta, Pyhäselkä, Pylkönmäki, Pälkäne, Pöytyä, Raahe, Raisio, Rantasalmi, Rantsila, 
	Ranua, Rauma, Rautalampi, Rautavaara, Rautjärvi, Reisjärvi, Renko, Replot, Riihimäki, Ristiina, Ristijärvi, Ristinummi, 
	Rovaniemi, Ruokolahti, Ruotsinpyhtää, Ruovesi, Rusko, Ruukki, Rymättylä, Rääkkylä, Saari, Saarijärvi, Sahalahti, Salla, Salo, 
	Sammatti, Sauvo, Savitaipale, Savonlinna, Savonranta, Savukoski, Seinäjoki, Sibbo, Sievi, Siikainen, Siikajoki, Siilinjärvi, 
	Simo, Simo, Siuntio, Sodankylä, Soini, Somero, Sonkajärvi, Sotkamo, Sulkava, Sumiainen, Suodenniemi, Suolahti, Suomusjärvi, 
	Suomussalmi, Suonenjoki, Sysmä, Säkylä, Särkisalo, Säynätsalo, Taipalsaari, Taivalkoski, Taivassalo, Tammela, Tampere, 
	Tarvasjoki, Teekkarikylä, Tervakoski, Tervo, Tervola, Teuva, Tohmajärvi, Toholampi, Toijala, Toivakka, Tornio, Turku, 
	Tuulos, Tuupovaara, Tuusniemi, Tuusula, Tyrnävä, Töysä, Ullava, Ulvila, Urjala, Utajärvi, Utsjoki, Uurainen, Uusikaupunki, 
	Vaala, Vaasa, Vahto, Valkeakoski, Valkeala, Valtimo, Vammala, Vampula, Vantaa, Varkaus, Varpaisjärvi, Vehmaa, Vehmersalmi, 
	Velkua, Vesanto, Vesilahti, Veteli, Vieremä, Vihanti, Vihti, Viiala, Viitasaari, Viljakkala, Vilppula, Vimpeli, Virrat, 
	Virtasalmi, Vuolijoki, Vähäkyrö, Västanfjärd, Vörå, Yli-Ii, Ylihärmä, Ylikiiminki, Ylistaro, Ylitornio, Ylivieska, Ylämaa, 
	Yläne, Ylöjärvi, Ypäjä, Äetsä, Ähtäri, Äänekoski"""

	citiesList = cities.split(",")

	try:
		db = sqlite3.connect("modules/data/fmiCities.db")

		cursor = db.cursor()

		## Drop the table if it exists
		cursor.execute("""
				DROP TABLE IF EXISTS cities
				""")
		## Create cities table
		cursor.execute("""
				CREATE TABLE IF NOT EXISTS cities(id INTEGER PRIMARY KEY NOT NULL, city TEXT)
				""")
		## Create nicks table
		cursor.execute("""
				CREATE TABLE IF NOT EXISTS nicks(id INTEGER PRIMARY KEY NOT NULL, nick TEXT, city TEXT)
				""")
		## Loop through the cities and add them to the db
		for city in citiesList:
			cursor.execute("""
				INSERT INTO cities(city) VALUES (?)
				""", (city.strip(),))
		## Commit changes to the db
		db.commit()
	except Exception as e:
		## Roll back if some error occured
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createCitiesDatabase() stating: {0}".format(e)
		sysErrorLog.log( self ) ## LOG the error
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## END

def createAutomodesDatabase( self ):
	try:
		db = sqlite3.connect("modules/data/automodes.db")

		cursor = db.cursor()
		cursor.execute("""DROP TABLE IF EXISTS automodes""")
		cursor.execute("""
			CREATE TABLE IF NOT EXISTS automodes(id INTEGER PRIMARY KEY NOT NULL,
			identhost TEXT, channel TEXT, mode TEXT)""")
		db.commit()
	except Exception as e:
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createAutomodesDataBase() stating: {0}".format(e)
		sysErrorLog.log ( self )
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## END

def createSeenDatabase( self ):
	try:
		db = sqlite3.connect(self.config["log-path"]+"seen.db")

		cursor = db.cursor()
		cursor.execute("""DROP TABLE IF EXISTS seendb""")
		cursor.execute("""CREATE TABLE IF NOT EXISTS seendb(id INTEGER PRIMARY KEY NOT NULL,
			nick TEXT, channel TEXT, time TEXT, usertxt TEXT)""")
		db.commit()
	except Exception as e:
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createSeenDataBase() stating: {0}".format(e)
		sysErrorLog.log ( self )
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## END

def createTellDatabase( self ):
	try:
		db = sqlite3.connect("modules/data/tell.db")
		cur = db.cursor()
		cur.execute("""DROP TABLE IF EXISTS tell""")
		cur.execute("""CREATE TABLE IF NOT EXISTS tell(id INTEGER PRIMARY KEY NOT NULL,
			nick TEXT, who TEXT, channel TEXT, message TEXT)""")
		db.commit()
	except Exception as e:
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createTellDatabase() stating: {0}".format(e)
		sysErrorLog.log ( self )
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## End

## Create Database for commits
def createCommitsDatabase( self ):
	try:
		db = sqlite3.connect("sysmodules/data/commits.db")
		cur = db.cursor()
		cur.execute("""DROP TABLE IF EXISTS commits""")
		cur.execute("""CREATE TABLE IF NOT EXISTS commits(id INTEGER PRIMARY KEY NOT NULL, rev INTEGER)""")
		db.commit()
	except Exception as e:
		db.rollback()
		self.errormsg = "[ERROR]-[syscmd] createCommitsDatabase() stating: {0}".format(e)
		sysErrorLog.log ( self )
		if self.config["debug"]:
			print("{0}{1}{2}".format(self.color("red"), self.errormsg, self.color("end")))
		raise e
	finally:
		db.close()
		return True
## End

## Get HTML for given url
def getHtml( self, url, useragent):
	try:
		cookies = http.cookiejar.CookieJar()
		opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cookies))
		if useragent:
			user_agent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)"
			headers = { 'User-Agent' : user_agent }
			req = urllib.request.Request(url, None, headers)
		else:
			req = urllib.request.Request(url, None)
		html = opener.open(req)
		return(html)
	except urllib.error.URLError as e:
		if e.reason == "Forbidden":
			self.send_chan("~ Forbidden")
			self.errormsg = "[ERROR]-[syscmd] getHtml() stating: Forbidden {0}".format(url)
{'fraction_non_alphanumeric': 0.1279887482419128, 'fraction_numerical': 0.004163150492264417, 'mean_word_length': 5.357653791130186, 'pattern_counts': {'":': 2, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1508993', 'n_tokens_mistral': 7979, 'n_tokens_neox': 7368, 'n_words': 1741}