+from sfa.util.version import version_core
+from sfa.util.cache import Cache
+from sfa.rspecs.version_manager import VersionManager
+
+AGGREGATE_PORT=12346
+CM_PORT=12346
+
+# utility methods here
+# display methods
+def display_rspec(rspec, format='rspec'):
+ if format in ['dns']:
+ tree = etree.parse(StringIO(rspec))
+ root = tree.getroot()
+ result = root.xpath("./network/site/node/hostname/text()")
+ elif format in ['ip']:
+ # The IP address is not yet part of the new RSpec
+ # so this doesn't do anything yet.
+ tree = etree.parse(StringIO(rspec))
+ root = tree.getroot()
+ result = root.xpath("./network/site/node/ipv4/text()")
+ else:
+ result = rspec
+
+ print result
+ return
+
+def display_list(results):
+ for result in results:
+ print result
+
+def display_records(recordList, dump=False):
+ ''' Print all fields in the record'''
+ for record in recordList:
+ display_record(record, dump)
+
+def display_record(record, dump=False):
+ if dump:
+ record.dump()
+ else:
+ info = record.getdict()
+ print "%s (%s)" % (info['hrn'], info['type'])
+ return
+
+
+def filter_records(type, records):
+ filtered_records = []
+ for record in records:
+ if (record['type'] == type) or (type == "all"):
+ filtered_records.append(record)
+ return filtered_records
+
+
+# save methods
+def save_variable_to_file(var, filename, format="text"):
+ f = open(filename, "w")
+ if format == "text":
+ f.write(str(var))
+ elif format == "pickled":
+ f.write(pickle.dumps(var))
+ else:
+ # this should never happen
+ print "unknown output format", format
+
+
+def save_rspec_to_file(rspec, filename):
+ if not filename.endswith(".rspec"):
+ filename = filename + ".rspec"
+ f = open(filename, 'w')
+ f.write(rspec)
+ f.close()
+ return
+
+def save_records_to_file(filename, recordList, format="xml"):
+ if format == "xml":
+ index = 0
+ for record in recordList:
+ if index > 0:
+ save_record_to_file(filename + "." + str(index), record)
+ else:
+ save_record_to_file(filename, record)
+ index = index + 1
+ elif format == "xmllist":
+ f = open(filename, "w")
+ f.write("<recordlist>\n")
+ for record in recordList:
+ record = SfaRecord(dict=record)
+ f.write('<record hrn="' + record.get_name() + '" type="' + record.get_type() + '" />\n')
+ f.write("</recordlist>\n")
+ f.close()
+ elif format == "hrnlist":
+ f = open(filename, "w")
+ for record in recordList:
+ record = SfaRecord(dict=record)
+ f.write(record.get_name() + "\n")
+ f.close()
+ else:
+ # this should never happen
+ print "unknown output format", format
+
+def save_record_to_file(filename, record):
+ if record['type'] in ['user']:
+ record = UserRecord(dict=record)
+ elif record['type'] in ['slice']:
+ record = SliceRecord(dict=record)
+ elif record['type'] in ['node']:
+ record = NodeRecord(dict=record)
+ elif record['type'] in ['authority', 'ma', 'sa']:
+ record = AuthorityRecord(dict=record)
+ else:
+ record = SfaRecord(dict=record)
+ str = record.save_to_string()
+ f=codecs.open(filename, encoding='utf-8',mode="w")
+ f.write(str)
+ f.close()
+ return
+
+
+# load methods
+def load_record_from_file(filename):
+ f=codecs.open(filename, encoding="utf-8", mode="r")
+ str = f.read()
+ f.close()
+ record = SfaRecord(string=str)
+ return record
+
+
+import uuid
+def unique_call_id(): return uuid.uuid4().urn