initial checkin of base RSpec class
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Thu, 21 Apr 2011 19:15:19 +0000 (15:15 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Thu, 21 Apr 2011 19:15:19 +0000 (15:15 -0400)
sfa/rspecs/rspec.py [new file with mode: 0755]

diff --git a/sfa/rspecs/rspec.py b/sfa/rspecs/rspec.py
new file mode 100755 (executable)
index 0000000..92be729
--- /dev/null
@@ -0,0 +1,70 @@
+#!/usr/bin/python 
+from lxml import etree
+from StringIO import StringIO
+from datetime import datetime, timedelta
+from sfa.util.xrn import *
+from sfa.util.plxrn import hostname_to_urn
+from sfa.util.config import Config  
+from sfa.util.faults import SfaNotImplemented
+
+class RSpec:
+    xml = None
+    header = '<?xml version="1.0"?>\n'
+    namespaces = {}
+    config = Config()
+  
+    def __init__(self, rspec="", namespaces={}):
+        if rspec:
+            self.parse_rspec(rspec, namespaces)
+        else:
+            self.create()
+
+    def create(self, type="advertisement"):
+        # eg. 2011-03-23T19:53:28Z 
+        date_format = '%Y-%m-%dT%H:%M:%SZ'
+        now = datetime.utcnow()
+        generated_ts = now.strftime(date_format)
+        expires_ts = (now + timedelta(minutes=30)).strftime(date_format) 
+        self.xml = etree.Element("rspec", type = type, 
+                                 valid_until=expires_ts,   
+                                 generated=generated_ts)
+    
+    def parse_rspec(self, rspec, namespaces={}):
+        try:
+            tree = etree.parse(rspec)
+            self.xml = tree.getroot()  
+            if namespaces:
+               self.namespaces = namespaces
+        except IOError:
+            # 'rspec' file doesnt exist. 'rspec' is proably an xml string
+            try:
+                tree = etree.parse(StringIO(rspec))
+                self.xml = tree.getroot()  
+            except:
+                raise IOError('Must specify a xml file or xml string. Received: ' + rspec )
+
+    def get_network(self):
+        raise SfaNotImplemented()
+
+    def get_nodes(self, nodes_with_slivers=False):
+        raise SfaNotImplemented()
+        
+    def add_nodes(self, nodes, check_for_dupes=False):
+        raise SfaNotImplemented()
+
+    def add_slivers(self, slivers, check_for_dupes=False): 
+        raise SfaNotImplemented()
+            
+    def add_links(self, links, check_for_dupes=False):
+        raise SfaNotImplemented()
+
+    def __str__(self):
+        return self.toxml()
+
+    def toxml(self):
+        return self.header + etree.tostring(self.xml, pretty_print=True)  
+        
+
+if __name__ == '__main__':
+    rspec = RSpec()
+    print rspec