def main(cursor, forAuthor, start=None, end=None): if start is not None: start = Time.fromISO8601TimeAndDate(start).asDatetime() else: start = datetime.now() - timedelta(days=365) if end is not None: end = Time.fromISO8601TimeAndDate(end).asDatetime() else: end = datetime.now() statement = ( "select time, ticket, field, oldvalue, newvalue, author " "from ticket_change " "where field = 'keywords' and (time > %(start)d and time < %(end)d) " "order by time asc") % { 'start': time.mktime(start.utctimetuple()), 'end': time.mktime(end.utctimetuple()) } cursor.execute(statement) for (when, ticket, field, old, new, author) in cursor.fetchall(): # Check to see if it is by the right author if author != forAuthor: continue if 'review' in old and 'review' not in new: print 'Reviewed', ticket, 'on', datetime.fromtimestamp(when) raise SystemExit()
def main(cursor, start=None, end=None): if start is not None: start = Time.fromISO8601TimeAndDate(start).asDatetime() else: start = datetime.now() - timedelta(days=365) if end is not None: end = Time.fromISO8601TimeAndDate(end).asDatetime() else: end = datetime.now() reviewers = {} statement = ( "select time, ticket, field, oldvalue, newvalue, author " "from ticket_change " "where field = 'keywords' and (time > %(start)d and time < %(end)d) " "order by time asc") % { 'start': time.mktime(start.utctimetuple()), 'end': time.mktime(end.utctimetuple()) } cursor.execute(statement) for (when, ticket, field, old, new, author) in cursor.fetchall(): if 'review' in old and 'review' not in new: reviewers[author] = reviewers.get(author, 0) + 1 return tracstats.Frequencies( "Ticket Reviewers", sorted(reviewers.items(), key=lambda (a, b): b))
def _parse_get_bucket(self, xml_bytes): root = XML(xml_bytes) name = root.findtext("Name") prefix = root.findtext("Prefix") marker = root.findtext("Marker") max_keys = root.findtext("MaxKeys") is_truncated = root.findtext("IsTruncated") contents = [] for content_data in root.findall("Contents"): key = content_data.findtext("Key") date_text = content_data.findtext("LastModified") modification_date = Time.fromISO8601TimeAndDate( date_text).asDatetime() etag = content_data.findtext("ETag") size = content_data.findtext("Size") storage_class = content_data.findtext("StorageClass") owner_id = content_data.findtext("Owner/ID") owner_display_name = content_data.findtext("Owner/DisplayName") owner = ItemOwner(owner_id, owner_display_name) content_item = BucketItem(key, modification_date, etag, size, storage_class, owner) contents.append(content_item) common_prefixes = [] for prefix_data in root.findall("CommonPrefixes"): common_prefixes.append(prefix_data.text) return BucketListing(name, prefix, marker, max_keys, is_truncated, contents, common_prefixes)
def peerRequestedAppointment(self, whom, when): app = Appointment( store=self.store, when=Time.fromISO8601TimeAndDate(when), withWhomUsername=whom.localpart, withWhomDomain=whom.domain, withWhomShareID=whom.shareID, remoteID=whom.shareID) role = getPrimaryRole(self.store, u"%s@%s" % (whom.localpart, whom.domain), True) appointmentID = role.shareItem(app, interfaces=[IMessageReceiver]).shareID return {'appointmentID': appointmentID}
def main(cursor, forAuthor, start=None, end=None): if start is not None: start = Time.fromISO8601TimeAndDate(start).asDatetime() else: start = datetime.now() - timedelta(days=365) if end is not None: end = Time.fromISO8601TimeAndDate(end).asDatetime() else: end = datetime.now() for change in tracstats.changes(cursor, start, end): if change['author'] != forAuthor: continue if change['old'] != 'closed' and change['new'] == 'closed': print 'Closed', change['ticket'], 'on', change['time'] raise SystemExit()
def main(cursor, start=None, end=None): if start is not None: start = Time.fromISO8601TimeAndDate(start).asDatetime() else: start = datetime.now() - timedelta(days=365) if end is not None: end = Time.fromISO8601TimeAndDate(end).asDatetime() else: end = datetime.now() closers = {} for change in tracstats.changes(cursor, start, end): if change['old'] != 'closed' and change['new'] == 'closed': closers[change['author']] = closers.get(change['author'], 0) + 1 return tracstats.Frequencies( "Ticket Closers", sorted(closers.items(), key=lambda (a, b): b))
def _parse_list_buckets(self, xml_bytes): """ Parse XML bucket list response. """ root = XML(xml_bytes) buckets = [] for bucket_data in root.find("Buckets"): name = bucket_data.findtext("Name") date_text = bucket_data.findtext("CreationDate") date_time = Time.fromISO8601TimeAndDate(date_text).asDatetime() bucket = Bucket(name, date_time) buckets.append(bucket) return buckets
def formatEntry(self, formatting, entry): """ Format an Superfeedr entry element according to the formatting type. """ parts = [ getattr(entry, elemName, None) or u'<unknown>' for elemName in formatting] parts = u' -- '.join(map(str, parts)) try: timestamp = Time.fromISO8601TimeAndDate( str(entry.published)).asHumanly(tzinfo=const.timezone) timestamp = u' (%s)' % (timestamp,) except ValueError: timestamp = u'' return u'%s%s' % (parts, timestamp)
def formatEntry(self, formatting, entry): """ Format an Superfeedr entry element according to the formatting type. """ parts = [ getattr(entry, elemName, None) or u'<unknown>' for elemName in formatting ] parts = u' -- '.join(map(str, parts)) try: timestamp = Time.fromISO8601TimeAndDate(str( entry.published)).asHumanly(tzinfo=const.timezone) timestamp = u' (%s)' % (timestamp, ) except ValueError: timestamp = u'' return u'%s%s' % (parts, timestamp)
s = Store() err = self.assertRaises(AttributeError, FunkyItem, store=s, name="foo") self.assertEqual(str(err), "'FunkyItem' can't set attribute 'name'") class WhiteboxComparableTest(TestCase): def test_likeRejectsIllegalOperations(self): """ Test that invoking the underlying method which provides the interface to the LIKE operator raises a TypeError if it is invoked with too few arguments. """ self.assertRaises(TypeError, Comparable()._like, 'XYZ') someRandomDate = Time.fromISO8601TimeAndDate("1980-05-29") class DatedThing(Item): date = timestamp(default=someRandomDate) class CreationDatedThing(Item): creationDate = timestamp(defaultFactory=lambda : Time()) class StructuredDefaultTestCase(TestCase): def testTimestampDefault(self): s = Store() sid = DatedThing(store=s).storeID self.assertEqual(s.getItemByID(sid).date, someRandomDate) def testTimestampNow(self):
@raise ValueError: If no XSI type information could be found @rtype: C{unicode} @return: The XSI type string """ xsiType = elem.get(XSI + 'type') if xsiType is None: xsiType = elem.get(XSI2001 + 'type') if xsiType is not None: return unicode(xsiType, 'ascii') raise ValueError(u'"%s" has no XSI type information' % (elem.tag,)) _xsiTypes = { u'xsd:string': unicode, u'xsd:int': int, u'xsd:boolean': lambda t: t.lower() == 'true', u'xsd:dateTime': lambda t: Time.fromISO8601TimeAndDate(t), } def getValueFromXSIType(elem, xsiType=None): """ Convert C{elem} to it's Python value based on it's C{xsi:type} attriubte. """ if xsiType is None: xsiType = getXSIType(elem) return _xsiTypes[xsiType](elem.text)