Skip to content

Instantly share code, notes, and snippets.

@jonbinney
Created March 1, 2014 23:15
Show Gist options
  • Save jonbinney/9299095 to your computer and use it in GitHub Desktop.
Save jonbinney/9299095 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
from __future__ import print_function
import re, sys, os, os.path
def looks_like_python_code(filename, file_str):
if os.path.splitext(filename)[1] == '.py':
return True
elif file_str[:100].find(r'#!') != -1 and file_str[:100].find('python') != -1:
return True
else:
return False
def process_file(filename):
try:
f = open(filename)
remaining_str = f.read()
f.close()
except UnicodeDecodeError:
# binary files may fail to load in python3
return
if not looks_like_python_code(filename, remaining_str):
return
processed_blocks = []
while len(remaining_str) > 0:
m = publisher_re.search(remaining_str)
if not m:
processed_blocks.append(remaining_str)
break
# find closing paren
paren_count = 1
arglist_start_i = m.start(1)
arglist_end_i = arglist_start_i
while paren_count != 0:
if arglist_end_i >= len(remaining_str):
print('Missing closing paren in %s, skipping...' % filename)
return
if remaining_str[arglist_end_i] == '(':
paren_count += 1
elif remaining_str[arglist_end_i] == ')':
paren_count -= 1
arglist_end_i += 1
processed_blocks.append(remaining_str[:arglist_end_i-1])
# nothing to do if queue_size already present
if remaining_str[arglist_start_i:arglist_end_i].find('queue_size') != -1:
pass
else:
processed_blocks.append(', queue_size=%d' % queue_size)
processed_blocks.append(')')
remaining_str = remaining_str[arglist_end_i:]
# write corrected code out to same file
f = open(filename, 'w')
f.write(''.join(processed_blocks))
f.close()
publisher_re = re.compile(r'rospy.Publisher\s*\(()')
root_dir = sys.argv[1]
if len(sys.argv) > 2:
queue_size = int(sys.argv[2])
else:
queue_size = 10
for root, dirs, files in os.walk(root_dir):
for filename in files:
process_file(os.path.join(root, filename))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment