def datequarterend(arg): try: m = dateQuarterEndPattern.match(arg) year = int(m.group(3) or m.group(5)) # year pattern, raises AttributeError if no pattern match month = {"first":3, "1":3, "second":6, "2":6, "third":9, "3":9, "fourth":12, "last":12, "4":12 }[(m.group(2) or m.group(6)).lower()] return str(datetime.date(year, month, lastDayOfMonth(year, month))) except (AttributeError, ValueError, KeyError): raise FunctionArgType(0, "xs:date")