Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 import sys
00012 try:
00013 from cStringIO import StringIO
00014 except ImportError:
00015 from io import StringIO
00016 import re
00017 import os, os.path
00018 import errno
00019 import argparse
00020
00021 IODELIM = '---'
00022 AUTOGEN="# ====== DO NOT MODIFY! AUTOGENERATED FROM A SERVICE PAIR DEFINITION ======\n\n"
00023
00024 class PairSpecException(Exception): pass
00025
00026 def parse_service_pair_spec(text, package_context = ''):
00027 pieces = [StringIO()]
00028 for l in text.split('\n'):
00029 if l.startswith(IODELIM):
00030 pieces.append(StringIO())
00031 else:
00032 pieces[-1].write(l + '\n')
00033 return [p.getvalue() for p in pieces]
00034
00035 def write_file(filename, text):
00036 f = open(filename, 'w')
00037 f.write(text)
00038 f.close()
00039
00040 def main():
00041
00042 parser = argparse.ArgumentParser(description='Service pair generator.')
00043 parser.add_argument('filename', nargs=1, type=str, help="filename of the .pair service")
00044 parser.add_argument('-o', '--output-dir', action='store', default='.', help='output directory')
00045 args = parser.parse_args()
00046
00047
00048 try:
00049 os.makedirs(args.output_dir)
00050 except OSError as e:
00051 if e.errno == errno.EEXIST:
00052 pass
00053 else:
00054 raise
00055
00056 service_pair_file = args.filename[0]
00057 if not service_pair_file.endswith('.pair'):
00058 print("The file specified has the wrong extension. It must end in .pair")
00059 else:
00060 filename = service_pair_file
00061
00062 f = open(filename)
00063 service_pair_spec = f.read()
00064 f.close()
00065
00066 name = os.path.basename(filename)[:-7]
00067 (name, unused_sep, unused_ext) = os.path.basename(filename).partition('.')
00068
00069
00070 pieces = parse_service_pair_spec(service_pair_spec)
00071 if len(pieces) != 2:
00072 raise ActionSpecException("%s: wrong number of pieces, %d"%(filename,len(pieces)))
00073 service_request, service_response = pieces
00074 service_pair_msg = AUTOGEN + name + 'PairRequest pair_request\n' + name + 'PairResponse pair_response\n'
00075 service_request_msg = AUTOGEN + service_request
00076 service_pair_request_msg = AUTOGEN + 'uuid_msgs/UniqueID id\n' + name + 'Request request\n'
00077 service_response_msg = AUTOGEN + service_response
00078 service_pair_response_msg = AUTOGEN + 'uuid_msgs/UniqueID id\n' + name + 'Response response\n'
00079
00080 write_file(os.path.join(args.output_dir, "%sPair.msg"%name), service_pair_msg)
00081 write_file(os.path.join(args.output_dir, "%sRequest.msg"%name), service_request_msg)
00082 write_file(os.path.join(args.output_dir, "%sPairRequest.msg"%name), service_pair_request_msg)
00083 write_file(os.path.join(args.output_dir, "%sResponse.msg"%name), service_response_msg)
00084 write_file(os.path.join(args.output_dir, "%sPairResponse.msg"%name), service_pair_response_msg)
00085
00086
00087 if __name__ == '__main__': main()