本文整理汇总了Python中pycalendar.datetime.PyCalendarDateTime类的典型用法代码示例。如果您正苦于以下问题:Python PyCalendarDateTime类的具体用法?Python PyCalendarDateTime怎么用?Python PyCalendarDateTime使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了PyCalendarDateTime类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。
示例1: _addEvent
def _addEvent(self):
if not self._client.started:
return succeed(None)
calendars = self._calendarsOfType(caldavxml.calendar, "VEVENT")
while calendars:
calendar = self.random.choice(calendars)
calendars.remove(calendar)
# Copy the template event and fill in some of its fields
# to make a new event to create on the calendar.
vcalendar = self._eventTemplate.duplicate()
vevent = vcalendar.mainComponent()
uid = str(uuid4())
dtstart = self._eventStartDistribution.sample()
dtend = dtstart + PyCalendarDuration(seconds=self._eventDurationDistribution.sample())
vevent.replaceProperty(Property("CREATED", PyCalendarDateTime.getNowUTC()))
vevent.replaceProperty(Property("DTSTAMP", PyCalendarDateTime.getNowUTC()))
vevent.replaceProperty(Property("DTSTART", dtstart))
vevent.replaceProperty(Property("DTEND", dtend))
vevent.replaceProperty(Property("UID", uid))
rrule = self._recurrenceDistribution.sample()
if rrule is not None:
vevent.addProperty(Property(None, None, None, pycalendar=rrule))
href = '%s%s.ics' % (calendar.url, uid)
d = self._client.addEvent(href, vcalendar)
return self._newOperation("create", d)
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:30,代码来源:profiles.py
示例2: doIt
def doIt(self, txn):
uid = raw_input("Owner UID/Name: ")
start = raw_input("Start Time (UTC YYYYMMDDTHHMMSSZ or YYYYMMDD): ")
if len(start) == 8:
start += "T000000Z"
end = raw_input("End Time (UTC YYYYMMDDTHHMMSSZ or YYYYMMDD): ")
if len(end) == 8:
end += "T000000Z"
try:
start = PyCalendarDateTime.parseText(start)
except ValueError:
print("Invalid start value")
returnValue(None)
try:
end = PyCalendarDateTime.parseText(end)
except ValueError:
print("Invalid end value")
returnValue(None)
timerange = caldavxml.TimeRange(start=start.getText(), end=end.getText())
home = yield txn.calendarHomeWithUID(uid)
if home is None:
print("Could not find calendar home")
returnValue(None)
yield self.eventsForEachCalendar(home, uid, timerange)
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:28,代码来源:dbinspect.py
示例3: _doRefresh
def _doRefresh(tzpath, xmlfile, tzdb, tzvers):
"""
Refresh data from IANA.
"""
print("Downloading latest data from IANA")
if tzvers:
path = "https://www.iana.org/time-zones/repository/releases/tzdata%s.tar.gz" % (tzvers,)
else:
path = "https://www.iana.org/time-zones/repository/tzdata-latest.tar.gz"
data = urllib.urlretrieve(path)
print("Extract data at: %s" % (data[0]))
rootdir = tempfile.mkdtemp()
zonedir = os.path.join(rootdir, "tzdata")
os.mkdir(zonedir)
with tarfile.open(data[0], "r:gz") as t:
t.extractall(zonedir)
# Get the version from the Makefile
try:
makefile = open(os.path.join(zonedir, "Makefile")).read()
lines = makefile.splitlines()
for line in lines:
if line.startswith("VERSION="):
tzvers = line[8:].strip()
break
except IOError:
pass
if not tzvers:
tzvers = PyCalendarDateTime.getToday().getText()
print("Converting data (version: %s) at: %s" % (tzvers, zonedir,))
startYear = 1800
endYear = PyCalendarDateTime.getToday().getYear() + 10
PyCalendar.sProdID = "-//calendarserver.org//Zonal//EN"
zonefiles = "northamerica", "southamerica", "europe", "africa", "asia", "australasia", "antarctica", "etcetera", "backward"
parser = tzconvert()
for file in zonefiles:
parser.parse(os.path.join(zonedir, file))
parser.generateZoneinfoFiles(os.path.join(rootdir, "zoneinfo"), startYear, endYear, filterzones=())
print("Copy new zoneinfo to destination: %s" % (tzpath,))
z = FilePath(os.path.join(rootdir, "zoneinfo"))
tz = FilePath(tzpath)
z.copyTo(tz)
print("Updating XML file at: %s" % (xmlfile,))
tzdb.readDatabase()
tzdb.updateDatabase()
print("Current total: %d" % (len(tzdb.timezones),))
print("Total Changed: %d" % (tzdb.changeCount,))
if tzdb.changeCount:
print("Changed:")
for k in sorted(tzdb.changed):
print(" %s" % (k,))
versfile = os.path.join(os.path.dirname(xmlfile), "version.txt")
print("Updating version file at: %s" % (versfile,))
with open(versfile, "w") as f:
f.write(TimezoneCache.IANA_VERSION_PREFIX + tzvers)
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:59,代码来源:managetimezones.py
示例4: doPOSTExpand
def doPOSTExpand(self, request):
"""
Expand a timezone within specified start/end dates.
"""
tzid = request.args.get("tzid", ())
if len(tzid) != 1:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
(calendarserver_namespace, "valid-timezone"),
"Invalid tzid query parameter",
))
tzid = tzid[0]
try:
tzdata = readTZ(tzid)
except TimezoneException:
raise HTTPError(ErrorResponse(
responsecode.NOT_FOUND,
(calendarserver_namespace, "timezone-available"),
"Timezone not found",
))
try:
start = request.args.get("start", ())
if len(start) != 1:
raise ValueError()
start = PyCalendarDateTime.parseText(start[0])
except ValueError:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
(calendarserver_namespace, "valid-start-date"),
"Invalid start query parameter",
))
try:
end = request.args.get("end", ())
if len(end) != 1:
raise ValueError()
end = PyCalendarDateTime.parseText(end[0])
if end <= start:
raise ValueError()
except ValueError:
raise HTTPError(ErrorResponse(
responsecode.BAD_REQUEST,
(calendarserver_namespace, "valid-end-date"),
"Invalid end query parameter",
))
# Now do the expansion (but use a cache to avoid re-calculating TZs)
observances = self.cache.get((tzid, start, end), None)
if observances is None:
observances = tzexpand(tzdata, start, end)
self.cache[(tzid, start, end)] = observances
# Turn into XML
result = customxml.TZData(
*[customxml.Observance(customxml.Onset(onset), customxml.UTCOffset(utc_offset)) for onset, utc_offset in observances]
)
return XMLResponse(responsecode.OK, result)
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:59,代码来源:timezoneservice.py
示例5: __init__
def __init__(self, *children, **attributes):
super(CalDAVTimeRangeElement, self).__init__(*children, **attributes)
# One of start or end must be present
if "start" not in attributes and "end" not in attributes:
raise ValueError("One of 'start' or 'end' must be present in CALDAV:time-range")
self.start = PyCalendarDateTime.parseText(attributes["start"]) if "start" in attributes else None
self.end = PyCalendarDateTime.parseText(attributes["end"]) if "end" in attributes else None
开发者ID:anemitz,项目名称:calendarserver,代码行数:9,代码来源:caldavxml.py
示例6: __init__
def __init__(self, xml_element):
super(TimeRange, self).__init__(xml_element)
# One of start or end must be present
if "start" not in xml_element.attributes and "end" not in xml_element.attributes:
raise ValueError("One of 'start' or 'end' must be present in CALDAV:time-range")
self.start = PyCalendarDateTime.parseText(xml_element.attributes["start"]) if "start" in xml_element.attributes else None
self.end = PyCalendarDateTime.parseText(xml_element.attributes["end"]) if "end" in xml_element.attributes else None
self.tzinfo = None
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:11,代码来源:calendarqueryfilter.py
示例7: _invite
def _invite(self):
"""
Try to add a new event, or perhaps remove an
existing attendee from an event.
@return: C{None} if there are no events to play with,
otherwise a L{Deferred} which fires when the attendee
change has been made.
"""
if not self._client.started:
return succeed(None)
# Find calendars which are eligible for invites
calendars = self._calendarsOfType(caldavxml.calendar, "VEVENT")
while calendars:
# Pick one at random from which to try to create an event
# to modify.
calendar = self.random.choice(calendars)
calendars.remove(calendar)
# Copy the template event and fill in some of its fields
# to make a new event to create on the calendar.
vcalendar = self._eventTemplate.duplicate()
vevent = vcalendar.mainComponent()
uid = str(uuid4())
dtstart = self._eventStartDistribution.sample()
dtend = dtstart + PyCalendarDuration(seconds=self._eventDurationDistribution.sample())
vevent.replaceProperty(Property("CREATED", PyCalendarDateTime.getNowUTC()))
vevent.replaceProperty(Property("DTSTAMP", PyCalendarDateTime.getNowUTC()))
vevent.replaceProperty(Property("DTSTART", dtstart))
vevent.replaceProperty(Property("DTEND", dtend))
vevent.replaceProperty(Property("UID", uid))
rrule = self._recurrenceDistribution.sample()
if rrule is not None:
vevent.addProperty(Property(None, None, None, pycalendar=rrule))
vevent.addProperty(self._client._makeSelfOrganizer())
vevent.addProperty(self._client._makeSelfAttendee())
attendees = list(vevent.properties('ATTENDEE'))
for _ignore in range(int(self._inviteeCountDistribution.sample())):
try:
self._addAttendee(vevent, attendees)
except CannotAddAttendee:
self._failedOperation("invite", "Cannot add attendee")
return succeed(None)
href = '%s%s.ics' % (calendar.url, uid)
d = self._client.addInvite(href, vcalendar)
return self._newOperation("invite", d)
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:53,代码来源:profiles.py
示例8: doCapabilities
def doCapabilities(self, request):
"""
Return a list of all timezones known to the server.
"""
# Determine min/max date-time for iSchedule
now = PyCalendarDateTime.getNowUTC()
minDateTime = PyCalendarDateTime(now.getYear(), 1, 1, 0, 0, 0, PyCalendarTimezone(utc=True))
minDateTime.offsetYear(-1)
maxDateTime = PyCalendarDateTime(now.getYear(), 1, 1, 0, 0, 0, PyCalendarTimezone(utc=True))
maxDateTime.offsetYear(10)
result = ischedulexml.QueryResult(
ischedulexml.Capabilities(
ischedulexml.Version.fromString(config.Scheduling.iSchedule.SerialNumber),
ischedulexml.Versions(
ischedulexml.Version.fromString("1.0"),
),
ischedulexml.SchedulingMessages(
ischedulexml.Component(
ischedulexml.Method(name="REQUEST"),
ischedulexml.Method(name="CANCEL"),
ischedulexml.Method(name="REPLY"),
name="VEVENT"
),
ischedulexml.Component(
ischedulexml.Method(name="REQUEST"),
ischedulexml.Method(name="CANCEL"),
ischedulexml.Method(name="REPLY"),
name="VTODO"
),
ischedulexml.Component(
ischedulexml.Method(name="REQUEST"),
name="VFREEBUSY"
),
),
ischedulexml.CalendarDataTypes(
ischedulexml.CalendarDataType(**{
"content-type": "text/calendar",
"version": "2.0",
}),
),
ischedulexml.Attachments(
ischedulexml.External(),
),
ischedulexml.MaxContentLength.fromString(config.MaxResourceSize),
ischedulexml.MinDateTime.fromString(minDateTime.getText()),
ischedulexml.MaxDateTime.fromString(maxDateTime.getText()),
ischedulexml.MaxInstances.fromString(config.MaxAllowedInstances),
ischedulexml.MaxRecipients.fromString(config.MaxAttendeesPerInstance),
ischedulexml.Administrator.fromString(request.unparseURL(params="", querystring="", fragment="")),
),
)
response = XMLResponse(responsecode.OK, result)
response.headers.addRawHeader(ISCHEDULE_CAPABILITIES, str(config.Scheduling.iSchedule.SerialNumber))
return response
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:57,代码来源:resource.py
示例9: __init__
def __init__(self, threshold, past):
"""
@param threshold: the size in bytes that will trigger a split
@type threshold: C{int}
@param past: number of days in the past where the split will occur
@type past: C{int}
"""
self.threshold = threshold
self.past = PyCalendarDateTime.getNowUTC()
self.past.setHHMMSS(0, 0, 0)
self.past.offsetDay(-past)
self.now = PyCalendarDateTime.getNowUTC()
self.now.setHHMMSS(0, 0, 0)
self.now.offsetDay(-1)
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:15,代码来源:icalsplitter.py
示例10: setUpCalendarStore
def setUpCalendarStore(test):
test.root = FilePath(test.mktemp())
test.root.createDirectory()
storeRootPath = test.storeRootPath = test.root.child("store")
calendarPath = storeRootPath.child("calendars").child("__uids__")
calendarPath.parent().makedirs()
storePath.copyTo(calendarPath)
# Set year values to current year
nowYear = PyCalendarDateTime.getToday().getYear()
for home in calendarPath.child("ho").child("me").children():
if not home.basename().startswith("."):
for calendar in home.children():
if not calendar.basename().startswith("."):
for resource in calendar.children():
if resource.basename().endswith(".ics"):
resource.setContent(resource.getContent() % {"now": nowYear})
testID = test.id()
test.calendarStore = CalendarStore(
storeRootPath,
{"push": test.notifierFactory} if test.notifierFactory else {},
buildDirectory(),
quota=deriveQuota(test),
)
test.txn = test.calendarStore.newTransaction(testID + "(old)")
assert test.calendarStore is not None, "No calendar store?"
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:28,代码来源:test_file.py
示例11: updateToCurrentYear
def updateToCurrentYear(data):
"""
Update the supplied iCalendar data so that all dates are updated to the current year.
"""
nowYear = PyCalendarDateTime.getToday().getYear()
return data % {"now": nowYear}
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:7,代码来源:util.py
示例12: _transferAttendeeData
def _transferAttendeeData(self, serverComponent, clientComponent, declines):
# We are skipping this check now - instead we let the server data override the broken client data
# First check validity of date-time related properties and get removed components which are declines
self._checkInvalidChanges(serverComponent, clientComponent, declines)
# Now look for items to transfer from one to the other.
# We care about the ATTENDEE's PARTSTAT, TRANSP, VALARMS, X-APPLE-NEEDS-REPLY,
# DTSTAMP, LAST-MODIFIED, COMPLETED, and ATTACH's referring to a dropbox
replyNeeded = False
# ATTENDEE/PARTSTAT/RSVP
serverAttendee = serverComponent.getAttendeeProperty((self.attendee,))
clientAttendee = clientComponent.getAttendeeProperty((self.attendee,))
# Possible case where one ATTENDEE prop is missing - this happens with a "fake" master sometimes
if serverAttendee is None or clientAttendee is None:
log.error("ATTENDEE for user making an attendee change is missing: %s" % (self.attendee,))
return False, False
if serverAttendee.parameterValue("PARTSTAT", "NEEDS-ACTION") != clientAttendee.parameterValue("PARTSTAT", "NEEDS-ACTION"):
serverAttendee.setParameter("PARTSTAT", clientAttendee.parameterValue("PARTSTAT", "NEEDS-ACTION"))
# If PARTSTAT was changed by the attendee, add a timestamp if needed
if config.Scheduling.Options.TimestampAttendeePartStatChanges:
serverAttendee.setParameter("X-CALENDARSERVER-DTSTAMP", PyCalendarDateTime.getNowUTC().getText())
replyNeeded = True
if serverAttendee.parameterValue("RSVP", "FALSE") != clientAttendee.parameterValue("RSVP", "FALSE"):
if clientAttendee.parameterValue("RSVP", "FALSE") == "FALSE":
try:
serverAttendee.removeParameter("RSVP")
except KeyError:
pass
else:
serverAttendee.setParameter("RSVP", "TRUE")
# Transfer these properties from the client data
replyNeeded |= self._transferProperty("X-CALENDARSERVER-PRIVATE-COMMENT", serverComponent, clientComponent)
self._transferProperty("TRANSP", serverComponent, clientComponent)
self._transferProperty("DTSTAMP", serverComponent, clientComponent)
self._transferProperty("LAST-MODIFIED", serverComponent, clientComponent)
self._transferProperty("COMPLETED", serverComponent, clientComponent)
for pname in config.Scheduling.CalDAV.PerAttendeeProperties:
self._transferProperty(pname, serverComponent, clientComponent)
# Dropbox - this now never returns false
if config.EnableDropBox:
self._transferDropBoxData(serverComponent, clientComponent)
# Handle VALARMs
serverComponent.removeAlarms()
for comp in clientComponent.subcomponents():
if comp.name() == "VALARM":
serverComponent.addComponent(comp)
return True, replyNeeded
开发者ID:anemitz,项目名称:calendarserver,代码行数:59,代码来源:icaldiff.py
示例13: createNewDatabase
def createNewDatabase(self):
"""
Create a new DB xml file from scratch by scanning zoneinfo.
"""
self.dtstamp = PyCalendarDateTime.getNowUTC().getXMLText()
self._scanTZs("")
self._dumpTZs()
开发者ID:anemitz,项目名称:calendarserver,代码行数:8,代码来源:timezonestdservice.py
示例14: doRequest
def doRequest(self):
"""
Execute the actual HTTP request.
"""
now = PyCalendarDateTime.getNowUTC()
href = joinURL(self.sessions[0].calendarHref, "put.ics")
self.sessions[0].writeData(URL(path=href), ICAL % (now.getYear() + 1,), "text/calendar")
开发者ID:anemitz,项目名称:calendarserver,代码行数:8,代码来源:put.py
示例15: _purgeUID
def _purgeUID(self, uid):
if self.when is None:
self.when = PyCalendarDateTime.getNowUTC()
# Does the record exist?
record = self.directory.recordWithUID(uid)
if record is None:
# The user has already been removed from the directory service. We
# need to fashion a temporary, fake record
# FIXME: probably want a more elegant way to accomplish this,
# since it requires the aggregate directory to examine these first:
record = DirectoryRecord(self.directory, "users", uid, shortNames=(uid,), enabledForCalendaring=True)
self.directory._tmpRecords["shortNames"][uid] = record
self.directory._tmpRecords["uids"][uid] = record
# Override augments settings for this record
record.enabled = True
record.enabledForCalendaring = True
record.enabledForAddressBooks = True
cua = "urn:uuid:%s" % (uid,)
principalCollection = self.directory.principalCollection
principal = principalCollection.principalForRecord(record)
# See if calendar home is provisioned
txn = self.store.newTransaction()
storeCalHome = (yield txn.calendarHomeWithUID(uid))
calHomeProvisioned = storeCalHome is not None
# If in "completely" mode, unshare collections, remove notifications
if calHomeProvisioned and self.completely:
yield self._cleanHome(txn, storeCalHome)
yield txn.commit()
count = 0
assignments = []
if calHomeProvisioned:
count = (yield self._cancelEvents(txn, uid, cua))
# Remove empty calendar collections (and calendar home if no more
# calendars)
yield self._removeCalendarHome(uid)
# Remove VCards
count += (yield self._removeAddressbookHome(uid))
if self.proxies and not self.dryrun:
if self.verbose:
print("Deleting any proxy assignments")
assignments = (yield self._purgeProxyAssignments(principal))
returnValue((count, assignments))
开发者ID:anemitz,项目名称:calendarserver,代码行数:57,代码来源:purge.py
示例16: updateDatabase
def updateDatabase(self):
"""
Update existing DB info by comparing md5's.
"""
self.dtstamp = PyCalendarDateTime.getNowUTC().getXMLText()
self.changeCount = 0
self.changed = set()
self._scanTZs("", checkIfChanged=True)
if self.changeCount:
self._dumpTZs()
开发者ID:anemitz,项目名称:calendarserver,代码行数:10,代码来源:timezonestdservice.py
示例17: prepare
def prepare(self):
"""
Do some setup prior to the real request.
"""
# Add resources to create required number of changes
self.start = PyCalendarDateTime.getNowUTC()
self.start.setHHMMSS(12, 0, 0)
self.end = self.start.duplicate()
self.end.offsetHours(1)
for i in range(self.count):
href = joinURL(self.sessions[0].calendarHref, "tr-query-%d.ics" % (i + 1,))
self.sessions[0].writeData(URL(path=href), ICAL % (self.start.getText(), i + 1,), "text/calendar")
开发者ID:anemitz,项目名称:calendarserver,代码行数:12,代码来源:query.py
示例18: buildFreeBusyResult
def buildFreeBusyResult(fbinfo, timerange, organizer=None, attendee=None, uid=None, method=None, event_details=None):
"""
Generate a VCALENDAR object containing a single VFREEBUSY that is the
aggregate of the free busy info passed in.
@param fbinfo: the array of busy periods to use.
@param timerange: the L{TimeRange} for the query.
@param organizer: the L{Property} for the Organizer of the free busy request, or None.
@param attendee: the L{Property} for the Attendee responding to the free busy request, or None.
@param uid: the UID value from the free busy request.
@param method: the METHOD property value to insert.
@param event_details: VEVENT components to add.
@return: the L{Component} containing the calendar data.
"""
# Merge overlapping time ranges in each fb info section
normalizePeriodList(fbinfo[0])
normalizePeriodList(fbinfo[1])
normalizePeriodList(fbinfo[2])
# Now build a new calendar object with the free busy info we have
fbcalendar = Component("VCALENDAR")
fbcalendar.addProperty(Property("VERSION", "2.0"))
fbcalendar.addProperty(Property("PRODID", iCalendarProductID))
if method:
fbcalendar.addProperty(Property("METHOD", method))
fb = Component("VFREEBUSY")
fbcalendar.addComponent(fb)
if organizer is not None:
fb.addProperty(organizer)
if attendee is not None:
fb.addProperty(attendee)
fb.addProperty(Property("DTSTART", timerange.start))
fb.addProperty(Property("DTEND", timerange.end))
fb.addProperty(Property("DTSTAMP", PyCalendarDateTime.getNowUTC()))
if len(fbinfo[0]) != 0:
fb.addProperty(Property("FREEBUSY", fbinfo[0], {"FBTYPE": "BUSY"}))
if len(fbinfo[1]) != 0:
fb.addProperty(Property("FREEBUSY", fbinfo[1], {"FBTYPE": "BUSY-TENTATIVE"}))
if len(fbinfo[2]) != 0:
fb.addProperty(Property("FREEBUSY", fbinfo[2], {"FBTYPE": "BUSY-UNAVAILABLE"}))
if uid is not None:
fb.addProperty(Property("UID", uid))
else:
uid = str(uuid.uuid4())
fb.addProperty(Property("UID", uid))
if event_details:
for vevent in event_details:
fbcalendar.addComponent(vevent)
return fbcalendar
开发者ID:anemitz,项目名称:calendarserver,代码行数:52,代码来源:freebusy.py
示例19: ensureEvents
def ensureEvents(self, session, calendarhref, n):
"""
Make sure the required number of events are present in the calendar.
@param n: number of events
@type n: C{int}
"""
now = PyCalendarDateTime.getNowUTC()
for i in range(n - self.currentCount):
index = self.currentCount + i + 1
href = joinURL(calendarhref, "%d.ics" % (index,))
session.writeData(URL(path=href), ICAL % (now.getYear() + 1, index,), "text/calendar")
self.currentCount = n
开发者ID:anemitz,项目名称:calendarserver,代码行数:14,代码来源:sqlusage.py
示例20: prepare
def prepare(self):
"""
Do some setup prior to the real request.
"""
if not self.full:
# Get current sync token
results, _ignore_bad = self.sessions[0].getProperties(URL(path=self.sessions[0].calendarHref), (davxml.sync_token,))
self.synctoken = results[davxml.sync_token]
# Add resources to create required number of changes
now = PyCalendarDateTime.getNowUTC()
for i in range(self.count):
href = joinURL(self.sessions[0].calendarHref, "sync-collection-%d.ics" % (i + 1,))
self.sessions[0].writeData(URL(path=href), ICAL % (now.getYear() + 1, i + 1,), "text/calendar")
开发者ID:svn2github,项目名称:calendarserver-raw,代码行数:14,代码来源:sync.py
注:本文中的pycalendar.datetime.PyCalendarDateTime类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论