summaryrefslogtreecommitdiff
path: root/src/python/LibicalWrap_icaltimezone.i
diff options
context:
space:
mode:
Diffstat (limited to 'src/python/LibicalWrap_icaltimezone.i')
-rw-r--r--src/python/LibicalWrap_icaltimezone.i216
1 files changed, 216 insertions, 0 deletions
diff --git a/src/python/LibicalWrap_icaltimezone.i b/src/python/LibicalWrap_icaltimezone.i
new file mode 100644
index 0000000..804a59e
--- /dev/null
+++ b/src/python/LibicalWrap_icaltimezone.i
@@ -0,0 +1,216 @@
+
+/*======================================================================
+ FILE: LibicalWrap_icaltimezone.i
+
+ (C) COPYRIGHT 2010 Glenn Washburn
+
+ The contents of this file are subject to the Mozilla Public License
+ Version 1.0 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and
+ limitations under the License.
+
+ The original author is Glenn Washburn (crass@berlios.de)
+
+ Contributions from:
+
+ ======================================================================*/
+
+%rename(icaltimezone) _icaltimezone;
+
+%inline %{
+#include "libical/icaltimezone.h"
+#include "libical/icaltimezoneimpl.h"
+%}
+%include "libical/icaltimezone.h"
+%include "libical/icaltimezoneimpl.h"
+
+
+%pythoncode %{
+
+import time, datetime
+
+##### Support datetime.tzinfo API #####
+# This is a "good enough" implementation right now. Make better
+# later, if needed.
+class icaltzinfo(datetime.tzinfo):
+ def __init__(self, icaltimezone):
+ self.tz = icaltimezone
+
+ def __cmp__(self, tzinfo):
+ return cmp(self.tz, self.tz)
+
+ def utcoffset(self, dt):
+ timet = time.mktime(dt.timetuple())
+ tt = icaltimetype.from_timet(int(timet),0,None)
+ utcoffset = _LibicalWrap.icaltimezone_get_utc_offset(self.tz, tt, None)
+ return datetime.timedelta(utcoffset)
+
+ def dst(self, dt):
+ # FIXME: Since icaltimezone_get_utc_offset does all the
+ # calc for dst internally and there is not function which
+ # returns what we need here, we'll probably need to partly
+ # reimplement icaltimezone_get_utc_offset
+ return datetime.timedelta(0)
+
+ def tzname(self, dt):
+ return _LibicalWrap.icaltimezone_get_tzid(self.tz)
+
+# def fromutc(self, dt): pass
+
+%}
+
+
+#if 0
+
+/** Sets the prefix to be used for tzid's generated from system tzdata.
+ Must be globally unique (such as a domain name owned by the developer
+ of the calling application), and begin and end with forward slashes.
+ Do not change or de-allocate the string buffer after calling this.
+ */
+void icaltimezone_set_tzid_prefix(const char *new_prefix);
+
+/**
+ * @par Accessing timezones.
+ */
+
+/** Free any builtin timezone information **/
+void icaltimezone_free_builtin_timezones(void);
+
+/** Returns the array of builtin icaltimezones. */
+icalarray* icaltimezone_get_builtin_timezones (void);
+
+/**
+ * @par Converting times between timezones.
+ */
+
+void icaltimezone_convert_time (struct icaltimetype *tt,
+ icaltimezone *from_zone,
+ icaltimezone *to_zone);
+
+
+/**
+ * @par Getting offsets from UTC.
+ */
+
+/** Calculates the UTC offset of a given local time in the given
+ timezone. It is the number of seconds to add to UTC to get local
+ time. The is_daylight flag is set to 1 if the time is in
+ daylight-savings time. */
+int icaltimezone_get_utc_offset (icaltimezone *zone,
+ struct icaltimetype *tt,
+ int *is_daylight);
+
+/** Calculates the UTC offset of a given UTC time in the given
+ timezone. It is the number of seconds to add to UTC to get local
+ time. The is_daylight flag is set to 1 if the time is in
+ daylight-savings time. */
+int icaltimezone_get_utc_offset_of_utc_time (icaltimezone *zone,
+ struct icaltimetype *tt,
+ int *is_daylight);
+
+
+/*
+ * @par Handling the default location the timezone files
+ */
+
+/** Set the directory to look for the zonefiles */
+void set_zone_directory(char *path);
+
+/** Free memory dedicated to the zonefile directory */
+void free_zone_directory(void);
+void icaltimezone_release_zone_tab(void);
+
+/*
+ * @par Debugging Output.
+ */
+
+/** Dumps information about changes in the timezone up to and including
+ max_year. */
+int icaltimezone_dump_changes (icaltimezone *zone,
+ int max_year,
+ FILE *fp);
+
+#endif
+
+
+// Add some methods to the icaltimetype struct
+%extend _icaltimezone {
+
+ /* Might want to change this to somethingmore reasonable,
+ like longitude or utc offset. */
+ int __cmp__(icaltimezone *zone) {
+ return strcmp(icaltimezone_get_tzid($self),
+ icaltimezone_get_tzid(zone));
+ }
+
+}
+
+%pythoncode %{
+
+# Remove accessors to private structure members, which is all of them
+_swig_remove_private_properties(icaltimezone)
+
+def _icaltimezone_set_component_wrap(self, comp):
+ ret = _LibicalWrap.icaltimezone_set_component(self, comp)
+ if not ret:
+ # Not successful, raise an exception because setting a property
+ # has not return value to be checked.
+ raise Error.LibicalError("Failed to set component to timezone")
+
+# Set/Overwrite icaltimezone properties
+icaltimezone_props = {
+ "tzid": (_LibicalWrap.icaltimezone_get_tzid, ),
+ "location": (_LibicalWrap.icaltimezone_get_location, ),
+ "tznames": (_LibicalWrap.icaltimezone_get_tznames, ),
+ "latitude": (_LibicalWrap.icaltimezone_get_latitude, ),
+ "longitude": (_LibicalWrap.icaltimezone_get_longitude, ),
+ "display_name": (_LibicalWrap.icaltimezone_get_display_name, ),
+ "component": (_LibicalWrap.icaltimezone_get_component,
+ _icaltimezone_set_component_wrap, ),
+}
+
+_swig_set_properties(icaltimezone, icaltimezone_props)
+
+# UTC = _LibicalWrap.icaltimezone_get_utc_timezone()
+
+def icaltimezone_copy(self):
+ tz = _LibicalWrap.icaltimezone_copy(self)
+ tz.this.acquire()
+ return tz
+
+def icaltimezone_new(self):
+ # Hand off the underlying pointer by setting the this attribute
+ print "newing icaltimezone"
+ obj = _LibicalWrap.icaltimezone_new()
+ obj.this.acquire()
+ try: self.this.append(obj.this)
+ except: self.this = obj.this
+
+def icaltimezone_delete(self):
+ # do not delete the struct because swig will do this
+ if self.this.own():
+ _LibicalWrap.icaltimezone_free(self, 0)
+
+icaltimezone_methods = {
+ 'as_tzinfo': icaltzinfo,
+ 'copy': icaltimezone_copy,
+ '__init__': icaltimezone_new,
+ '__del__': icaltimezone_delete,
+}
+_swig_add_instance_methods(icaltimezone, icaltimezone_methods)
+
+icaltimezone.get_builtin_timezone = staticmethod(_LibicalWrap.icaltimezone_get_builtin_timezone)
+icaltimezone.get_builtin_timezone_from_offset = staticmethod(_LibicalWrap.icaltimezone_get_builtin_timezone_from_offset)
+icaltimezone.get_builtin_timezone_from_tzid = staticmethod(_LibicalWrap.icaltimezone_get_builtin_timezone_from_tzid)
+
+#icaltimezone.free_builtin_timezones = staticmethod(_LibicalWrap.icaltimezone_free_builtin_timezones)
+#icaltimezone.get_builtin_timezones = staticmethod(_LibicalWrap.icaltimezone_get_builtin_timezones)
+
+
+%}
+