blob: 4b67ef216e792f33c0911e049ed404294a18d994 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
# ATOM data conversion functions
from util import *
from elemutil import *
from xmlutil import *
# Convert a list of elements to a list of values representing an ATOM entry
def entryElementValues(e):
lt = filter(selector((element, "'title")), e)
t = "" if isNil(lt) else elementValue(car(lt))
li = filter(selector((element, "'id")), e)
i = "" if isNil(li) else elementValue(car(li))
lc = filter(selector((element, "'content")), e)
return append((element, "'entry", (element, "'title", t), (element, "'id", i)),
() if isNil(lc) else () if isAttribute(elementValue(car(lc))) else ((element, "'content", elementValue(car(lc))),))
# Convert a list of elements to a list of values representing ATOM entries
def entriesElementValues(e):
if isNil(e):
return e
return cons(entryElementValues(car(e)), entriesElementValues(cdr(e)))
# Convert a list of strings to a list of values representing an ATOM entry
def readATOMEntry(l):
e = readXML(l)
if isNil(e):
return ()
return (entryElementValues(car(e)),)
# Return true if a list of strings represents an ATOM feed
def isATOMFeed(l):
if not isXML(l):
return False
return contains(car(l), "<feed") and contains(car(l), "=\"http://www.w3.org/2005/Atom\"")
# Return true if a list of strings represents an ATOM entry
def isATOMEntry(l):
if not isXML(l):
return False
return contains(car(l), "<entry") and not contains(car(l), "<feed") and contains(car(l), "=\"http://www.w3.org/2005/Atom\"")
# Convert a list of strings to a list of values representing an ATOM feed
def readATOMFeed(l):
f = readXML(l)
if isNil(f):
return ()
t = filter(selector((element, "'title")), car(f))
i = filter(selector((element, "'id")), car(f))
e = filter(selector((element, "'entry")), car(f))
return (append(
(element, "'feed", (element, "'title", elementValue(car(t))), (element, "'id", elementValue(car(i)))),
entriesElementValues(e)),)
# Convert a list of values representy an ATOM entry to a list of elements
def entryElement(l):
title = elementValue(namedElementChild("'title", l))
id = elementValue(namedElementChild("'id", l))
content = namedElementChild("'content", l)
text = False if isNil(content) else elementHasValue(content)
return append(append(
(element, "'entry", (attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
(element, "'title", (attribute, "'type", "text"), title),
(element, "'id", id)),
() if isNil(content) else (append(
(element, "'content", (attribute, "'type", "text" if text else "application/xml")), (elementValue(content),) if text else elementChildren(content)),)),
((element, "'link", (attribute, "'href", id)),))
# Convert a list of values representing ATOM entries to a list of elements
def entriesElements(l):
if isNil(l):
return l
return cons(entryElement(car(l)), entriesElements(cdr(l)))
# Convert a list of values representing an ATOM entry to an ATOM entry
def writeATOMEntry(ll):
l = ll if isNil(ll) else car(ll)
return writeXML((entryElement(l),), True)
# Convert a list of values representing an ATOM feed to an ATOM feed
def writeATOMFeed(ll):
l = ll if isNil(ll) else car(ll)
lt = filter(selector((element, "'title")), l)
t = '' if isNil(lt) else elementValue(car(lt))
li = filter(selector((element, "'id")), l)
i = '' if isNil(li) else elementValue(car(li))
f = (element, "'feed", (attribute, "'xmlns", "http://www.w3.org/2005/Atom"),
(element, "'title", (attribute, "'type", "text"), t),
(element, "'id", i))
# Write ATOM entries
le = filter(selector((element, "'entry")), l)
if isNil(le):
return writeXML((f,), True)
# Write a single ATOM entry element with a list of values
if not isNil(le) and not isNil(car(le)) and isList(car(caddr(car(le)))):
fe = append(f, entriesElements(caddr(car(le))))
return writeXML((fe,), True)
# Write separate ATOM entry elements
fe = append(f, entriesElements(le))
return writeXML((fe,), True)