Changeset 193
- Timestamp:
- 04/17/12 16:48:27 (13 months ago)
- Location:
- PyCalendar/branches/json/src/pycalendar
- Files:
-
- 1 added
- 20 edited
-
attribute.py (modified) (1 diff)
-
calendar.py (modified) (2 diffs)
-
componentbase.py (modified) (3 diffs)
-
datetime.py (modified) (2 diffs)
-
datetimevalue.py (modified) (1 diff)
-
duration.py (modified) (1 diff)
-
durationvalue.py (modified) (1 diff)
-
integervalue.py (modified) (1 diff)
-
multivalue.py (modified) (1 diff)
-
period.py (modified) (1 diff)
-
periodvalue.py (modified) (1 diff)
-
plaintextvalue.py (modified) (1 diff)
-
property.py (modified) (1 diff)
-
recurrence.py (modified) (1 diff)
-
recurrencevalue.py (modified) (1 diff)
-
requeststatusvalue.py (modified) (1 diff)
-
tests/test_json.py (added)
-
tests/test_xml.py (modified) (1 diff)
-
utcoffsetvalue.py (modified) (2 diffs)
-
value.py (modified) (1 diff)
-
valueutils.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
PyCalendar/branches/json/src/pycalendar/attribute.py
r164 r193 104 104 text = XML.SubElement(param, xmldefs.makeTag(namespace, xmldefs.value_text)) 105 105 text.text = value 106 107 def writeJSON(self, jobject): 108 jobject[self.getName().lower()] = self.mValues if len(self.mValues) > 1 else self.mValues[0] 109 -
PyCalendar/branches/json/src/pycalendar/calendar.py
r169 r193 42 42 import collections 43 43 import xml.etree.cElementTree as XML 44 import json 44 45 45 46 class PyCalendar(PyCalendarComponentBase): … … 457 458 super(PyCalendar, self).writeXML(root, xmldefs.iCalendar20_namespace) 458 459 return root 460 461 def getTextJSON(self, includeTimezones=False): 462 jobject = self.writeJSON(includeTimezones) 463 return json.dumps(jobject, indent=2) 464 465 def writeJSON(self, includeTimezones=False): 466 # Make sure all required timezones are in this object 467 if includeTimezones: 468 self.includeTimezones() 469 470 # Root node structure 471 vcalendar = [] 472 super(PyCalendar, self).writeJSON(vcalendar) 473 return vcalendar 459 474 460 475 # Get expanded components -
PyCalendar/branches/json/src/pycalendar/componentbase.py
r179 r193 309 309 self.writeComponentsFilteredXML(comp, namespace, filter) 310 310 311 def writeJSON(self, jobject): 312 313 # Component element 314 comp = {"type":self.getType().lower()} 315 jobject.append(comp) 316 317 # Each property 318 self.writePropertiesJSON(comp) 319 320 # Each component 321 self.writeComponentsJSON(comp) 322 323 def writeJSONFiltered(self, jobject, filter): 324 # Component element 325 comp = {"type":self.getType()} 326 jobject.append(comp) 327 328 # Each property 329 self.writePropertiesFilteredJSON(comp, filter) 330 331 # Each component 332 self.writeComponentsFilteredJSON(comp, filter) 333 311 334 def sortedComponents(self): 312 335 … … 371 394 if subfilter is not None: 372 395 subcomp.writeFilteredXML(comps, namespace, subfilter) 396 397 def writeComponentsJSON(self, jobject): 398 399 if self.mComponents: 400 comps = [] 401 jobject["components"] = comps 402 403 # Write out the remainder 404 for component in self.sortedComponents(): 405 component.writeJSON(comps) 406 407 def writeComponentsFilteredJSON(self, jobject, filter): 408 409 if self.mComponents: 410 comps = [] 411 jobject["components"] = comps 412 413 # Shortcut for all sub-components 414 if filter.isAllSubComponents(): 415 self.writeJSON(comps) 416 elif filter.hasSubComponentFilters(): 417 for subcomp in self.sortedcomponents(): 418 subfilter = filter.getSubComponentFilter(subcomp.getType()) 419 if subfilter is not None: 420 subcomp.writeFilteredJSON(comps, subfilter) 373 421 374 422 def loadValue(self, value_name): … … 530 578 prop.writeFilteredXML(props, namespace, filter) 531 579 580 def writePropertiesJSON(self, jobject): 581 582 properties = {} 583 jobject["properties"] = properties 584 585 # Sort properties by name 586 keys = self.sortedPropertyKeys() 587 for key in keys: 588 props = self.mProperties[key] 589 for prop in props: 590 prop.writeJSON(properties) 591 592 def writePropertiesFilteredJSON(self, jobject, filter): 593 594 properties = {} 595 jobject["properties"] = properties 596 597 # Sort properties by name 598 keys = self.sortedPropertyKeys() 599 600 # Shortcut for all properties 601 if filter.isAllProperties(): 602 for key in keys: 603 for prop in self.getProperties(key): 604 prop.writeJSON(properties) 605 elif filter.hasPropertyFilters(): 606 for key in keys: 607 for prop in self.getProperties(key): 608 prop.writeFilteredJSON(properties, filter) 609 532 610 def loadPrivateValue(self, value_name): 533 611 # Read it in from properties list and then delete the property from the -
PyCalendar/branches/json/src/pycalendar/datetime.py
r178 r193 814 814 return "%04d-%02d-%02dT%02d:%02d:%02d" % ( self.mYear, self.mMonth, self.mDay, self.mHours, self.mMinutes, self.mSeconds ) 815 815 816 getJSONText = getXMLText 817 816 818 @classmethod 817 819 def parseText(cls, data, fullISO=False): … … 966 968 value.text = self.getXMLText() 967 969 970 def writeJSON(self, jobject): 971 jobject["date" if self.isDateOnly() else "date-time"] = self.getJSONText() 972 968 973 def normalise( self ): 969 974 # Normalise seconds -
PyCalendar/branches/json/src/pycalendar/datetimevalue.py
r164 r193 39 39 self.mValue.writeXML(node, namespace) 40 40 41 def writeJSON(self, jobject): 42 self.mValue.writeJSON(jobject) 43 41 44 def getValue(self): 42 45 return self.mValue -
PyCalendar/branches/json/src/pycalendar/duration.py
r173 r193 254 254 def writeXML(self, node, namespace): 255 255 node.text = self.getText() 256 257 def writeJSON(self, jobject): 258 jobject["duration"] = self.getText() 259 -
PyCalendar/branches/json/src/pycalendar/durationvalue.py
r164 r193 40 40 value.text = self.mValue.writeXML() 41 41 42 def writeJSON(self, jobject): 43 self.mValue.writeJSON(jobject) 44 42 45 def getValue(self): 43 46 return self.mValue -
PyCalendar/branches/json/src/pycalendar/integervalue.py
r164 r193 45 45 value.text = str(self.mValue) 46 46 47 def writeJSON(self, jobject): 48 jobject["integer"] = self.mValue 49 47 50 def getValue(self): 48 51 return self.mValue -
PyCalendar/branches/json/src/pycalendar/multivalue.py
r189 r193 83 83 iter.writeXML(node, namespace) 84 84 85 def writeJSON(self, jobject): 86 mtype = None 87 values = [] 88 for iter in self.mValues: 89 result = {} 90 iter.writeJSON(result) 91 k, v = result.items()[0] 92 if mtype is None: 93 mtype = k 94 values.append(v) 95 jobject[mtype] = values 96 85 97 PyCalendarValue.registerType(PyCalendarValue.VALUETYPE_MULTIVALUE, PyCalendarMultiValue, None) -
PyCalendar/branches/json/src/pycalendar/period.py
r164 r193 104 104 end.text = self.mEnd.getXMLText() 105 105 106 def writeJSON(self, jobject): 107 108 period = {} 109 jobject["period"] = period 110 111 period["start"] = self.mStart.getJSONText() 112 113 if self.mUseDuration: 114 period["duration"] = self.mDuration.getText() 115 else: 116 period["end"] = self.mEnd.getJSONText() 117 106 118 def getStart( self ): 107 119 return self.mStart -
PyCalendar/branches/json/src/pycalendar/periodvalue.py
r164 r193 40 40 value.text = self.mValue.writeXML() 41 41 42 def writeJSON(self, jobject): 43 self.mValue.writeJSON(jobject) 44 42 45 def getValue( self ): 43 46 return self.mValue -
PyCalendar/branches/json/src/pycalendar/plaintextvalue.py
r164 r193 43 43 value.text = self.mValue 44 44 45 def writeJSON(self, jobject): 46 jobject["text"] = self.mValue 47 45 48 def getValue(self): 46 49 return self.mValue -
PyCalendar/branches/json/src/pycalendar/property.py
r191 r193 500 500 self.mValue.writeXML(prop, namespace) 501 501 502 def writeJSON(self, jobject): 503 504 prop = {} 505 if self.getName().lower() not in jobject: 506 jobject[self.getName().lower()] = prop 507 elif isinstance(jobject[self.getName().lower()], list): 508 jobject[self.getName().lower()].append(prop) 509 else: 510 jobject[self.getName().lower()] = [jobject[self.getName().lower()], prop] 511 512 # Write all attributes 513 if len(self.mAttributes): 514 params = {} 515 prop["parameters"] = params 516 for key in sorted(self.mAttributes.keys()): 517 for attr in self.mAttributes[key]: 518 if attr.getName() != "VALUE": 519 attr.writeJSON(params) 520 521 # Write value 522 if self.mValue: 523 self.mValue.writeJSON(prop) 524 525 502 526 def _init_PyCalendarProperty(self): 503 527 self.mName = "" -
PyCalendar/branches/json/src/pycalendar/recurrence.py
r164 r193 673 673 child.text = str(item) 674 674 675 def writeJSON(self, jobject): 676 677 recur = {} 678 jobject["recur"] = recur 679 680 recur["freq"] = self.cFreqToXMLMap[self.mFreq] 681 682 if self.mUseCount: 683 recur["count"] = self.mCount 684 elif self.mUseUntil: 685 recur["until"] = self.mUntil.getJSONText() 686 687 if self.mInterval > 1: 688 recur["interval"] = self.mInterval 689 690 if self.mBySeconds is not None and len(self.mBySeconds) != 0: 691 recur["bysecond"] = self.mBySeconds 692 if self.mByMinutes is not None and len(self.mByMinutes) != 0: 693 recur["byminute"] = self.mByMinutes 694 if self.mByHours is not None and len(self.mByHours) != 0: 695 recur["byhour"] = self.mByHours 696 697 if self.mByDay is not None and len(self.mByDay) != 0: 698 bydays = [] 699 for iter in self.mByDay: 700 data = "" 701 if iter[0] != 0: 702 data = str(iter[0]) 703 data += self.cWeekdayRecurMap.get(iter[1], "") 704 bydays.append(data) 705 recur["byday"] = bydays 706 707 if self.mByMonthDay is not None and len(self.mByMonthDay) != 0: 708 recur["bymonthday"] = self.mByMonthDay 709 if self.mByYearDay is not None and len(self.mByYearDay) != 0: 710 recur["byyearday"] = self.mByYearDay 711 if self.mByWeekNo is not None and len(self.mByWeekNo) != 0: 712 recur["byweekno"] = self.mByWeekNo 713 if self.mByMonth is not None and len(self.mByMonth) != 0: 714 recur["bymonth"] = self.mByMonth 715 if self.mBySetPos is not None and len(self.mBySetPos) != 0: 716 recur["bysetpos"] = self.mBySetPos 717 718 # MO is the default so we do not need it 719 if self.mWeekstart != definitions.eRecurrence_WEEKDAY_MO: 720 recur["wkst"] = self.cWeekdayRecurMap.get(self.mWeekstart, definitions.cICalValue_RECUR_WEEKDAY_MO) 721 675 722 676 723 def hasBy(self): -
PyCalendar/branches/json/src/pycalendar/recurrencevalue.py
r164 r193 39 39 self.mValue.writeXML(node, namespace) 40 40 41 def writeJSON(self, jobject): 42 self.mValue.writeJSON(jobject) 43 41 44 def getValue( self ): 42 45 return self.mValue -
PyCalendar/branches/json/src/pycalendar/requeststatusvalue.py
r172 r193 91 91 if len(self.mValue) == 3 and self.mValue[2]: 92 92 data = XML.SubElement(node, xmldefs.makeTag(namespace, xmldefs.req_status_data)) 93 data.text = self.mValue[1] 93 data.text = self.mValue[2] 94 95 def writeJSON(self, jobject): 96 jobject["request-status"] = { 97 "code": self.mValue[0], 98 "description": self.mValue[1] 99 } 100 if len(self.mValue) == 3 and self.mValue[2]: 101 jobject["request-status"]["data"] = self.mValue[2] 94 102 95 103 def getValue(self): -
PyCalendar/branches/json/src/pycalendar/tests/test_xml.py
r191 r193 20 20 import unittest 21 21 22 class Test Calendar(unittest.TestCase):22 class TestXML(unittest.TestCase): 23 23 24 24 data = ( -
PyCalendar/branches/json/src/pycalendar/utcoffsetvalue.py
r164 r193 89 89 def writeXML(self, node, namespace): 90 90 91 os = StringIO .StringIO()91 os = StringIO() 92 92 self.generate(os) 93 93 text = os.getvalue() … … 96 96 value = self.getXMLNode(node, namespace) 97 97 value.text = text 98 99 def writeJSON(self, jobject): 100 101 os = StringIO() 102 self.generate(os) 103 text = os.getvalue() 104 text = text[:-2] + ":" + text[-2:] 105 106 jobject["utc-offset"] = text 98 107 99 108 def getValue( self ): -
PyCalendar/branches/json/src/pycalendar/value.py
r191 r193 89 89 raise NotImplementedError 90 90 91 def writeJSON(self, jobject): 92 raise NotImplementedError 93 91 94 def getXMLNode(self, node, namespace): 92 95 return XML.SubElement(node, xmldefs.makeTag(namespace, self._xmlMap[self.getType()])) -
PyCalendar/branches/json/src/pycalendar/valueutils.py
r164 r193 43 43 def writeXML(self, node, namespace): 44 44 raise NotImplementedError 45 46 def writeJSON(self, jobject): 47 raise NotImplementedError
Note: See TracChangeset
for help on using the changeset viewer.