コード例 #1
0
def main(argv=None):
    
    global r
    
    if argv is None:
           argv = sys.argv

   
    parser = argparse.ArgumentParser(
       description=__description__,formatter_class=RawTextHelpFormatter)

    parser.add_argument('url',metavar='URL',help="redmine url (excluding http)")
    parser.add_argument('api_key',metavar='KEY',help="user api key")

    parser.add_argument('--filename',metavar='FILE',default='tasks.csv',help="name of the csv file to sync")

    try:
       args = parser.parse_args()
    except:
       sys.exit(1)
    
    filename=args.filename
    url=args.url
    api_key=args.api_key
    
    r = Redmine(url,api_key)
    
    data=read_data(filename)

    newdata=[]
    id_hash={}
    for i in data:
    
        project_id=find_project_id(i['project'])
        assigned_to_id=find_user_id(i['assigned_to'])
        status_id=find_status_id(i['status'])
        tracker_id=find_tracker_id(i['tracker'])
    
        logger.debug("%(project_id)s,%(assigned_to_id)s,%(status_id)s,%(tracker_id)s" % locals())
    
        if i['id'][-1].upper()=='D':
            i['id']=i['id'][0:-1]
            r.Issue().delete(i['id'])
            logger.info('Deleted %s %s' % (i['id'],i['subject']))
        elif i['id'][-1].upper()=='E' or i['id'].upper()=='A':
            i_id=i['id'][0:-1]
            if project_id and tracker_id and status_id and assigned_to_id:
    
                if i['id']=='A':
                    ni=r.Issue()()
                    action = "Added"
                else:
                    action ="Updated"
                    ni = r.Issue().find(i_id)

                ni.subject=i['subject']
                ni.tracker_id=tracker_id
                ni.project_id=project_id
                ni.assigned_to_id=assigned_to_id
                ni.status_id = status_id
                ni.priority_id = i['priority']
                
           
    
                ni.save()
            
        
                newdata.append({
                    'id':ni.id,
                    'subject':ni.subject,
                    'project': r.Project().find(ni.project.id).identifier,
                    'assigned_to': find_user_or_group_login(ni.assigned_to_id),
                    'status': i['status'],
                    'tracker': ni.tracker.name,
                    'priority': i['priority'],
                    'last_sync': date.today()
                })
        
                id_hash[ni.id]=True
            
                logger.info('%s %s,%s' % (action,ni.id,ni.subject))
        
            else:
                i['last_sync']=None
                newdata.append(i)
                logger.warning('Data error with record %s,%s' % (i['id'],i['subject']))

    issues=r.Issue().find()

    for ni in issues:
        try:
            i_id=id_hash[ni.id]
        except:
            
            try:
                assigned_to = find_user_or_group_login(ni.assigned_to.id)
            except:
                assigned_to = None
                
            newdata.append({
                    'id':ni.id,
                    'subject':ni.subject,
                    'project': r.Project().find(ni.project.id).identifier,
                    'assigned_to': assigned_to,
                    'status': ni.status.name,
                    'tracker': ni.tracker.name,
                    'priority': ni.priority.id,
                    'last_sync': date.today(),
            })
            action='Syncing'
            logger.info('%s %s,%s' % (action,ni.id,ni.subject))
        
    write_data(filename,newdata)