def setMemberPassword(self, member, password): oldm.setMemberPassword(self, member, password) database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) result.set(password = unicode(password,"utf-8")) store.commit()
def changeMemberAddress(self, member, newaddress, nodelete=0): """Change member address""" database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) result.set(address = unicode(newaddress,"utf-8")) store.commit() oldm.changeMemberAddress(self, member, newaddress, nodelete)
def removeMember(self, member): """Remove member from db""" database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) result.remove() store.commit() oldm.removeMember(self,member)
def setMemberLanguage(self, member, language): oldm.setMemberLanguage(self, member, language) database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) try: result.set(lang = unicode(language,"utf-8")) except: result.set(lang = language) store.commit()
def setMemberName(self, member, realname): oldm.setMemberName(self, member, realname) database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8"), StormMembers.listname == unicode(self.list,"utf-8")) try: result.set(name = unicode(realname,"utf-8")) except: result.set(name = realname) store.commit()
def setMemberTopics(self, member, topics): oldm.setMemberTopics(self, member, topics) if topics is None: oldm.setMemberTopics(self, member, topics) return database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8"), StormMembers.listname == unicode(self.list,"utf-8")) result.set(topics_userinterest = unicode(topics,"utf-8")) store.commit()
def changeMemberAddress(self, member, newaddress, nodelete=1): subscriber = DlistUtils.Subscriber(self.__mlist) oldm.changeMemberAddress(self, member, newaddress, nodelete=0) #changed nodelete to 0 - Anna memberkey = member.lower() if DlistUtils.enabled(self.__mlist): subscriber.changeAddress(memberkey, newaddress) database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) result.set(address = unicode(newaddress,"utf-8")) store.commit()
def setBounceInfo(self, member, info): oldm.setBounceInfo(self, member, info) database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8"), StormMembers.listname == unicode(self.list,"utf-8")) if info is None: result.set(bounce_info = unicode("","utf-8")) result.set(delivery_status_timestamp = 0) else: result.set(bounce_info = unicode(info,"utf-8")) store.commit()
def removeMember(self, member, affect_dlist_database=1): subscriber = DlistUtils.Subscriber(self.__mlist) oldm.removeMember(self, member) memberkey = member.lower() if affect_dlist_database and DlistUtils.enabled(self.__mlist): subscriber.unsubscribeFromList(memberkey) database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) result.remove() store.commit()
def setMemberOption(self, member, flag, value): subscriber = DlistUtils.Subscriber(self.__mlist) oldm.setMemberOption(self, member, flag, value) if flag == mm_cfg.Digests and DlistUtils.enabled(self.__mlist): subscriber.setDigest(self.__mlist, member, value) missing = [] database = self._dbconnect() store = Store(database) result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) if flag == mm_cfg.Digests: if value: # Be sure the list supports digest delivery if not self.__mlist.digestable: raise Errors.CantDigestError # The user is turning on digest mode for members in result: if(members.digest == unicode("Y","utf-8")): raise Errors.AlreadyReceivingDigests, member cpuser = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"), StormMembers.digest == unicode("N","utf-8")) if cpuser is None: raise Errors.NotAMemberError, member result.set(digest = u"Y") store.commit() else: # Be sure the list supports regular delivery if not self.__mlist.nondigestable: raise Errors.MustDigestError # The user is turning off digest mode for members in result: if(members.digest == unicode("N","utf-8")): raise Errors.AlreadyReceivingRegularDeliveries, member cpuser = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8"), StormMembers.digest == unicode("Y","utf-8")) if cpuser is None: raise Errors.NotAMemberError, member result.set(digest = u"N") store.commit() # When toggling off digest delivery, we want to be sure to set # things up so that the user receives one last digest, # otherwise they may lose some email #self.__mlist.one_last_digest[memberkey] = cpuser # We don't need to touch user_options because the digest state # isn't kept as a bitfield flag. return options = 0 if value: options = options|flag else: options = options & ~flag result.set(user_options = options) store.commit()
def setDeliveryStatus(self, member, status): assert status in (MemberAdaptor.ENABLED, MemberAdaptor.UNKNOWN, MemberAdaptor.BYUSER, MemberAdaptor.BYADMIN, MemberAdaptor.BYBOUNCE) if status == MemberAdaptor.ENABLED: self.setBounceInfo(member,None) else: database = self._dbconnect() store = Store(database) time = datetime.datetime.now() result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) result.set(delivery_status = status) #result.set(delivery_status_timestamp = unicode(time.ctime(),"utf-8")) result.set(delivery_status_timestamp = time) store.commit() oldm.setDeliveryStatus(self, member, status)
def setDeliveryStatus(self, member, status): oldm.setDeliveryStatus(self, member, status) subscriber = DlistUtils.Subscriber(self.__mlist) memberkey = member.lower() enabled = (status == MemberAdaptor.ENABLED) if DlistUtils.enabled(self.__mlist): subscriber.setDisable(member, (not enabled)) assert status in (MemberAdaptor.ENABLED, MemberAdaptor.UNKNOWN, MemberAdaptor.BYUSER, MemberAdaptor.BYADMIN, MemberAdaptor.BYBOUNCE) if status == MemberAdaptor.ENABLED: self.setBounceInfo(member,None) else: database = self._dbconnect() store = Store(database) time = datetime.datetime.now() result = store.find(StormMembers, StormMembers.address == unicode(member,"utf-8") , StormMembers.listname == unicode(self.list,"utf-8")) result.set(delivery_status = status) #result.set(delivery_status_timestamp = unicode(time.ctime(),"utf-8")) result.set(delivery_status_timestamp = time) store.commit()
def getMemberTopics(self, member): if not oldm.isMember(self,member): raise Errors.MMAlreadyAMember, member database = self._dbconnect() store = Store(database) missing = [] try: result = store.find(StormMembers,StormMembers.address == unicode(member,"utf-8"),StormMembers.listname == unicode(self.list,"utf-8")) except: result = store.find(StormMembers,StormMembers.address == member , StormMembers.listname == unicode(self.list,"utf-8")) if result is not missing: for members in result: topics = members.topics_userinterest return topics
def getDeliveryStatusChangeTime(self, member): if not oldm.isMember(self,member): raise Errors.MMAlreadyAMember, member database = self._dbconnect() store = Store(database) missing = [] delivery_status_changetime = 0 try: result = store.find(StormMembers,StormMembers.address == unicode(member,"utf-8"),StormMembers.listname == unicode(self.list,"utf-8")) except: result = store.find(StormMembers,StormMembers.address == member , StormMembers.listname == unicode(self.list,"utf-8")) if result is not missing: for members in result: delivery_status_changetime = members.delivery_status_timestamp return delivery_status_changetime
def getMemberLanguage(self, member): if not oldm.isMember(self,member): raise Errors.MMAlreadyAMember, member database = self._dbconnect() store = Store(database) missing = [] try: result = store.find(StormMembers,StormMembers.address == unicode(member,"utf-8"),StormMembers.listname == unicode(self.list,"utf-8")) except: result = store.find(StormMembers,StormMembers.address == member , StormMembers.listname == unicode(self.list,"utf-8")) if result is not missing: for members in result: language = members.lang if language in self.__mlist.GetAvailableLanguages(): return language return self.__mlist.preferred_language
def __init__(self, mlist): oldm.__init__(self, mlist) self.__mlist = mlist self.list = self.__mlist.internal_name()
def getDeliveryStatusMembers(self, status=(MemberAdaptor.UNKNOWN, MemberAdaptor.BYUSER, MemberAdaptor.BYADMIN, MemberAdaptor.BYBOUNCE)): return [member for member in oldm.getMembers(self) if self.getDeliveryStatus(member) in status]
def addNewMember(self, member, **kws): if kws.has_key("affect_dlist_database"): affect_dlist_database = kws["affect_dlist_database"] del kws["affect_dlist_database"] else: affect_dlist_database = True if kws.has_key("digest"): digest = kws["digest"] else: digest = False subscriber = DlistUtils.Subscriber(self.__mlist) oldm.addNewMember(self, member, **kws) if affect_dlist_database: if DlistUtils.enabled(self.__mlist): subscriber.subscribeToList(member) if digest: subscriber.setDigest(member, 1) # if oldm.isMember(self,member): # raise Errors.MMAlreadyAMember, member database = self._dbconnect() store = Store(database) newMember = StormMembers() # Parse the keywords digest = 0 password = Utils.MakeRandomPassword() language = self.__mlist.preferred_language realname = None if kws.has_key('digest'): digest = kws['digest'] del kws['digest'] if kws.has_key('password'): password = kws['password'] del kws['password'] if kws.has_key('language'): language = kws['language'] del kws['language'] if kws.has_key('realname'): realname = kws['realname'] del kws['realname'] # Assert that no other keywords are present if kws: raise ValueError, kws.keys() newMember.delivery_status = MemberAdaptor.ENABLED try: newMember.listname = unicode(self.list,"utf-8") except: newMember.listname = self.list try: newMember.password = unicode(password,"utf-8") except: newMember.password = password try: newMember.lang = unicode(language,"utf-8") except: newMember.lang = language try: newMember.address = unicode(member,"utf-8") except: newMember.address = member if realname: try: newMember.name = unicode(realname,"utf-8") except: newMember.name = realname # Set the member's default set of options if self.__mlist.new_member_options: newMember.user_options = self.__mlist.new_member_options # If the localpart has uppercase letters in it, then the value in the # members (or digest_members) dict is the case preserved address. # Otherwise the value is 0. Note that the case of the domain part is # of course ignored. #if Utils.LCDomain(member) == member.lower(): # value = 0 #else: # value = member if digest: newMember.digest = u"Y" else: newMember.digest = u"N" store.add(newMember) store.commit()