summaryrefslogtreecommitdiff
path: root/src/mailman/model
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/model')
-rw-r--r--src/mailman/model/address.py9
-rw-r--r--src/mailman/model/bans.py7
-rw-r--r--src/mailman/model/bounce.py10
-rw-r--r--src/mailman/model/cache.py7
-rw-r--r--src/mailman/model/domain.py7
-rw-r--r--src/mailman/model/language.py5
-rw-r--r--src/mailman/model/mailinglist.py54
-rw-r--r--src/mailman/model/member.py6
-rw-r--r--src/mailman/model/message.py9
-rw-r--r--src/mailman/model/mime.py6
-rw-r--r--src/mailman/model/pending.py11
-rw-r--r--src/mailman/model/preferences.py6
-rw-r--r--src/mailman/model/requests.py12
-rw-r--r--src/mailman/model/template.py13
-rw-r--r--src/mailman/model/tests/test_listmanager.py4
-rw-r--r--src/mailman/model/user.py8
-rw-r--r--src/mailman/model/workflow.py11
17 files changed, 98 insertions, 87 deletions
diff --git a/src/mailman/model/address.py b/src/mailman/model/address.py
index 7a3485378..a31e9a429 100644
--- a/src/mailman/model/address.py
+++ b/src/mailman/model/address.py
@@ -20,10 +20,11 @@
from email.utils import formataddr
from mailman import public
from mailman.database.model import Model
+from mailman.database.types import SAUnicode
from mailman.interfaces.address import (
AddressVerificationEvent, IAddress, IEmailValidator)
from mailman.utilities.datetime import now
-from sqlalchemy import Column, DateTime, ForeignKey, Integer, Unicode
+from sqlalchemy import Column, DateTime, ForeignKey, Integer
from sqlalchemy.orm import backref, relationship
from zope.component import getUtility
from zope.event import notify
@@ -38,9 +39,9 @@ class Address(Model):
__tablename__ = 'address'
id = Column(Integer, primary_key=True)
- email = Column(Unicode, index=True)
- _original = Column(Unicode)
- display_name = Column(Unicode)
+ email = Column(SAUnicode, index=True)
+ _original = Column(SAUnicode)
+ display_name = Column(SAUnicode)
_verified_on = Column('verified_on', DateTime)
registered_on = Column(DateTime)
diff --git a/src/mailman/model/bans.py b/src/mailman/model/bans.py
index e690145a4..e2b6490eb 100644
--- a/src/mailman/model/bans.py
+++ b/src/mailman/model/bans.py
@@ -22,8 +22,9 @@ import re
from mailman import public
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
+from mailman.database.types import SAUnicode
from mailman.interfaces.bans import IBan, IBanManager
-from sqlalchemy import Column, Integer, Unicode
+from sqlalchemy import Column, Integer
from zope.interface import implementer
@@ -35,8 +36,8 @@ class Ban(Model):
__tablename__ = 'ban'
id = Column(Integer, primary_key=True)
- email = Column(Unicode, index=True)
- list_id = Column(Unicode, index=True)
+ email = Column(SAUnicode, index=True)
+ list_id = Column(SAUnicode, index=True)
def __init__(self, email, list_id):
super().__init__()
diff --git a/src/mailman/model/bounce.py b/src/mailman/model/bounce.py
index b7f217048..856d91f20 100644
--- a/src/mailman/model/bounce.py
+++ b/src/mailman/model/bounce.py
@@ -20,11 +20,11 @@
from mailman import public
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
-from mailman.database.types import Enum
+from mailman.database.types import Enum, SAUnicode
from mailman.interfaces.bounce import (
BounceContext, IBounceEvent, IBounceProcessor)
from mailman.utilities.datetime import now
-from sqlalchemy import Boolean, Column, DateTime, Integer, Unicode
+from sqlalchemy import Boolean, Column, DateTime, Integer
from zope.interface import implementer
@@ -36,10 +36,10 @@ class BounceEvent(Model):
__tablename__ = 'bounceevent'
id = Column(Integer, primary_key=True)
- list_id = Column(Unicode)
- email = Column(Unicode)
+ list_id = Column(SAUnicode)
+ email = Column(SAUnicode)
timestamp = Column(DateTime)
- message_id = Column(Unicode)
+ message_id = Column(SAUnicode)
context = Column(Enum(BounceContext))
processed = Column(Boolean)
diff --git a/src/mailman/model/cache.py b/src/mailman/model/cache.py
index d9c0d0445..6be5fbc9d 100644
--- a/src/mailman/model/cache.py
+++ b/src/mailman/model/cache.py
@@ -26,9 +26,10 @@ from mailman import public
from mailman.config import config
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
+from mailman.database.types import SAUnicode
from mailman.interfaces.cache import ICacheManager
from mailman.utilities.datetime import now
-from sqlalchemy import Boolean, Column, DateTime, Integer, Unicode
+from sqlalchemy import Boolean, Column, DateTime, Integer
from zope.interface import implementer
@@ -36,8 +37,8 @@ class CacheEntry(Model):
__tablename__ = 'file_cache'
id = Column(Integer, primary_key=True)
- key = Column(Unicode)
- file_id = Column(Unicode)
+ key = Column(SAUnicode)
+ file_id = Column(SAUnicode)
is_bytes = Column(Boolean)
created_on = Column(DateTime)
expires_on = Column(DateTime)
diff --git a/src/mailman/model/domain.py b/src/mailman/model/domain.py
index 575d157cf..5bb569585 100644
--- a/src/mailman/model/domain.py
+++ b/src/mailman/model/domain.py
@@ -20,13 +20,14 @@
from mailman import public
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
+from mailman.database.types import SAUnicode
from mailman.interfaces.domain import (
BadDomainSpecificationError, DomainCreatedEvent, DomainCreatingEvent,
DomainDeletedEvent, DomainDeletingEvent, IDomain, IDomainManager)
from mailman.interfaces.user import IUser
from mailman.interfaces.usermanager import IUserManager
from mailman.model.mailinglist import MailingList
-from sqlalchemy import Column, Integer, Unicode
+from sqlalchemy import Column, Integer
from sqlalchemy.orm import relationship
from zope.component import getUtility
from zope.event import notify
@@ -42,8 +43,8 @@ class Domain(Model):
id = Column(Integer, primary_key=True)
- mail_host = Column(Unicode)
- description = Column(Unicode)
+ mail_host = Column(SAUnicode)
+ description = Column(SAUnicode)
owners = relationship('User',
secondary='domain_owner',
backref='domains')
diff --git a/src/mailman/model/language.py b/src/mailman/model/language.py
index f0a3326a8..596e580e1 100644
--- a/src/mailman/model/language.py
+++ b/src/mailman/model/language.py
@@ -19,8 +19,9 @@
from mailman import public
from mailman.database.model import Model
+from mailman.database.types import SAUnicode
from mailman.interfaces.languages import ILanguage
-from sqlalchemy import Column, Integer, Unicode
+from sqlalchemy import Column, Integer
from zope.interface import implementer
@@ -32,4 +33,4 @@ class Language(Model):
__tablename__ = 'language'
id = Column(Integer, primary_key=True)
- code = Column(Unicode)
+ code = Column(SAUnicode)
diff --git a/src/mailman/model/mailinglist.py b/src/mailman/model/mailinglist.py
index 9d7d63d9b..933384797 100644
--- a/src/mailman/model/mailinglist.py
+++ b/src/mailman/model/mailinglist.py
@@ -23,7 +23,7 @@ from mailman import public
from mailman.config import config
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
-from mailman.database.types import Enum
+from mailman.database.types import Enum, SAUnicode
from mailman.interfaces.action import Action, FilterAction
from mailman.interfaces.address import IAddress
from mailman.interfaces.archiver import ArchivePolicy
@@ -51,7 +51,7 @@ from mailman.utilities.filesystem import makedirs
from mailman.utilities.string import expand
from sqlalchemy import (
Boolean, Column, DateTime, Float, ForeignKey, Integer, Interval,
- LargeBinary, PickleType, Unicode)
+ LargeBinary, PickleType)
from sqlalchemy.event import listen
from sqlalchemy.ext.hybrid import hybrid_property
from sqlalchemy.orm import relationship
@@ -78,9 +78,9 @@ class MailingList(Model):
# are currently missing.
# List identity
- list_name = Column(Unicode, index=True)
- mail_host = Column(Unicode, index=True)
- _list_id = Column('list_id', Unicode, index=True, unique=True)
+ list_name = Column(SAUnicode, index=True)
+ mail_host = Column(SAUnicode, index=True)
+ _list_id = Column('list_id', SAUnicode, index=True, unique=True)
allow_list_posts = Column(Boolean)
include_rfc2369_headers = Column(Boolean)
advertised = Column(Boolean)
@@ -106,11 +106,11 @@ class MailingList(Model):
# Automatic responses.
autoresponse_grace_period = Column(Interval)
autorespond_owner = Column(Enum(ResponseAction))
- autoresponse_owner_text = Column(Unicode)
+ autoresponse_owner_text = Column(SAUnicode)
autorespond_postings = Column(Enum(ResponseAction))
- autoresponse_postings_text = Column(Unicode)
+ autoresponse_postings_text = Column(SAUnicode)
autorespond_requests = Column(Enum(ResponseAction))
- autoresponse_request_text = Column(Unicode)
+ autoresponse_request_text = Column(SAUnicode)
# Content filters.
filter_action = Column(Enum(FilterAction))
filter_content = Column(Boolean)
@@ -118,7 +118,7 @@ class MailingList(Model):
convert_html_to_plaintext = Column(Boolean)
# Bounces.
bounce_info_stale_after = Column(Interval) # XXX
- bounce_matching_headers = Column(Unicode) # XXX
+ bounce_matching_headers = Column(SAUnicode) # XXX
bounce_notify_owner_on_disable = Column(Boolean) # XXX
bounce_notify_owner_on_removal = Column(Boolean) # XXX
bounce_score_threshold = Column(Integer) # XXX
@@ -130,7 +130,7 @@ class MailingList(Model):
# Miscellaneous
default_member_action = Column(Enum(Action))
default_nonmember_action = Column(Enum(Action))
- description = Column(Unicode)
+ description = Column(SAUnicode)
digests_enabled = Column(Boolean)
digest_is_default = Column(Boolean)
digest_send_periodic = Column(Boolean)
@@ -144,36 +144,36 @@ class MailingList(Model):
gateway_to_mail = Column(Boolean)
gateway_to_news = Column(Boolean)
hold_these_nonmembers = Column(PickleType)
- info = Column(Unicode)
- linked_newsgroup = Column(Unicode)
+ info = Column(SAUnicode)
+ linked_newsgroup = Column(SAUnicode)
max_days_to_hold = Column(Integer)
max_message_size = Column(Integer)
max_num_recipients = Column(Integer)
- member_moderation_notice = Column(Unicode)
+ member_moderation_notice = Column(SAUnicode)
mime_is_default_digest = Column(Boolean)
# FIXME: There should be no moderator_password
moderator_password = Column(LargeBinary) # TODO : was RawStr()
newsgroup_moderation = Column(Enum(NewsgroupModeration))
nntp_prefix_subject_too = Column(Boolean)
- nonmember_rejection_notice = Column(Unicode)
+ nonmember_rejection_notice = Column(SAUnicode)
obscure_addresses = Column(Boolean)
- owner_chain = Column(Unicode)
- owner_pipeline = Column(Unicode)
+ owner_chain = Column(SAUnicode)
+ owner_pipeline = Column(SAUnicode)
personalize = Column(Enum(Personalization))
post_id = Column(Integer)
- posting_chain = Column(Unicode)
- posting_pipeline = Column(Unicode)
- _preferred_language = Column('preferred_language', Unicode)
- display_name = Column(Unicode)
+ posting_chain = Column(SAUnicode)
+ posting_pipeline = Column(SAUnicode)
+ _preferred_language = Column('preferred_language', SAUnicode)
+ display_name = Column(SAUnicode)
reject_these_nonmembers = Column(PickleType)
reply_goes_to_list = Column(Enum(ReplyToMunging))
- reply_to_address = Column(Unicode)
+ reply_to_address = Column(SAUnicode)
require_explicit_destination = Column(Boolean)
respond_to_post_requests = Column(Boolean)
scrub_nondigest = Column(Boolean)
send_goodbye_message = Column(Boolean)
send_welcome_message = Column(Boolean)
- subject_prefix = Column(Unicode)
+ subject_prefix = Column(SAUnicode)
subscription_policy = Column(Enum(SubscriptionPolicy))
topics = Column(PickleType)
topics_bodylines_limit = Column(Integer)
@@ -487,7 +487,7 @@ class AcceptableAlias(Model):
Integer, ForeignKey('mailinglist.id'),
index=True, nullable=False)
mailing_list = relationship('MailingList', backref='acceptablealias')
- alias = Column(Unicode, index=True, nullable=False)
+ alias = Column(SAUnicode, index=True, nullable=False)
def __init__(self, mailing_list, alias):
super().__init__()
@@ -545,7 +545,7 @@ class ListArchiver(Model):
index=True, nullable=False)
mailing_list = relationship('MailingList')
- name = Column(Unicode, nullable=False)
+ name = Column(SAUnicode, nullable=False)
_is_enabled = Column(Boolean)
def __init__(self, mailing_list, archiver_name, system_archiver):
@@ -617,9 +617,9 @@ class HeaderMatch(Model):
index=True, nullable=False)
_position = Column('position', Integer, index=True, default=0)
- header = Column(Unicode)
- pattern = Column(Unicode)
- chain = Column(Unicode, nullable=True)
+ header = Column(SAUnicode)
+ pattern = Column(SAUnicode)
+ chain = Column(SAUnicode, nullable=True)
def __init__(self, **kw):
position = kw.pop('position', None)
diff --git a/src/mailman/model/member.py b/src/mailman/model/member.py
index 3aaa5e392..aacaa73b6 100644
--- a/src/mailman/model/member.py
+++ b/src/mailman/model/member.py
@@ -21,7 +21,7 @@ from mailman import public
from mailman.core.constants import system_preferences
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
-from mailman.database.types import Enum, UUID
+from mailman.database.types import Enum, SAUnicode, UUID
from mailman.interfaces.action import Action
from mailman.interfaces.address import IAddress
from mailman.interfaces.listmanager import IListManager
@@ -30,7 +30,7 @@ from mailman.interfaces.member import (
from mailman.interfaces.user import IUser, UnverifiedAddressError
from mailman.interfaces.usermanager import IUserManager
from mailman.utilities.uid import UIDFactory
-from sqlalchemy import Column, ForeignKey, Integer, Unicode
+from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.orm import relationship
from zope.component import getUtility
from zope.event import notify
@@ -50,7 +50,7 @@ class Member(Model):
id = Column(Integer, primary_key=True)
_member_id = Column(UUID)
role = Column(Enum(MemberRole), index=True)
- list_id = Column(Unicode, index=True)
+ list_id = Column(SAUnicode, index=True)
moderation_action = Column(Enum(Action))
address_id = Column(Integer, ForeignKey('address.id'), index=True)
diff --git a/src/mailman/model/message.py b/src/mailman/model/message.py
index c4fe63f1c..576baab5c 100644
--- a/src/mailman/model/message.py
+++ b/src/mailman/model/message.py
@@ -20,8 +20,9 @@
from mailman import public
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
+from mailman.database.types import SAUnicode
from mailman.interfaces.messages import IMessage
-from sqlalchemy import Column, Integer, Unicode
+from sqlalchemy import Column, Integer
from zope.interface import implementer
@@ -34,9 +35,9 @@ class Message(Model):
id = Column(Integer, primary_key=True)
# This is a Messge-ID field representation, not a database row id.
- message_id = Column(Unicode)
- message_id_hash = Column(Unicode)
- path = Column(Unicode)
+ message_id = Column(SAUnicode)
+ message_id_hash = Column(SAUnicode)
+ path = Column(SAUnicode)
@dbconnection
def __init__(self, store, message_id, message_id_hash, path):
diff --git a/src/mailman/model/mime.py b/src/mailman/model/mime.py
index 849eac385..da5f11f05 100644
--- a/src/mailman/model/mime.py
+++ b/src/mailman/model/mime.py
@@ -19,9 +19,9 @@
from mailman import public
from mailman.database.model import Model
-from mailman.database.types import Enum
+from mailman.database.types import Enum, SAUnicode
from mailman.interfaces.mime import FilterType, IContentFilter
-from sqlalchemy import Column, ForeignKey, Integer, Unicode
+from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.orm import relationship
from zope.interface import implementer
@@ -39,7 +39,7 @@ class ContentFilter(Model):
mailing_list = relationship('MailingList')
filter_type = Column(Enum(FilterType))
- filter_pattern = Column(Unicode)
+ filter_pattern = Column(SAUnicode)
def __init__(self, mailing_list, filter_pattern, filter_type):
self.mailing_list = mailing_list
diff --git a/src/mailman/model/pending.py b/src/mailman/model/pending.py
index 0e19f0cbf..9d8315605 100644
--- a/src/mailman/model/pending.py
+++ b/src/mailman/model/pending.py
@@ -24,11 +24,12 @@ from mailman import public
from mailman.config import config
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
+from mailman.database.types import SAUnicode
from mailman.interfaces.pending import (
IPendable, IPended, IPendedKeyValue, IPendings)
from mailman.utilities.datetime import now
from mailman.utilities.uid import TokenFactory
-from sqlalchemy import Column, DateTime, ForeignKey, Integer, Unicode, and_
+from sqlalchemy import Column, DateTime, ForeignKey, Integer, and_
from sqlalchemy.orm import aliased, relationship
from zope.interface import implementer
from zope.interface.verify import verifyObject
@@ -45,8 +46,8 @@ class PendedKeyValue(Model):
__tablename__ = 'pendedkeyvalue'
id = Column(Integer, primary_key=True)
- key = Column(Unicode, index=True)
- value = Column(Unicode, index=True)
+ key = Column(SAUnicode, index=True)
+ value = Column(SAUnicode, index=True)
pended_id = Column(Integer, ForeignKey('pended.id'), index=True)
def __init__(self, key, value):
@@ -62,9 +63,9 @@ class Pended(Model):
__tablename__ = 'pended'
id = Column(Integer, primary_key=True)
- token = Column(Unicode, index=True)
+ token = Column(SAUnicode, index=True)
expiration_date = Column(DateTime, index=True)
- key_values = relationship('PendedKeyValue', cascade="all, delete-orphan")
+ key_values = relationship('PendedKeyValue', cascade='all, delete-orphan')
@public
diff --git a/src/mailman/model/preferences.py b/src/mailman/model/preferences.py
index 71775117f..366ed97c2 100644
--- a/src/mailman/model/preferences.py
+++ b/src/mailman/model/preferences.py
@@ -20,11 +20,11 @@
from mailman import public
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
-from mailman.database.types import Enum
+from mailman.database.types import Enum, SAUnicode
from mailman.interfaces.languages import ILanguageManager
from mailman.interfaces.member import DeliveryMode, DeliveryStatus
from mailman.interfaces.preferences import IPreferences
-from sqlalchemy import Boolean, Column, Integer, Unicode
+from sqlalchemy import Boolean, Column, Integer
from zope.component import getUtility
from zope.interface import implementer
@@ -39,7 +39,7 @@ class Preferences(Model):
id = Column(Integer, primary_key=True)
acknowledge_posts = Column(Boolean)
hide_address = Column(Boolean)
- _preferred_language = Column('preferred_language', Unicode)
+ _preferred_language = Column('preferred_language', SAUnicode)
receive_list_copy = Column(Boolean)
receive_own_postings = Column(Boolean)
delivery_mode = Column(Enum(DeliveryMode))
diff --git a/src/mailman/model/requests.py b/src/mailman/model/requests.py
index df5f1062e..0f0f96dfe 100644
--- a/src/mailman/model/requests.py
+++ b/src/mailman/model/requests.py
@@ -21,12 +21,12 @@ from datetime import timedelta
from mailman import public
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
-from mailman.database.types import Enum
+from mailman.database.types import Enum, SAUnicode
from mailman.interfaces.pending import IPendable, IPendings
from mailman.interfaces.requests import IListRequests, RequestType
from mailman.utilities.queries import QuerySequence
from pickle import dumps, loads
-from sqlalchemy import Column, ForeignKey, Integer, Unicode
+from sqlalchemy import Column, ForeignKey, Integer
from sqlalchemy.orm import relationship
from zope.component import getUtility
from zope.interface import implementer
@@ -42,7 +42,7 @@ class DataPendable(dict):
def update(self, mapping):
# Keys and values must be strings (unicodes, but bytes values are
# accepted for now). Any other types for keys are a programming
- # error. If we find a non-Unicode value, pickle it and encode it in
+ # error. If we find a non-SAUnicode value, pickle it and encode it in
# such a way that it will be properly reconstituted when unpended.
clean_mapping = {}
for key, value in mapping.items():
@@ -120,7 +120,7 @@ class ListRequests:
if pendable is None:
return None
data = dict()
- # Unpickle any non-Unicode values.
+ # Unpickle any non-SAUnicode values.
for key, value in pendable.items():
if key.startswith('_pck_'):
data[key[5:]] = loads(value.encode('raw-unicode-escape'))
@@ -146,9 +146,9 @@ class _Request(Model):
__tablename__ = '_request'
id = Column(Integer, primary_key=True)
- key = Column(Unicode)
+ key = Column(SAUnicode)
request_type = Column(Enum(RequestType))
- data_hash = Column(Unicode)
+ data_hash = Column(SAUnicode)
mailing_list_id = Column(Integer, ForeignKey('mailinglist.id'), index=True)
mailing_list = relationship('MailingList')
diff --git a/src/mailman/model/template.py b/src/mailman/model/template.py
index 96ce43e1f..b09c644bb 100644
--- a/src/mailman/model/template.py
+++ b/src/mailman/model/template.py
@@ -23,6 +23,7 @@ from mailman import public
from mailman.config import config
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
+from mailman.database.types import SAUnicode
from mailman.interfaces.cache import ICacheManager
from mailman.interfaces.domain import IDomain
from mailman.interfaces.mailinglist import IMailingList
@@ -32,7 +33,7 @@ from mailman.utilities import protocols
from mailman.utilities.i18n import find
from mailman.utilities.string import expand
from requests import HTTPError
-from sqlalchemy import Column, Integer, Unicode
+from sqlalchemy import Column, Integer
from urllib.error import URLError
from urllib.parse import urlparse
from zope.component import getUtility
@@ -47,11 +48,11 @@ class Template(Model):
__tablename__ = 'template'
id = Column(Integer, primary_key=True)
- name = Column(Unicode)
- context = Column(Unicode)
- uri = Column(Unicode)
- username = Column(Unicode, nullable=True)
- password = Column(Unicode, nullable=True)
+ name = Column(SAUnicode)
+ context = Column(SAUnicode)
+ uri = Column(SAUnicode)
+ username = Column(SAUnicode, nullable=True)
+ password = Column(SAUnicode, nullable=True)
def __init__(self, name, context, uri, username, password):
self.name = name
diff --git a/src/mailman/model/tests/test_listmanager.py b/src/mailman/model/tests/test_listmanager.py
index a8ac68c92..ff1bd3026 100644
--- a/src/mailman/model/tests/test_listmanager.py
+++ b/src/mailman/model/tests/test_listmanager.py
@@ -174,7 +174,9 @@ class TestListCreation(unittest.TestCase):
def test_create_list_case_folding(self):
# LP: #1117176 describes a problem where list names created in upper
- # case are not actually usable by the LMTP server.
+ # case are not actually usable by the LMTP server. MySQL
+ # automatically changes the case of the arguments so this test will
+ # always fail in case of MySQL.
self._manager.create('my-LIST@example.com')
self.assertIsNone(self._manager.get('my-LIST@example.com'))
mlist = self._manager.get('my-list@example.com')
diff --git a/src/mailman/model/user.py b/src/mailman/model/user.py
index a534ef2a5..edda2a9e8 100644
--- a/src/mailman/model/user.py
+++ b/src/mailman/model/user.py
@@ -20,7 +20,7 @@
from mailman import public
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
-from mailman.database.types import UUID
+from mailman.database.types import SAUnicode, UUID
from mailman.interfaces.address import (
AddressAlreadyLinkedError, AddressNotLinkedError)
from mailman.interfaces.user import (
@@ -32,7 +32,7 @@ from mailman.model.roster import Memberships
from mailman.utilities.datetime import factory as date_factory
from mailman.utilities.uid import UIDFactory
from sqlalchemy import (
- Boolean, Column, DateTime, ForeignKey, Integer, Unicode)
+ Boolean, Column, DateTime, ForeignKey, Integer)
from sqlalchemy.orm import backref, relationship
from zope.event import notify
from zope.interface import implementer
@@ -49,8 +49,8 @@ class User(Model):
__tablename__ = 'user'
id = Column(Integer, primary_key=True)
- display_name = Column(Unicode)
- _password = Column('password', Unicode)
+ display_name = Column(SAUnicode)
+ _password = Column('password', SAUnicode)
_user_id = Column(UUID, index=True)
_created_on = Column(DateTime)
is_server_owner = Column(Boolean, default=False)
diff --git a/src/mailman/model/workflow.py b/src/mailman/model/workflow.py
index 7a0056e5f..1072fa548 100644
--- a/src/mailman/model/workflow.py
+++ b/src/mailman/model/workflow.py
@@ -20,8 +20,9 @@
from mailman import public
from mailman.database.model import Model
from mailman.database.transaction import dbconnection
+from mailman.database.types import SAUnicode
from mailman.interfaces.workflow import IWorkflowState, IWorkflowStateManager
-from sqlalchemy import Column, Unicode
+from sqlalchemy import Column
from zope.interface import implementer
@@ -32,10 +33,10 @@ class WorkflowState(Model):
__tablename__ = 'workflowstate'
- name = Column(Unicode, primary_key=True)
- token = Column(Unicode, primary_key=True)
- step = Column(Unicode)
- data = Column(Unicode)
+ name = Column(SAUnicode, primary_key=True)
+ token = Column(SAUnicode, primary_key=True)
+ step = Column(SAUnicode)
+ data = Column(SAUnicode)
@public