Project

General

Profile

1
#!/usr/bin/env python
2
# Translates a data dictionary spreadsheet to Redmine formatting
3
# Spreadsheet must have columns <Term>|...|Sources
4
# - <Term> can be any name
5
# Usage: self <spreadsheet >redmine
6

    
7
import csv
8
import re
9
import sys
10

    
11
# Spreadsheet format
12
source_sep = ', '
13
term_col = 0
14

    
15
##### URLs
16

    
17
def simplify_url(url): return re.sub(r'\(.*?\)', r'', url)
18

    
19
def url_term(url):
20
    match = re.search(r'[\w-]+$', url)
21
    assert match
22
    return match.groups(0)
23

    
24
##### Redmine
25

    
26
def redmine_url(text, url):
27
    if url: return '"'+text+'":'+url
28
    else: return text
29

    
30
def source2redmine_url(url):
31
    return redmine_url(url_term(url), simplify_url(url))
32

    
33
class RedmineTableWriter:
34
    '''Formats rows as a Redmine table'''
35
    
36
    def __init__(self, stream):
37
        self.stream = stream
38
    
39
    def writerow(self, row):
40
        self.stream.write(('|'.join(['']+row+['']))+'\n')
41

    
42

    
43
def main():
44
    # Determine column order
45
    reader = csv.reader(sys.stdin)
46
    header = reader.next()
47
    sources_col = header.index('Sources')
48
    
49
    # Translate input
50
    writer = RedmineTableWriter(sys.stdout)
51
    writer.writerow(['*Term*', '*Sources*'])
52
    for row in reader:
53
        term = row[term_col]
54
        sources = map(simplify_url, row[sources_col].split(source_sep))
55
        sources_str = source_sep.join(sources)
56
        
57
        writer.writerow([redmine_url(term, sources[0]), sources_str])
58

    
59
main()
(13-13/69)