from __future__ import generators
from RDF import *

class FOAF:
    def __init__(self,url):
        self.model = Model()
        Parser().parse_into_model(self.model,url)
        self.NAME = Node(uri_string="http://xmlns.com/foaf/0.1/name")
        self.NICK = Node(uri_string="http://xmlns.com/foaf/0.1/nick")
        self.TITLE = Node(uri_string="http://purl.org/dc/elements/1.1/title")
    def blogs(self):
        statement = Statement(subject=None,
                predicate=Node(uri_string="http://xmlns.com/foaf/0.1/weblog"),
                object=None)

        for i in self.model.find_statements(statement):
            yield i.object

    def feed(self,blog):
        statement = Statement(subject=blog,
                predicate=Node(uri_string="http://www.w3.org/2000/01/rdf-schema#seeAlso"),
                object=None)
        for i in self.model.find_statements(statement):
            return i.object

    def owner(self,blog):
        if type(blog) is str:
            blog_uri = Node(uri_string=blog)
        else:
            blog_uri = blog

        statement = Statement(subject=None,
                predicate=Node(uri_string="http://xmlns.com/foaf/0.1/weblog"),
                object=blog_uri)

        for i in self.model.find_statements(statement):
            return i.subject

    def property(self,node,property):
        if type(node) is str:
            subject = Node(uri_string=node)
        else:
            subject = node

        if type(property) is str:
            predicate = Node(uri_string=property)
        else:
            predicate = property

        return self.model.get_target(subject,property)

if __name__ == '__main__':
    f = FOAF("file:blogsources.rdf")
    for blog in f.blogs():
        print blog.uri
        print f.property(blog,f.TITLE)
        print f.feed(blog)
        owner = f.owner(blog)
        print f.property(owner,f.NAME)
        print f.property(owner,f.NICK)
        print
