|
|
@@ -55,6 +55,7 @@ class SitesDB(object): |
|
|
|
def __init__(self, config): |
|
|
|
"""Set up the manager with an attribute for the BotConfig object.""" |
|
|
|
self.config = config |
|
|
|
self._sites = {} # Internal site cache |
|
|
|
self._sitesdb = path.join(config.root_dir, "sites.db") |
|
|
|
self._cookie_file = path.join(config.root_dir, ".cookies") |
|
|
|
self._cookiejar = None |
|
|
@@ -103,6 +104,19 @@ class SitesDB(object): |
|
|
|
with sqlite.connect(self._sitesdb) as conn: |
|
|
|
conn.executescript(script) |
|
|
|
|
|
|
|
def _get_site_object(self, name): |
|
|
|
"""Return the site from our cache, or create it if it doesn't exist. |
|
|
|
|
|
|
|
This is essentially just a wrapper around _make_site_object that |
|
|
|
returns the same object each time a specific site is asked for. |
|
|
|
""" |
|
|
|
try: |
|
|
|
return self._sites[name] |
|
|
|
except KeyError: |
|
|
|
site = self._make_site_object(name) |
|
|
|
self._sites[name] = site |
|
|
|
return site |
|
|
|
|
|
|
|
def _load_site_from_sitesdb(self, name): |
|
|
|
"""Return all information stored in the sitesdb relating to given site. |
|
|
|
|
|
|
@@ -221,7 +235,12 @@ class SitesDB(object): |
|
|
|
conn.executemany("INSERT INTO namespaces VALUES (?, ?, ?, ?)", ns_data) |
|
|
|
|
|
|
|
def _remove_site_from_sitesdb(self, name): |
|
|
|
"""Remove a site by name from the sitesdb.""" |
|
|
|
"""Remove a site by name from the sitesdb and the internal cache.""" |
|
|
|
try: |
|
|
|
del self._sites[name] |
|
|
|
except KeyError: |
|
|
|
pass |
|
|
|
|
|
|
|
with sqlite.connect(self._sitesdb) as conn: |
|
|
|
cursor = conn.execute("DELETE FROM sites WHERE site_name = ?", (name,)) |
|
|
|
if cursor.rowcount == 0: |
|
|
@@ -267,23 +286,23 @@ class SitesDB(object): |
|
|
|
except KeyError: |
|
|
|
e = "Default site is not specified in config." |
|
|
|
raise SiteNotFoundError(e) |
|
|
|
return self._make_site_object(default) |
|
|
|
return self._get_site_object(default) |
|
|
|
|
|
|
|
# Name arg given, but don't look at others unless `name` isn't found: |
|
|
|
if name: |
|
|
|
try: |
|
|
|
return self._make_site_object(name) |
|
|
|
return self._get_site_object(name) |
|
|
|
except SiteNotFoundError: |
|
|
|
if project and lang: |
|
|
|
name = self._get_site_name_from_sitesdb(project, lang) |
|
|
|
if name: |
|
|
|
return self._make_site_object(name) |
|
|
|
return self._get_site_object(name) |
|
|
|
raise |
|
|
|
|
|
|
|
# If we end up here, then project and lang are the only args given: |
|
|
|
name = self._get_site_name_from_sitesdb(project, lang) |
|
|
|
if name: |
|
|
|
return self._make_site_object(name) |
|
|
|
return self._get_site_object(name) |
|
|
|
e = "Site '{0}:{1}' not found in the sitesdb.".format(project, lang) |
|
|
|
raise SiteNotFoundError(e) |
|
|
|
|
|
|
@@ -333,6 +352,7 @@ class SitesDB(object): |
|
|
|
search_config=search_config) |
|
|
|
|
|
|
|
self._add_site_to_sitesdb(site) |
|
|
|
self._sites[site.name()] = site |
|
|
|
return site |
|
|
|
|
|
|
|
def remove_site(self, name=None, project=None, lang=None): |
|
|
|