Projects
Kolab:16:Enterprise
pykolab
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 22
View file
pykolab.spec
Changed
@@ -29,7 +29,7 @@ Summary: Kolab Groupware Solution Name: pykolab -Version: 0.8.8 +Version: 0.8.9 Release: 1%{?dist} License: GPLv3+ Group: Applications/System @@ -584,6 +584,9 @@ %attr(0700,%{kolab_user},%{kolab_group}) %dir %{_var}/spool/pykolab/wallace %changelog +* Thu May 17 2018 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.8.9-1 +- Release of version 0.8.9 + * Thu Mar 8 2018 Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> - 0.8.8-1 - Release of version 0.8.8
View file
debian.changelog
Changed
@@ -1,5 +1,11 @@ pykolab (0.8.8-0~kolab1) unstable; urgency=low + * Upstream release of version 0.8.9 + + -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Thu, 17 May 2018 01:49:00 +0100 + +pykolab (0.8.8-0~kolab1) unstable; urgency=low + * Upstream release of version 0.8.8 -- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Thu, 8 Mar 2018 01:49:00 +0100
View file
pykolab-0.8.8.tar.gz/configure.ac -> pykolab-0.8.9.tar.gz/configure.ac
Changed
@@ -1,4 +1,4 @@ -AC_INIT(pykolab, 0.8.8) +AC_INIT(pykolab, 0.8.9) AC_SUBST(RELEASE, 1) AC_CONFIG_SRCDIR(pykolab/constants.py.in)
View file
pykolab-0.8.8.tar.gz/pykolab/auth/__init__.py -> pykolab-0.8.9.tar.gz/pykolab/auth/__init__.py
Changed
@@ -86,7 +86,7 @@ back to the primary domain specified by the configuration. """ - log.debug(_("Called for domain %r") % (domain), level=9) + log.debug(_("Called for domain %r") % (domain), level=8) if not self._auth == None: return @@ -104,7 +104,7 @@ log.debug( _("Using section %s and domain %s") % (section,domain), - level=9 + level=8 ) if not self.domains == None and self.domains.has_key(domain): @@ -113,7 +113,7 @@ log.debug( _("Using section %s and domain %s") % (section,domain), - level=9 + level=8 ) log.debug( @@ -129,7 +129,7 @@ if not conf.has_option(section, 'auth_mechanism'): log.debug( _("Section %s has no option 'auth_mechanism'") % (section), - level=9 + level=8 ) section = 'kolab' @@ -139,12 +139,12 @@ section, conf.get(section,'auth_mechanism') ), - level=9 + level=8 ) # Get the actual authentication and authorization backend. if conf.get(section, 'auth_mechanism') == 'ldap': - log.debug(_("Starting LDAP..."), level=9) + log.debug(_("Starting LDAP..."), level=8) from pykolab.auth import ldap self._auth = ldap.LDAP(self.domain) @@ -153,7 +153,7 @@ self._auth = sql.SQL(self.domain) else: - log.debug(_("Starting LDAP..."), level=9) + log.debug(_("Starting LDAP..."), level=8) from pykolab.auth import ldap self._auth = ldap.LDAP(self.domain)
View file
pykolab-0.8.8.tar.gz/pykolab/auth/ldap/__init__.py -> pykolab-0.8.9.tar.gz/pykolab/auth/ldap/__init__.py
Changed
@@ -458,6 +458,7 @@ conn = ldap.ldapobject.ReconnectLDAPObject( uri, trace_level=trace_level, + trace_file=pykolab.logger.StderrToLogger(log), retry_max=retry_max, retry_delay=retry_delay ) @@ -543,9 +544,9 @@ self._bind() - log.debug(_("Entry ID: %r") % (entry_id), level=9) + log.debug(_("Entry ID: %r") % (entry_id), level=8) entry_dn = self.entry_dn(entry_id) - log.debug(_("Entry DN: %r") % (entry_dn), level=9) + log.debug(_("Entry DN: %r") % (entry_dn), level=8) log.debug( _("ldap search: (%r, %r, filterstr='(objectclass=*)', attrlist= 'dn' + %r") % ( @@ -553,7 +554,7 @@ ldap.SCOPE_BASE, attributes ), - level=9 + level=8 ) _search = self.ldap.search_ext( @@ -854,7 +855,7 @@ def get_latest_sync_timestamp(self): timestamp = cache.last_modify_timestamp(self.domain) - log.debug(_("Using timestamp %r") % (timestamp), level=9) + log.debug(_("Using timestamp %r") % (timestamp), level=8) return timestamp def list_secondary_domains(self): @@ -1145,7 +1146,7 @@ _("Secondary mail addresses that we want is not None: %r") % ( secondary_mail_addresses ), - level=9 + level=8 ) secondary_mail_addresses = list(set(secondary_mail_addresses)) @@ -1156,7 +1157,7 @@ _("Avoiding the duplication of the primary mail " + \ "address %r in the list of secondary mail " + \ "addresses") % (primary_mail_address), - level=9 + level=8 ) secondary_mail_addresses.pop( @@ -1167,14 +1168,14 @@ _("Entry is getting secondary mail addresses: %r") % ( secondary_mail_addresses ), - level=9 + level=8 ) if not entry.has_key(secondary_mail_attribute): log.debug( _("Entry did not have any secondary mail " + \ "addresses in %r") % (secondary_mail_attribute), - level=9 + level=8 ) if not len(secondary_mail_addresses) == 0: @@ -1241,7 +1242,7 @@ ) def set_entry_attribute(self, entry_id, attribute, value): - log.debug(_("Setting entry attribute %r to %r for %r") % (attribute, value, entry_id), level=9) + log.debug(_("Setting entry attribute %r to %r for %r") % (attribute, value, entry_id), level=8) self.set_entry_attributes(entry_id, { attribute: value }) def set_entry_attributes(self, entry_id, attributes): @@ -1375,7 +1376,7 @@ current_ldap_quota, default_quota ), - level=9 + level=8 ) new_quota = conf.plugins.exec_hook("set_user_folder_quota", kw={ @@ -2074,12 +2075,7 @@ cache.get_entry(self.domain, entry) else: - imap_mailbox = "user%s%s" % ( - self.imap.get_separator(), - entryresult_attribute - ) - - if not self.imap.has_folder(imap_mailbox): + if not self.imap.user_mailbox_exists(entryresult_attribute): self.imap.user_mailbox_create( entryresult_attribute ) @@ -2642,7 +2638,7 @@ args, kw ), - level=9 + level=8 ) # Typical for Persistent Change Control EntryChangeNotification @@ -2723,7 +2719,7 @@ # # rcpt_addrs = self.recipient_policy(entry) # -# log.debug(_("Recipient Addresses: %r") % (rcpt_addrs), level=9) +# log.debug(_("Recipient Addresses: %r") % (rcpt_addrs), level=8) # # for key in rcpt_addrs.keys(): # entrykey = rcpt_addrskey @@ -2955,6 +2951,7 @@ '/var/lib/kolab/syncrepl_%s.db' % (self.domain), ldap_url.initializeUrl(), trace_level=2, + trace_file=pykolab.logger.StderrToLogger(log), callback=self._synchronize_callback )
View file
pykolab-0.8.8.tar.gz/pykolab/cli/sieve/cmd_refresh.py -> pykolab-0.8.9.tar.gz/pykolab/cli/sieve/cmd_refresh.py
Changed
@@ -356,7 +356,7 @@ mgmt_script = mgmt_script.__str__() - log.debug(_("MANAGEMENT script for user %s contents: %r") % (address,mgmt_script), level=9) + log.debug(_("MANAGEMENT script for user %s contents: %r") % (address,mgmt_script), level=8) result = sieveclient.putscript("MANAGEMENT", mgmt_script)
View file
pykolab-0.8.8.tar.gz/pykolab/imap/cyrus.py -> pykolab-0.8.9.tar.gz/pykolab/imap/cyrus.py
Changed
@@ -90,6 +90,11 @@ if conf.debuglevel > 8: self.VERBOSE = True self.m.debug = 5 + sl = pykolab.logger.StderrToLogger(log) + # imaplib debug outputs everything to stderr. Redirect to Logger + sys.stderr = sl + # cyruslib debug outputs everything to LOGFD. Redirect to Logger + self.LOGFD = sl # Initialize our variables self.separator = self.SEP @@ -139,7 +144,13 @@ Login to the Cyrus IMAP server through cyruslib.CYRUS, but set our hierarchy separator. """ - cyruslib.CYRUS.login(self, *args, **kw) + try: + cyruslib.CYRUS.login(self, *args, **kw) + except cyruslib.CYRUSError, errmsg: + log.error("Login to Cyrus IMAP server failed: %r", errmsg) + except Exception, errmsg: + log.exception(errmsg) + self.separator = self.SEP try: self._id() @@ -587,8 +598,7 @@ TODO: It finds virtdomain folders for non-virtdomain searches. """ - deleted_folder_search = "%(deleted_prefix)s%(separator)s" + \ - "%(mailfolder)s%(separator)s*" % { + deleted_folder_search = "%(deleted_prefix)s%(separator)s%(mailfolder)s%(separator)s*" % { # TODO: The prefix used is configurable 'deleted_prefix': "DELETED", 'mailfolder': self.separator.join(mbox'path_parts'),
View file
pykolab-0.8.8.tar.gz/pykolab/itip/__init__.py -> pykolab-0.8.9.tar.gz/pykolab/itip/__init__.py
Changed
@@ -50,7 +50,7 @@ # Get the itip_payload itip_payload = part.get_payload(decode=True) - log.debug(_("Raw iTip payload (%r): %r") % (part.get_param('charset'), itip_payload), level=9) + log.debug(_("Raw iTip payload (%r): %r") % (part.get_param('charset'), itip_payload), level=8) # Convert unsupported timezones, etc. itip_payload = _convert_itip_payload(itip_payload) @@ -71,7 +71,7 @@ itip = {} if c'uid' in seen_uids: - log.debug(_("Duplicate iTip object: %s") % (c'uid'), level=9) + log.debug(_("Duplicate iTip object: %s") % (c'uid'), level=8) continue # From the event, take the following properties:
View file
pykolab-0.8.8.tar.gz/pykolab/logger.py -> pykolab-0.8.9.tar.gz/pykolab/logger.py
Changed
@@ -27,6 +27,31 @@ from pykolab.translate import _ +class StderrToLogger(object): + """ + Fake file-like stream object that redirects writes to a logger instance. + """ + def __init__(self, logger, log_level=logging.DEBUG): + self.logger = logger + self.log_level = log_level + self.linebuf = '' + + def write(self, buf): + # ugly patch to make smtplib debug logging records appear on one line in log file + # smtplib uses "print>>stderr, var, var" statements for debug logging. These + # statements are splited into separate lines on separating whitespace. + for line in buf.rstrip().splitlines(): + if buf != '\n': + if line.startswith('send:') or line.startswith('reply:'): + self.linebuf = line + return + else: + self.logger.log(self.log_level, '%s %s', self.linebuf, line.rstrip():150) + self.linebuf = '' + + def flush(self): + pass + class Logger(logging.Logger): """ The PyKolab version of a logger. @@ -98,7 +123,7 @@ logging.Logger.__init__(self, name) - plaintextformatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s") + plaintextformatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(process)d %(message)s") if not self.fork: self.console_stdout = logging.StreamHandler(sys.stdout) @@ -213,7 +238,6 @@ if level <= self.debuglevel: # TODO: Not the way it's supposed to work! - self.log(logging.DEBUG, '%d: %s' % (os.getpid(),msg)) - + self.log(logging.DEBUG, msg) logging.setLoggerClass(Logger)
View file
pykolab-0.8.8.tar.gz/pykolab/plugins/roundcubedb/__init__.py -> pykolab-0.8.9.tar.gz/pykolab/plugins/roundcubedb/__init__.py
Changed
@@ -45,7 +45,7 @@ domain - domain name """ - log.debug(_("user_delete: %r") % (kw), level=9) + log.debug(_("user_delete: %r") % (kw), level=8) if os.path.isdir('/usr/share/roundcubemail'): rcpath = '/usr/share/roundcubemail/' @@ -64,6 +64,6 @@ if proc.returncode != 0: log.error(rcpath + "bin/deluser.sh exited with error %d: %r" % (proc.returncode, procerr)) else: - log.debug(rcpath + "bin/deluser.sh success: %r; %r" % (procout, procerr), level=9) + log.debug(rcpath + "bin/deluser.sh success: %r; %r" % (procout, procerr), level=8) return None
View file
pykolab-0.8.8.tar.gz/wallace/module_invitationpolicy.py -> pykolab-0.8.9.tar.gz/wallace/module_invitationpolicy.py
Changed
@@ -184,7 +184,7 @@ def cleanup(): global auth, imap, write_locks - log.debug("cleanup(): %r, %r" % (auth, imap), level=9) + log.debug("cleanup(): %r, %r" % (auth, imap), level=8) auth.disconnect() del auth @@ -210,7 +210,7 @@ if not os.path.isdir(os.path.join(mybasepath, stage)): os.makedirs(os.path.join(mybasepath, stage)) - log.debug(_("Invitation policy called for %r, %r") % (args, kw), level=9) + log.debug(_("Invitation policy called for %r, %r") % (args, kw), level=8) auth = Auth() imap = IMAP() @@ -280,7 +280,7 @@ else: any_itips = True - log.debug(_("iTip objects attached to this message contain the following information: %r") % (itip_events), level=9) + log.debug(_("iTip objects attached to this message contain the following information: %r") % (itip_events), level=8) # See if any iTip actually allocates a user. if any_itips and len(x'uid' for x in itip_events if x.has_key('attendees') or x.has_key('organizer')) > 0: @@ -399,7 +399,7 @@ try: receiving_attendee = itip_event'xml'.get_attendee_by_email(recipient_email) - log.debug(_("Receiving Attendee: %r") % (receiving_attendee), level=9) + log.debug(_("Receiving Attendee: %r") % (receiving_attendee), level=8) except Exception, errmsg: log.error("Could not find envelope attendee: %r" % (errmsg)) return MESSAGE_FORWARD @@ -528,7 +528,7 @@ if policy & ACT_UPDATE: try: sender_attendee = itip_event'xml'.get_attendee_by_email(sender_email) - log.debug(_("Sender Attendee: %r") % (sender_attendee), level=9) + log.debug(_("Sender Attendee: %r") % (sender_attendee), level=8) except Exception, errmsg: log.error("Could not find envelope sender attendee: %r" % (errmsg)) return MESSAGE_FORWARD @@ -573,17 +573,17 @@ if not existing_delegatee: existing.add_attendee(sender_delegatee) - log.debug(_("Add delegatee: %r") % (sender_delegatee.to_dict()), level=9) + log.debug(_("Add delegatee: %r") % (sender_delegatee.to_dict()), level=8) else: existing_delegatee.copy_from(sender_delegatee) - log.debug(_("Update existing delegatee: %r") % (existing_delegatee.to_dict()), level=9) + log.debug(_("Update existing delegatee: %r") % (existing_delegatee.to_dict()), level=8) updated_attendees.append(sender_delegatee) # copy all parameters from replying attendee (e.g. delegated-to, role, etc.) existing_attendee.copy_from(sender_attendee) existing.update_attendees(existing_attendee) - log.debug(_("Update delegator: %r") % (existing_attendee.to_dict()), level=9) + log.debug(_("Update delegator: %r") % (existing_attendee.to_dict()), level=8) except Exception, errmsg: log.error("Could not find delegated-to attendee: %r" % (errmsg)) @@ -699,7 +699,7 @@ if isinstance(user_dn, basestring): log.debug(_("User DN: %r") % (user_dn), level=8) else: - log.debug(_("No user record(s) found for %r") % (email_address), level=9) + log.debug(_("No user record(s) found for %r") % (email_address), level=8) # remember this lookup user_dn_from_email_address.cacheemail_address = user_dn @@ -978,7 +978,7 @@ break end = time.time() - log.debug(_("start: %r, end: %r, total: %r, messages: %d") % (start, end, (end-start), num_messages), level=9) + log.debug(_("start: %r, end: %r, total: %r, messages: %d") % (start, end, (end-start), num_messages), level=8) # remember the result of this check for further iterations itip_event'_conflicts' = conflict @@ -1006,7 +1006,7 @@ if not wait: return False - log.debug(_("%r is locked, waiting...") % (key), level=9) + log.debug(_("%r is locked, waiting...") % (key), level=8) time.sleep(0.5) locktime = os.path.getmtime(filename) if os.path.isfile(filename) else 0 @@ -1284,28 +1284,8 @@ msg'From' = Header(utils.str2unicode('%s' % orgname) if orgname else '') msg'From'.append("<%s>" % orgemail) - smtp = smtplib.SMTP("localhost", 10027) - - if conf.debuglevel > 8: - smtp.set_debuglevel(True) - - success = False - retries = 5 - - while not success and retries > 0: - try: - success = smtp.sendmail(orgemail, receiving_user'mail', msg.as_string()) - log.debug(_("Sent update notification to %r: %r") % (receiving_user'mail', success), level=8) - smtp.quit() - break - except Exception, errmsg: - log.error(_("SMTP sendmail error: %r") % (errmsg)) - - time.sleep(10) - retries -= 1 - - return success - + modules._sendmail(orgemail, receiving_user'mail', msg.as_string()) + log.debug(_("Sent update notification to %r: %r") % (receiving_user'mail', success), level=8) def send_cancel_notification(object, receiving_user, deleted=False, sender=None, comment=None): """ @@ -1366,18 +1346,8 @@ msg'From' = Header(utils.str2unicode('%s' % orgname) if orgname else '') msg'From'.append("<%s>" % orgemail) - smtp = smtplib.SMTP("localhost", 10027) - - if conf.debuglevel > 8: - smtp.set_debuglevel(True) - - try: - smtp.sendmail(orgemail, receiving_user'mail', msg.as_string()) - except Exception, errmsg: - log.error(_("SMTP sendmail error: %r") % (errmsg)) - - smtp.quit() - + modules._sendmail(orgemail, receiving_user'mail', msg.as_string()) + log.debug(_("Sent cancel notification to %r: %r") % (receiving_user'mail', success), level=8) def is_auto_reply(user, sender_email, type): accept_available = False
View file
pykolab-0.8.8.tar.gz/wallace/module_resources.py -> pykolab-0.8.9.tar.gz/wallace/module_resources.py
Changed
@@ -94,7 +94,7 @@ def cleanup(): global auth, imap - log.debug("cleanup(): %r, %r" % (auth, imap), level=9) + log.debug("cleanup(): %r, %r" % (auth, imap), level=8) auth.disconnect() del auth @@ -196,7 +196,7 @@ log.debug( _("iTip events attached to this message contain the " + \ "following information: %r") % (itip_events), - level=9 + level=8 ) if any_itips: @@ -275,7 +275,7 @@ try: sender_attendee = itip_event'xml'.get_attendee_by_email(sender_email) owner_reply = sender_attendee.get_participant_status() - log.debug(_("Sender Attendee: %r => %r") % (sender_attendee, owner_reply), level=9) + log.debug(_("Sender Attendee: %r => %r") % (sender_attendee, owner_reply), level=8) except Exception, e: log.error(_("Could not find envelope sender attendee: %r") % (e)) continue @@ -317,7 +317,7 @@ try: receiving_attendee = itip_event'xml'.get_attendee_by_email(receiving_resource'mail') - log.debug(_("Receiving Resource: %r; %r") % (receiving_resource, receiving_attendee), level=9) + log.debug(_("Receiving Resource: %r; %r") % (receiving_resource, receiving_attendee), level=8) except Exception, e: log.error(_("Could not find envelope attendee: %r") % (e)) continue @@ -395,7 +395,7 @@ # Look for ACT_REJECT policy if resource is not None: invitationpolicy = get_resource_invitationpolicy(resource) - log.debug(_("Apply invitation policies %r") % (invitationpolicy), level=9) + log.debug(_("Apply invitation policies %r") % (invitationpolicy), level=8) if invitationpolicy is not None: for policy in invitationpolicy: @@ -488,7 +488,7 @@ for num in data0.split(): log.debug( _("Fetching message ID %r from folder %r") % (num, mailbox), - level=9 + level=8 ) typ, data = imap.imap.m.fetch(num, '(RFC822)') @@ -542,20 +542,20 @@ end = time.time() - log.debug(_("start: %r, end: %r, total: %r, messages: %d") % (start, end, (end-start), num_messages), level=9) + log.debug(_("start: %r, end: %r, total: %r, messages: %d") % (start, end, (end-start), num_messages), level=8) # For each resource (collections are first!) # check conflicts and either accept or decline the reservation request for resource in resource_dns: - log.debug(_("Polling for resource %r") % (resource), level=9) + log.debug(_("Polling for resource %r") % (resource), level=8) if not resources.has_key(resource): - log.debug(_("Resource %r has been popped from the list") % (resource), level=9) + log.debug(_("Resource %r has been popped from the list") % (resource), level=8) continue if not resourcesresource.has_key('conflicting_events'): - log.debug(_("Resource is a collection"), level=9) + log.debug(_("Resource is a collection"), level=8) # check if there are non-conflicting collection members conflicting_members = x for x in resourcesresource'uniquemember' if resourcesx'conflict' @@ -568,7 +568,7 @@ log.debug(_("Removed conflicting resources from %r: (%r) => %r") % ( resource, conflicting_members, resourcesresource'uniquemember' - ), level=9) + ), level=8) else: # TODO: shuffle existing bookings of collection members in order @@ -578,7 +578,7 @@ continue if len(resourcesresource'conflicting_events') > 0: - log.debug(_("Conflicting events: %r for resource %r") % (resourcesresource'conflicting_events', resource), level=9) + log.debug(_("Conflicting events: %r for resource %r") % (resourcesresource'conflicting_events', resource), level=8) done = False @@ -664,7 +664,7 @@ log.debug( _("Checking events in resource folder %r") % (mailbox), - level=9 + level=8 ) # set read ACLs for admin user @@ -683,7 +683,7 @@ log.debug( _("Fetching message UID %r from folder %r") % (num, mailbox), - level=9 + level=8 ) typ, data = imap.imap.m.fetch(num, '(UID RFC822)') @@ -737,7 +737,7 @@ master = None mailbox = resource_rec'kolabtargetfolder' - log.debug(_("Searching %r for event %r") % (mailbox, uid), level=9) + log.debug(_("Searching %r for event %r") % (mailbox, uid), level=8) try: imap.imap.m.select(imap.folder_quote(mailbox)) @@ -802,7 +802,7 @@ if not confirmed and owner: if invitationpolicy is None: invitationpolicy = get_resource_invitationpolicy(resource) - log.debug(_("Apply invitation policies %r") % (invitationpolicy), level=9) + log.debug(_("Apply invitation policies %r") % (invitationpolicy), level=8) if invitationpolicy is not None: for policy in invitationpolicy: @@ -934,7 +934,7 @@ log.debug(_("Delete resource calendar object %r in %r: %r") % ( uid, resource'kolabtargetfolder', data - ), level=9) + ), level=8) for num in data0.split(): imap.imap.m.store(num, '+FLAGS', '\\Deleted') @@ -993,7 +993,7 @@ if len(resource_records) > 0: log.debug(_("Resource record(s): %r") % (resource_records), level=8) else: - log.debug(_("No resource (collection) records found for %r") % (email_address), level=9) + log.debug(_("No resource (collection) records found for %r") % (email_address), level=8) elif isinstance(resource_records, basestring): resource_records = resource_records @@ -1015,7 +1015,7 @@ resource_records = - log.debug(_("Raw itip_events: %r") % (itip_events), level=9) + log.debug(_("Raw itip_events: %r") % (itip_events), level=8) attendees_raw = for list_attendees_raw in x for x in y'attendees' for y in itip_events if y.has_key('attendees') and isinstance(y'attendees', list): attendees_raw.extend(list_attendees_raw) @@ -1023,7 +1023,7 @@ for list_attendees_raw in y'attendees' for y in itip_events if y.has_key('attendees') and isinstance(y'attendees', basestring): attendees_raw.append(list_attendees_raw) - log.debug(_("Raw set of attendees: %r") % (attendees_raw), level=9) + log.debug(_("Raw set of attendees: %r") % (attendees_raw), level=8) # TODO: Resources are actually not implemented in the format. We reset this # list later. @@ -1031,7 +1031,7 @@ for list_resources_raw in x for x in y'resources' for y in itip_events if y.has_key('resources'): resources_raw.extend(list_resources_raw) - log.debug(_("Raw set of resources: %r") % (resources_raw), level=9) + log.debug(_("Raw set of resources: %r") % (resources_raw), level=8) # consider organizer (in REPLY messages), too organizers_raw = re.sub('\+A-Za-z0-9=/-+@', '@', str(y'organizer')) for y in itip_events if y.has_key('organizer') @@ -1065,7 +1065,7 @@ resource_records.extend(_resource_records) log.debug(_("Resource record(s): %r") % (_resource_records), level=8) else: - log.debug(_("No resource (collection) records found for %r") % (attendee), level=9) + log.debug(_("No resource (collection) records found for %r") % (attendee), level=8) elif isinstance(_resource_records, basestring): resource_records.append(_resource_records) @@ -1236,7 +1236,7 @@ if not isinstance(collections, list): collections = (collections'dn',collections) - log.debug(_("Check collections %r for kolabinvitationpolicy attributes") % (collections), level=9) + log.debug(_("Check collections %r for kolabinvitationpolicy attributes") % (collections), level=8) for dn,collection in collections: # ldap.search_entry_by_attribute() doesn't return the attributes lower-cased
View file
pykolab-0.8.8.tar.gz/wallace/modules.py -> pykolab-0.8.9.tar.gz/wallace/modules.py
Changed
@@ -20,7 +20,6 @@ import os import sys import time -import traceback from email import message_from_string from email.message import Message @@ -117,8 +116,7 @@ try: return modulesname'function'(*args, **kw) except Exception, errmsg: - log.error(_("Unknown error occurred; %r") % (errmsg)) - log.error("%s" % (traceback.format_exc())) + log.exception(_("Module %r - Unknown error occurred; %r") % (name, errmsg)) def heartbeat(name, *args, **kw): if not modules.has_key(name): @@ -130,27 +128,40 @@ def _sendmail(sender, recipients, msg): # NOTE: Use "127.0.0.1" here for IPv6 (see also the service # definition in master.cf). - smtp = smtplib.SMTP("127.0.0.1", 10027) + + sl = pykolab.logger.StderrToLogger(log) + smtplib.stderr = sl + + smtp = smtplib.SMTP(timeout=5) if conf.debuglevel > 8: - smtp.set_debuglevel(True) + smtp.set_debuglevel(1) + + success = False + retries = 5 - # Not an infinite loop - while True: + while not success and retries > 0: try: - smtp.sendmail( - sender, - recipients, - msg - ) + log.debug(_("Trying to send email via smtplib from %r, to %r") % (sender, recipients), level=8) + smtp.connect("127.0.0.1", 10027) + _response = smtp.sendmail(sender, recipients, msg) + + if len(_response) == 0: + log.debug(_("SMTP sendmail OK"), level=8) + else: + log.debug(_("SMTP sendmail returned: %r") % (_response), level=8) smtp.quit() - return True + success = True + break except smtplib.SMTPServerDisconnected, errmsg: - smtp.quit() - smtp.connect() + log.error("SMTP Server Disconnected Error, %r" % (errmsg)) + + except smtplib.SMTPConnectError, errmsg: + # DEFER + log.error("SMTP Connect Error, %r" % (errmsg)) except smtplib.SMTPDataError, errmsg: # DEFER @@ -169,10 +180,13 @@ log.error("SMTP Sender Refused, %r" % (errmsg)) except Exception, errmsg: - log.error(_("Unknown error occurred; %r") % (errmsg)) - log.error("%r" % (traceback.format_exc())) + log.exception(_("smtplib - Unknown error occurred: %r") % (errmsg)) + + smtp.quit() + time.sleep(10) + retries -= 1 - return False + return success def cb_action_HOLD(module, filepath): log.info(_("Holding message in queue for manual review (%s by %s)") % (filepath, module))
View file
pykolab.dsc
Changed
@@ -2,7 +2,7 @@ Source: pykolab Binary: pykolab, kolab-cli, kolab-conf, kolab-saslauthd, kolab-server, kolab-telemetry, kolab-xml, wallace Architecture: all -Version: 0.8.8-0~kolab1 +Version: 0.8.9-0~kolab1 Maintainer: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com> Uploaders: Paul Klos <kolab@klos2day.nl> Homepage: http://www.kolab.org @@ -40,5 +40,5 @@ pykolab deb python optional wallace deb python optional Files: - 00000000000000000000000000000000 0 pykolab-0.8.8.tar.gz + 00000000000000000000000000000000 0 pykolab-0.8.9.tar.gz 00000000000000000000000000000000 0 debian.tar.gz
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.