1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
#!/usr/bin/env python
import os, sys, re
from roundup import instance, date, hyperdb
def create(db, **issue):
# first we need to create a 'msg' node containing the message
msg = {}
# check if the message was passed on the command line
if issue.has_key('messages'):
# from command line
msg['content'] = issue['messages']
else:
msg['content'] = ' No Message Provided '
msg['author'] = db.getuid()
msg['date'] = date.Date('.')
# create the 'msg' node
issue['messages'] = db.msg.create(**msg) # will be put in list in next part
# resolve linked and multilinked properties
properties = db.issue.getprops()
for key in issue.keys():
if properties.has_key(key):
if isinstance(properties[key], hyperdb.Link):
if not issue[key].isdigit():
# resolve linked property names into node ids
klass = db.getclass(properties[key].classname)
issue[key] = klass.lookup(issue[key])
elif isinstance(properties[key], hyperdb.Multilink):
# resolve multilinked property names into node ids
klass = db.getclass(properties[key].classname)
links = []
for item in issue[key].split(','):
if not item.isdigit():
nodeid = klass.lookup(item)
else:
nodeid = item
if not nodeid in links:
links.append(nodeid)
issue[key] = links
# next we create the issue itself
issue_id = db.issue.create(**issue)
print "Created issue%s"%issue_id
if __name__ == '__main__':
if len(sys.argv) > 1:
sys.argv.pop(0)
fname = sys.argv.pop(0)
failureInfo = file(fname,'r').read()
if not failureInfo:
sys.exit(0)
# convert script arguments to issue properties
issue = {}
tracker_home = None
user = None
issue['messages']=failureInfo
for arg in sys.argv:
arg = arg.split('=')
if len(arg) == 2:
if arg[0].lower() == 'tracker_home':
# get tracker home from argument list
tracker_home = arg[1]
elif arg[0].lower() == 'user':
# get user from argument list
user = arg[1]
else:
# store argument in issue dictionary
issue[arg[0]] = '='.join(arg[1:])
# if no tracker_home on argument list, then try to get it from
# the environment list
if not tracker_home:
tracker_home = os.getenv('TRACKER_HOME')
# if no user on argument list, then try to get it from
# the environment list
if not user:
user = os.getenv('USER')
if not user:
user = 'anonymous'
# chevck if we have a valid tracker home
if not os.path.exists(os.path.normpath('%s/config.ini'%tracker_home)):
sys.stderr.write('ERROR: TRACKER_HOME (%s) is not a valid path\n'%tracker_home)
sys.exit(-1)
# open a tracker instance
tracker = instance.open(tracker_home)
# open the database
db = tracker.open(user)
try:
# create issue
create(db, **issue)
# write changes to database
db.commit()
finally:
# make sure we close the database in all conditions
db.close()
|