1
0
mirror of https://github.com/mail-in-a-box/mailinabox.git synced 2025-04-03 00:07:05 +00:00
mailinabox/management/reporting/capture/db/SqliteConnFactory.py
2022-09-19 14:45:11 -04:00

62 lines
1.9 KiB
Python

#####
##### This file is part of Mail-in-a-Box-LDAP which is released under the
##### terms of the GNU Affero General Public License as published by the
##### Free Software Foundation, either version 3 of the License, or (at
##### your option) any later version. See file LICENSE or go to
##### https://github.com/downtownallday/mailinabox-ldap for full license
##### details.
#####
import os, stat
import sqlite3
import logging
import threading
from .DatabaseConnectionFactory import DatabaseConnectionFactory
log = logging.getLogger(__name__)
class SqliteConnFactory(DatabaseConnectionFactory):
def __init__(self, db_path):
super(SqliteConnFactory, self).__init__()
log.debug('factory for %s', db_path)
self.db_path = db_path
self.db_basename = os.path.basename(db_path)
self.ensure_exists()
def ensure_exists(self):
# create the parent directory and set its permissions
parent = os.path.dirname(self.db_path)
if parent != '' and not os.path.exists(parent):
os.makedirs(parent)
os.chmod(parent,
stat.S_IRWXU |
stat.S_IRGRP |
stat.S_IXGRP |
stat.S_IROTH |
stat.S_IXOTH
)
# if the database is new, create an empty file and set file
# permissions
if not os.path.exists(self.db_path):
log.debug('creating empty database: %s', self.db_basename)
with open(self.db_path, 'w') as fp:
pass
os.chmod(self.db_path,
stat.S_IRUSR |
stat.S_IWUSR
)
def connect(self):
log.debug('opening database %s', self.db_basename)
conn = sqlite3.connect(self.db_path)
conn.row_factory = sqlite3.Row
return conn
def close(self, conn):
log.debug('closing database %s', self.db_basename)
conn.close()