aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/model/list.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman_pgp/model/list.py')
-rw-r--r--src/mailman_pgp/model/list.py32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/mailman_pgp/model/list.py b/src/mailman_pgp/model/list.py
index e53d61b..764dc1b 100644
--- a/src/mailman_pgp/model/list.py
+++ b/src/mailman_pgp/model/list.py
@@ -1,16 +1,17 @@
""""""
-from multiprocessing import SimpleQueue
from os.path import exists, isfile, join
-from mailman.config import config as mailman_config, config
+from mailman.config import config as mailman_config
from mailman.database.types import Enum, SAUnicode
from mailman.interfaces.action import Action
from mailman.model.mailinglist import MailingList
from pgpy import PGPKey
from public import public
from sqlalchemy import Boolean, Column, Integer
+from sqlalchemy.orm import reconstructor
+from mailman_pgp.config import config
from mailman_pgp.model.base import Base
from mailman_pgp.pgp.keygen import ListKeyGenerator
@@ -29,19 +30,21 @@ class EncryptedMailingList(Base):
def __init__(self, mlist):
super().__init__()
self.list_id = mlist.list_id
+ self._init()
self._mlist = mlist
+ self._generate(mlist)
+
+ @reconstructor
+ def _init(self):
+ self._mlist = None
self._key = None
- self._key_queue = None
self._key_generator = None
- self._generate(mlist)
def _generate(self, mlist):
- self._key_queue = SimpleQueue()
self._key_generator = ListKeyGenerator(config.pgp.keypair_config,
mlist.display_name,
mlist.posting_address,
mlist.request_address,
- self._key_queue,
self.key_path)
self._key_generator.start()
@@ -49,23 +52,19 @@ class EncryptedMailingList(Base):
def mlist(self):
if self._mlist is not None:
return self._mlist
- return mailman_config.db.query(MailingList).filter_by(
+ return mailman_config.db.store.query(MailingList).filter_by(
_list_id=self.list_id).first()
@property
def key(self):
if self._key is None:
- # First try the queue
- if self._key_queue is not None and not self._key_queue.empty():
- self._key = self._key_queue.get()
- # Then check the file
- elif exists(self.key_path) and isfile(self.key_path):
+ # Check the file
+ if exists(self.key_path) and isfile(self.key_path):
self._key = PGPKey.from_file(self.key_path)
else:
# Check if key generator is running or what? Restart it if not.
- # If we race it shutting down and saving the key file + queue
- # it will simply check the key_file exists and put it into a
- # queue for us.
+ # If we race it shutting down and saving the key file
+ # it will simply check the key_file exists and exit.
if self._key_generator is None or \
not self._key_generator.is_alive():
self._generate(self.mlist)
@@ -74,5 +73,4 @@ class EncryptedMailingList(Base):
@property
def key_path(self):
return join(config.pgp.keydir_config['list_keydir'],
- self.list_id,
- '.asc')
+ self.list_id + '.asc')