Browse Source

Added some documentation for the ATGv2 templates.

master
KaiSD 11 years ago
parent
commit
9feae23690
10 changed files with 509 additions and 38 deletions
  1. +16
    -4
      atg.py
  2. +8
    -3
      atr.py
  3. +17
    -2
      data.py
  4. +47
    -0
      docs/atg.html
  5. +70
    -0
      docs/atr.html
  6. +114
    -0
      docs/data.html
  7. +135
    -0
      docs/template.html
  8. +1
    -1
      ktt_atgcsv.py
  9. +10
    -0
      scripts/gendoc.cmd
  10. +91
    -28
      template.py

+ 16
- 4
atg.py View File

@@ -1,20 +1,26 @@
#!/usr/bin/python #!/usr/bin/python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Advanced Text Generator module for a Kai's Text Tools.
Advanced Text Generator module for a KaiSD Text Tools.


(c) 2013 Ivan "Kai SD" Korystin (c) 2013 Ivan "Kai SD" Korystin


License: GPLv3 License: GPLv3
''' '''
from os.path import join, split, exists
from os.path import join, exists
from os import makedirs from os import makedirs


class ATG(object):
class ATG:
''' '''
Advanced Text Generator is a class, created to generate multiple text files from table data.
Advanced Text Generator is a class, created to generate multiple
text files from table data.
''' '''
def __init__(self, data, template): def __init__(self, data, template):
'''
Constructor.
data - an instance of the data.Data class (i.e. CSVData)
template - an instance of the template.Template class (i.e. TemplateV2)
'''
self.data = data self.data = data
self.template = template self.template = template
self.out = template.process(data) self.out = template.process(data)
@@ -25,6 +31,9 @@ class ATG(object):
self.multiple = False self.multiple = False
def write_files(self, outputDir='.'): def write_files(self, outputDir='.'):
'''
Write generated files to the given directory.
'''
encoding = self.template.encoding encoding = self.template.encoding
extension = self.template.extension extension = self.template.extension
out = self.out out = self.out
@@ -59,4 +68,7 @@ class ATG(object):
f.close() f.close()
def log(self, text): def log(self, text):
'''
Print information
'''
pass pass

+ 8
- 3
atr.py View File

@@ -1,16 +1,18 @@
#!/usr/bin/python #!/usr/bin/python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Advanced Text Replacer module for a Kai's Text Tools.
Advanced Text Replacer module for a KaiSD Text Tools.


(c) 2013 Ivan "Kai SD" Korystin (c) 2013 Ivan "Kai SD" Korystin


License: GPLv3 License: GPLv3
''' '''
import re import re
class ATR(object):
class ATR:
''' '''
classdocs
Advanced Text Replacer - is a class, created to make multiple replacements
in the content or names of text file.
It can make plain replacements, or use ATG templates to do something more complex.
''' '''


def __init__(self, files): def __init__(self, files):
@@ -160,4 +162,7 @@ class ATR(object):
self.replacements = [] self.replacements = []
def log(self, string): def log(self, string):
'''
Print information
'''
pass pass

+ 17
- 2
data.py View File

@@ -1,7 +1,7 @@
#!/usr/bin/python #!/usr/bin/python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Data module for a Kai's Text Tools.
Data module for a KaiSD Text Tools.


(c) 2013 Ivan "Kai SD" Korystin (c) 2013 Ivan "Kai SD" Korystin


@@ -10,7 +10,7 @@ License: GPLv3


import csv, codecs import csv, codecs


class Data(object):
class Data:
''' '''
Empty data class. Can be used for a subclassing or procedural data creation. Empty data class. Can be used for a subclassing or procedural data creation.
''' '''
@@ -97,6 +97,9 @@ class Data(object):
r.append('') r.append('')
def col_by_key(self, key): def col_by_key(self, key):
'''
Returns a column by header's name
'''
cols = [] cols = []
keys = self.keys keys = self.keys
rows = self.rows rows = self.rows
@@ -109,6 +112,9 @@ class Data(object):
return tuple(cols) return tuple(cols)
def row_by_idx(self, idx): def row_by_idx(self, idx):
'''
Returns a row by index.
'''
return tuple(self.rows[idx]) return tuple(self.rows[idx])


class CSVData(Data): class CSVData(Data):
@@ -138,6 +144,15 @@ class CSVData(Data):
return self return self
def __init__(self, filename, encoding='utf-8', delimiter=';', quotechar='"', **kwargs): def __init__(self, filename, encoding='utf-8', delimiter=';', quotechar='"', **kwargs):
'''
Constructor.
filename - CSV table filename
encoding - CSV table encoding
delimiter - CSV table delimiter
quotechar - CSV table quotechar
transpose=True - transpose the table
'''
csvfile = self.Reader(open(filename), encoding=encoding, delimiter=delimiter, quotechar=quotechar) csvfile = self.Reader(open(filename), encoding=encoding, delimiter=delimiter, quotechar=quotechar)
sourceData = [] sourceData = []
sourcekeys = None sourcekeys = None


+ 47
- 0
docs/atg.html View File

@@ -0,0 +1,47 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module atg</title>
</head><body bgcolor="#f0f0f8">

<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>atg</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:///C:/users/kaisd/documents/workbench/programming/ktt/src/atg.py">c:\users\kaisd\documents\workbench\programming\ktt\src\atg.py</a></font></td></tr></table>
<p><tt>Advanced&nbsp;Text&nbsp;Generator&nbsp;module&nbsp;for&nbsp;a&nbsp;KaiSD&nbsp;Text&nbsp;Tools.<br>
&nbsp;<br>
(c)&nbsp;2013&nbsp;Ivan&nbsp;"Kai&nbsp;SD"&nbsp;Korystin&nbsp;<br>
&nbsp;<br>
License:&nbsp;GPLv3</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="atg.html#ATG">ATG</a>
</font></dt></dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="ATG">class <strong>ATG</strong></a></font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>Advanced&nbsp;Text&nbsp;Generator&nbsp;is&nbsp;a&nbsp;class,&nbsp;created&nbsp;to&nbsp;generate&nbsp;multiple<br>
text&nbsp;files&nbsp;from&nbsp;table&nbsp;data.<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="ATG-__init__"><strong>__init__</strong></a>(self, data, template)</dt><dd><tt>Constructor.<br>
data&nbsp;-&nbsp;an&nbsp;instance&nbsp;of&nbsp;the&nbsp;data.Data&nbsp;class&nbsp;(i.e.&nbsp;CSVData)<br>
template&nbsp;-&nbsp;an&nbsp;instance&nbsp;of&nbsp;the&nbsp;template.Template&nbsp;class&nbsp;(i.e.&nbsp;TemplateV2)</tt></dd></dl>

<dl><dt><a name="ATG-log"><strong>log</strong></a>(self, text)</dt><dd><tt>Print&nbsp;information</tt></dd></dl>

<dl><dt><a name="ATG-write_files"><strong>write_files</strong></a>(self, outputDir<font color="#909090">='.'</font>)</dt><dd><tt>Write&nbsp;generated&nbsp;files&nbsp;to&nbsp;the&nbsp;given&nbsp;directory.</tt></dd></dl>

</td></tr></table></td></tr></table>
</body></html>

+ 70
- 0
docs/atr.html View File

@@ -0,0 +1,70 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module atr</title>
</head><body bgcolor="#f0f0f8">

<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>atr</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:///C:/users/kaisd/documents/workbench/programming/ktt/src/atr.py">c:\users\kaisd\documents\workbench\programming\ktt\src\atr.py</a></font></td></tr></table>
<p><tt>Advanced&nbsp;Text&nbsp;Replacer&nbsp;module&nbsp;for&nbsp;a&nbsp;KaiSD&nbsp;Text&nbsp;Tools.<br>
&nbsp;<br>
(c)&nbsp;2013&nbsp;Ivan&nbsp;"Kai&nbsp;SD"&nbsp;Korystin&nbsp;<br>
&nbsp;<br>
License:&nbsp;GPLv3</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="re.html">re</a><br>
</td><td width="25%" valign=top></td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="atr.html#ATR">ATR</a>
</font></dt></dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="ATR">class <strong>ATR</strong></a></font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>Advanced&nbsp;Text&nbsp;Replacer&nbsp;-&nbsp;is&nbsp;a&nbsp;class,&nbsp;created&nbsp;to&nbsp;make&nbsp;multiple&nbsp;replacements<br>
in&nbsp;the&nbsp;content&nbsp;or&nbsp;names&nbsp;of&nbsp;text&nbsp;file.<br>
It&nbsp;can&nbsp;make&nbsp;plain&nbsp;replacements,&nbsp;or&nbsp;use&nbsp;ATG&nbsp;templates&nbsp;to&nbsp;do&nbsp;something&nbsp;more&nbsp;complex.<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="ATR-__init__"><strong>__init__</strong></a>(self, files)</dt><dd><tt>Constructor</tt></dd></dl>

<dl><dt><a name="ATR-clear_replacements"><strong>clear_replacements</strong></a>(self)</dt><dd><tt>Removes&nbsp;all&nbsp;replacements.</tt></dd></dl>

<dl><dt><a name="ATR-log"><strong>log</strong></a>(self, string)</dt><dd><tt>Print&nbsp;information</tt></dd></dl>

<dl><dt><a name="ATR-plain_replace"><strong>plain_replace</strong></a>(self, pattern, string, regexp<font color="#909090">=False</font>)</dt><dd><tt>Replaces&nbsp;the&nbsp;given&nbsp;pattern&nbsp;with&nbsp;string&nbsp;in&nbsp;files.</tt></dd></dl>

<dl><dt><a name="ATR-replace_in_names"><strong>replace_in_names</strong></a>(self)</dt><dd><tt>Do&nbsp;replacement,&nbsp;but&nbsp;in&nbsp;file&nbsp;names&nbsp;instead&nbsp;of&nbsp;file&nbsp;content.&nbsp;Returns&nbsp;the&nbsp;list&nbsp;of&nbsp;new&nbsp;file&nbsp;names,<br>
you&nbsp;can&nbsp;use&nbsp;it&nbsp;with&nbsp;writeNewFiles()&nbsp;method.</tt></dd></dl>

<dl><dt><a name="ATR-templated_replace"><strong>templated_replace</strong></a>(self, pattern, template, data, keyFormat<font color="#909090">='filename'</font>, regexp<font color="#909090">=False</font>)</dt><dd><tt>Replaces&nbsp;the&nbsp;given&nbsp;pattern&nbsp;with&nbsp;data&nbsp;formated&nbsp;by&nbsp;template.<br>
Valid&nbsp;values&nbsp;for&nbsp;keyFormat:<br>
filename&nbsp;-&nbsp;take&nbsp;data&nbsp;rows&nbsp;by&nbsp;filename(path&nbsp;ignored),&nbsp;key&nbsp;value&nbsp;of&nbsp;the&nbsp;data&nbsp;row&nbsp;should&nbsp;store&nbsp;the&nbsp;filename.<br>
fullname&nbsp;-&nbsp;as&nbsp;filename,&nbsp;but&nbsp;with&nbsp;path.<br>
index&nbsp;-&nbsp;take&nbsp;data&nbsp;rows&nbsp;in&nbsp;order,&nbsp;key&nbsp;value&nbsp;of&nbsp;the&nbsp;data&nbsp;row&nbsp;should&nbsp;store&nbsp;the&nbsp;index.&nbsp;Indexes&nbsp;starts&nbsp;with&nbsp;0.<br>
If&nbsp;filename&nbsp;or&nbsp;index&nbsp;cannot&nbsp;be&nbsp;found&nbsp;in&nbsp;data&nbsp;keys,&nbsp;pattern&nbsp;will&nbsp;not&nbsp;be&nbsp;replaced.</tt></dd></dl>

<dl><dt><a name="ATR-write_in_place"><strong>write_in_place</strong></a>(self)</dt><dd><tt>Do&nbsp;replacement&nbsp;and&nbsp;save&nbsp;the&nbsp;files</tt></dd></dl>

<dl><dt><a name="ATR-write_new_files"><strong>write_new_files</strong></a>(self, outfiles)</dt><dd><tt>Do&nbsp;replacement,&nbsp;but&nbsp;save&nbsp;to&nbsp;given&nbsp;files&nbsp;instead&nbsp;of&nbsp;the&nbsp;original&nbsp;ones.</tt></dd></dl>

</td></tr></table></td></tr></table>
</body></html>

+ 114
- 0
docs/data.html View File

@@ -0,0 +1,114 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module data</title>
</head><body bgcolor="#f0f0f8">

<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>data</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:///C:/users/kaisd/documents/workbench/programming/ktt/src/data.py">c:\users\kaisd\documents\workbench\programming\ktt\src\data.py</a></font></td></tr></table>
<p><tt><a href="#Data">Data</a>&nbsp;module&nbsp;for&nbsp;a&nbsp;KaiSD&nbsp;Text&nbsp;Tools.<br>
&nbsp;<br>
(c)&nbsp;2013&nbsp;Ivan&nbsp;"Kai&nbsp;SD"&nbsp;Korystin&nbsp;<br>
&nbsp;<br>
License:&nbsp;GPLv3</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="codecs.html">codecs</a><br>
</td><td width="25%" valign=top><a href="csv.html">csv</a><br>
</td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="data.html#Data">Data</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="data.html#CSVData">CSVData</a>
</font></dt></dl>
</dd>
</dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="CSVData">class <strong>CSVData</strong></a>(<a href="data.html#Data">Data</a>)</font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>Class&nbsp;for&nbsp;reading&nbsp;CSV&nbsp;files.<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="CSVData-__init__"><strong>__init__</strong></a>(self, filename, encoding<font color="#909090">='utf-8'</font>, delimiter<font color="#909090">=';'</font>, quotechar<font color="#909090">='"'</font>, **kwargs)</dt><dd><tt>Constructor.<br>
&nbsp;<br>
filename&nbsp;-&nbsp;CSV&nbsp;table&nbsp;filename<br>
encoding&nbsp;-&nbsp;CSV&nbsp;table&nbsp;encoding<br>
delimiter&nbsp;-&nbsp;CSV&nbsp;table&nbsp;delimiter<br>
quotechar&nbsp;-&nbsp;CSV&nbsp;table&nbsp;quotechar<br>
transpose=True&nbsp;-&nbsp;transpose&nbsp;the&nbsp;table</tt></dd></dl>

<hr>
Data and other attributes defined here:<br>
<dl><dt><strong>Reader</strong> = &lt;class data.Reader&gt;</dl>

<hr>
Methods inherited from <a href="data.html#Data">Data</a>:<br>
<dl><dt><a name="CSVData-__getitem__"><strong>__getitem__</strong></a>(self, pair)</dt><dd><tt>Returns&nbsp;a&nbsp;value&nbsp;for&nbsp;given&nbsp;key&nbsp;and&nbsp;row.</tt></dd></dl>

<dl><dt><a name="CSVData-__repr__"><strong>__repr__</strong></a>(self)</dt></dl>

<dl><dt><a name="CSVData-__setitem__"><strong>__setitem__</strong></a>(self, pair, value)</dt><dd><tt>Sets&nbsp;a&nbsp;value&nbsp;for&nbsp;given&nbsp;key&nbsp;and&nbsp;row.</tt></dd></dl>

<dl><dt><a name="CSVData-__str__"><strong>__str__</strong></a>(self)</dt><dd><tt>Returns&nbsp;data&nbsp;as&nbsp;string.</tt></dd></dl>

<dl><dt><a name="CSVData-add_keys"><strong>add_keys</strong></a>(self, *h)</dt><dd><tt>Adds&nbsp;new&nbsp;keys&nbsp;to&nbsp;the&nbsp;data.</tt></dd></dl>

<dl><dt><a name="CSVData-add_rows"><strong>add_rows</strong></a>(self, n<font color="#909090">=1</font>)</dt><dd><tt>Adds&nbsp;some&nbsp;empty&nbsp;rows&nbsp;to&nbsp;the&nbsp;data.</tt></dd></dl>

<dl><dt><a name="CSVData-col_by_key"><strong>col_by_key</strong></a>(self, key)</dt><dd><tt>Returns&nbsp;a&nbsp;column&nbsp;by&nbsp;header's&nbsp;name</tt></dd></dl>

<dl><dt><a name="CSVData-has_key"><strong>has_key</strong></a>(self, key)</dt><dd><tt>Returns&nbsp;True&nbsp;if&nbsp;given&nbsp;key&nbsp;exists&nbsp;in&nbsp;data</tt></dd></dl>

<dl><dt><a name="CSVData-row_by_idx"><strong>row_by_idx</strong></a>(self, idx)</dt><dd><tt>Returns&nbsp;a&nbsp;row&nbsp;by&nbsp;index.</tt></dd></dl>

</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="Data">class <strong>Data</strong></a></font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>Empty&nbsp;data&nbsp;class.&nbsp;Can&nbsp;be&nbsp;used&nbsp;for&nbsp;a&nbsp;subclassing&nbsp;or&nbsp;procedural&nbsp;data&nbsp;creation.<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="Data-__getitem__"><strong>__getitem__</strong></a>(self, pair)</dt><dd><tt>Returns&nbsp;a&nbsp;value&nbsp;for&nbsp;given&nbsp;key&nbsp;and&nbsp;row.</tt></dd></dl>

<dl><dt><a name="Data-__init__"><strong>__init__</strong></a>(self, *args, **kwargs)</dt><dd><tt>Constructor</tt></dd></dl>

<dl><dt><a name="Data-__repr__"><strong>__repr__</strong></a>(self)</dt></dl>

<dl><dt><a name="Data-__setitem__"><strong>__setitem__</strong></a>(self, pair, value)</dt><dd><tt>Sets&nbsp;a&nbsp;value&nbsp;for&nbsp;given&nbsp;key&nbsp;and&nbsp;row.</tt></dd></dl>

<dl><dt><a name="Data-__str__"><strong>__str__</strong></a>(self)</dt><dd><tt>Returns&nbsp;data&nbsp;as&nbsp;string.</tt></dd></dl>

<dl><dt><a name="Data-add_keys"><strong>add_keys</strong></a>(self, *h)</dt><dd><tt>Adds&nbsp;new&nbsp;keys&nbsp;to&nbsp;the&nbsp;data.</tt></dd></dl>

<dl><dt><a name="Data-add_rows"><strong>add_rows</strong></a>(self, n<font color="#909090">=1</font>)</dt><dd><tt>Adds&nbsp;some&nbsp;empty&nbsp;rows&nbsp;to&nbsp;the&nbsp;data.</tt></dd></dl>

<dl><dt><a name="Data-col_by_key"><strong>col_by_key</strong></a>(self, key)</dt><dd><tt>Returns&nbsp;a&nbsp;column&nbsp;by&nbsp;header's&nbsp;name</tt></dd></dl>

<dl><dt><a name="Data-has_key"><strong>has_key</strong></a>(self, key)</dt><dd><tt>Returns&nbsp;True&nbsp;if&nbsp;given&nbsp;key&nbsp;exists&nbsp;in&nbsp;data</tt></dd></dl>

<dl><dt><a name="Data-row_by_idx"><strong>row_by_idx</strong></a>(self, idx)</dt><dd><tt>Returns&nbsp;a&nbsp;row&nbsp;by&nbsp;index.</tt></dd></dl>

</td></tr></table></td></tr></table>
</body></html>

+ 135
- 0
docs/template.html View File

@@ -0,0 +1,135 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><title>Python: module template</title>
</head><body bgcolor="#f0f0f8">

<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="heading">
<tr bgcolor="#7799ee">
<td valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial">&nbsp;<br><big><big><strong>template</strong></big></big></font></td
><td align=right valign=bottom
><font color="#ffffff" face="helvetica, arial"><a href=".">index</a><br><a href="file:///C:/users/kaisd/documents/workbench/programming/ktt/src/template.py">c:\users\kaisd\documents\workbench\programming\ktt\src\template.py</a></font></td></tr></table>
<p><tt><a href="#Template">Template</a>&nbsp;module&nbsp;for&nbsp;a&nbsp;KaiSD&nbsp;Text&nbsp;Tools.<br>
&nbsp;<br>
(c)&nbsp;2013&nbsp;Ivan&nbsp;"Kai&nbsp;SD"&nbsp;Korystin&nbsp;<br>
&nbsp;<br>
License:&nbsp;GPLv3</tt></p>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#aa55cc">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Modules</strong></big></font></td></tr>
<tr><td bgcolor="#aa55cc"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><table width="100%" summary="list"><tr><td width="25%" valign=top><a href="re.html">re</a><br>
</td><td width="25%" valign=top></td><td width="25%" valign=top></td><td width="25%" valign=top></td></tr></table></td></tr></table><p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ee77aa">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#ffffff" face="helvetica, arial"><big><strong>Classes</strong></big></font></td></tr>
<tr><td bgcolor="#ee77aa"><tt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</tt></td><td>&nbsp;</td>
<td width="100%"><dl>
<dt><font face="helvetica, arial"><a href="template.html#Template">Template</a>
</font></dt><dd>
<dl>
<dt><font face="helvetica, arial"><a href="template.html#TemplateV2">TemplateV2</a>
</font></dt></dl>
</dd>
</dl>
<p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="Template">class <strong>Template</strong></a></font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>Empty&nbsp;template&nbsp;class.&nbsp;Generates&nbsp;empty&nbsp;text.<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="Template-log"><strong>log</strong></a>(self, text)</dt><dd><tt>Print&nbsp;information</tt></dd></dl>

<dl><dt><a name="Template-process"><strong>process</strong></a>(self, data)</dt><dd><tt>Replace&nbsp;this&nbsp;method&nbsp;in&nbsp;subclasses.</tt></dd></dl>

<dl><dt><a name="Template-warning"><strong>warning</strong></a>(self, text)</dt><dd><tt>Prints&nbsp;a&nbsp;warning</tt></dd></dl>

</td></tr></table> <p>
<table width="100%" cellspacing=0 cellpadding=2 border=0 summary="section">
<tr bgcolor="#ffc8d8">
<td colspan=3 valign=bottom>&nbsp;<br>
<font color="#000000" face="helvetica, arial"><a name="TemplateV2">class <strong>TemplateV2</strong></a>(<a href="template.html#Template">Template</a>)</font></td></tr>
<tr bgcolor="#ffc8d8"><td rowspan=2><tt>&nbsp;&nbsp;&nbsp;</tt></td>
<td colspan=2><tt>Class&nbsp;for&nbsp;reading&nbsp;ATGv2&nbsp;templates.<br>
&nbsp;<br>
ATGv2&nbsp;template&nbsp;file&nbsp;should&nbsp;be&nbsp;a&nbsp;plain&nbsp;text&nbsp;file,&nbsp;starting&nbsp;with&nbsp;the&nbsp;line<br>
ATGV2<br>
followed&nbsp;by&nbsp;the&nbsp;info&nbsp;line:<br>
[$KeyField$Extension$Prefix$Encoding$]<br>
where<br>
KeyField&nbsp;-&nbsp;is&nbsp;a&nbsp;name&nbsp;of&nbsp;a&nbsp;data&nbsp;column,&nbsp;that&nbsp;contains&nbsp;an&nbsp;identifier.<br>
Extension&nbsp;-&nbsp;is&nbsp;the&nbsp;desired&nbsp;extension&nbsp;for&nbsp;the&nbsp;generated&nbsp;files.<br>
Prefix&nbsp;-&nbsp;is&nbsp;the&nbsp;desired&nbsp;filename&nbsp;prefix&nbsp;for&nbsp;the&nbsp;generated&nbsp;files<br>
Encoding&nbsp;-&nbsp;is&nbsp;the&nbsp;desired&nbsp;encoding&nbsp;for&nbsp;the&nbsp;generated&nbsp;files.<br>
The&nbsp;line&nbsp;may&nbsp;also&nbsp;have&nbsp;some&nbsp;optional&nbsp;keywords&nbsp;before&nbsp;the&nbsp;closing&nbsp;bracket:<br>
oneFile$&nbsp;-&nbsp;place&nbsp;all&nbsp;generated&nbsp;text&nbsp;into&nbsp;a&nbsp;single&nbsp;file&nbsp;instead&nbsp;of<br>
generating&nbsp;a&nbsp;file&nbsp;for&nbsp;each&nbsp;table&nbsp;row.<br>
After&nbsp;the&nbsp;info&nbsp;line,&nbsp;you&nbsp;can&nbsp;put&nbsp;your&nbsp;text.<br>
You&nbsp;can&nbsp;use&nbsp;following&nbsp;commands&nbsp;to&nbsp;handle&nbsp;the&nbsp;data:<br>
*&nbsp;[$Name$],&nbsp;where&nbsp;Name&nbsp;is&nbsp;the&nbsp;column&nbsp;header,<br>
will&nbsp;be&nbsp;replaced&nbsp;with&nbsp;value&nbsp;from&nbsp;the&nbsp;current&nbsp;row.<br>
*&nbsp;[$ATGLINDEX$]&nbsp;will&nbsp;be&nbsp;replaced&nbsp;with&nbsp;the&nbsp;number&nbsp;of&nbsp;a&nbsp;current&nbsp;row.<br>
*&nbsp;[$ATGHEADER$Text$]&nbsp;and&nbsp;[$ATGFOOTER$Text$]&nbsp;will&nbsp;place&nbsp;the&nbsp;given&nbsp;text<br>
at&nbsp;the&nbsp;begining&nbsp;or&nbsp;at&nbsp;the&nbsp;end&nbsp;of&nbsp;the&nbsp;file.&nbsp;You&nbsp;can't&nbsp;use&nbsp;other<br>
commands&nbsp;in&nbsp;this&nbsp;text.<br>
*&nbsp;[$ATGLIST$Name$Text$],&nbsp;where&nbsp;Name&nbsp;is&nbsp;a&nbsp;multi-column&nbsp;header<br>
(i.e.&nbsp;'Col'&nbsp;will&nbsp;represent&nbsp;'Col1',&nbsp;'Col2',&nbsp;'Col3'&nbsp;etc)<br>
will&nbsp;repeat&nbsp;the&nbsp;given&nbsp;text&nbsp;for&nbsp;each&nbsp;non-empty&nbsp;value.<br>
You&nbsp;can&nbsp;use&nbsp;other&nbsp;commands&nbsp;in&nbsp;Text.&nbsp;Also&nbsp;[$Name$]&nbsp;inside&nbsp;the&nbsp;list<br>
will&nbsp;be&nbsp;replaced&nbsp;with&nbsp;the&nbsp;value&nbsp;for&nbsp;the&nbsp;current&nbsp;row&nbsp;and&nbsp;column.<br>
*&nbsp;[$ATGLINDEX$]&nbsp;can&nbsp;be&nbsp;used&nbsp;only&nbsp;inside&nbsp;the&nbsp;ATGLIST&nbsp;text,<br>
will&nbsp;be&nbsp;replaced&nbsp;with&nbsp;the&nbsp;current&nbsp;column&nbsp;index.<br>
*&nbsp;[$ATGLISTCUT$Name$Text$]&nbsp;-&nbsp;same&nbsp;as&nbsp;ATGLIST,&nbsp;but&nbsp;the&nbsp;last&nbsp;symbol<br>
will&nbsp;be&nbsp;removed.&nbsp;Useful&nbsp;for&nbsp;removing&nbsp;unnecessary&nbsp;newlines.<br>
*&nbsp;[$ATGIF$Name$Value$Text$]&nbsp;will&nbsp;be&nbsp;replaced&nbsp;with&nbsp;the&nbsp;given&nbsp;text<br>
only&nbsp;if&nbsp;the&nbsp;the&nbsp;given&nbsp;column's&nbsp;value&nbsp;is&nbsp;the&nbsp;same&nbsp;as&nbsp;the&nbsp;given&nbsp;one.<br>
Will&nbsp;be&nbsp;replaced&nbsp;with&nbsp;the&nbsp;empty&nbsp;text&nbsp;otherwise.&nbsp;You&nbsp;can&nbsp;use&nbsp;other<br>
commands&nbsp;in&nbsp;Text.<br>
*&nbsp;[$ATGIFNOT$Name$Value$Text$]&nbsp;-&nbsp;same&nbsp;as&nbsp;ATGIF,&nbsp;but&nbsp;the&nbsp;column's&nbsp;value<br>
should&nbsp;not&nbsp;be&nbsp;equal&nbsp;to&nbsp;the&nbsp;given&nbsp;one.<br>
*&nbsp;[$ATGGREATER$Name$Value$Text$]&nbsp;-&nbsp;same&nbsp;as&nbsp;ATGIF,&nbsp;but&nbsp;the&nbsp;value&nbsp;should<br>
be&nbsp;the&nbsp;number&nbsp;and&nbsp;it&nbsp;should&nbsp;be&nbsp;greater&nbsp;then&nbsp;the&nbsp;given&nbsp;one.<br>
*&nbsp;[$ATGGREATER$Name$Value$Text$]&nbsp;-&nbsp;same&nbsp;as&nbsp;ATGGREATER,&nbsp;but&nbsp;the&nbsp;value<br>
should&nbsp;be&nbsp;less&nbsp;then&nbsp;the&nbsp;given&nbsp;one.<br>
*&nbsp;[$ATGREPLACE$Text1$Text2$]&nbsp;-&nbsp;Will&nbsp;replace&nbsp;Text1&nbsp;with&nbsp;Text2.&nbsp;Replacements<br>
will&nbsp;be&nbsp;done&nbsp;after&nbsp;all&nbsp;other&nbsp;commands.&nbsp;You&nbsp;can't&nbsp;use&nbsp;regular&nbsp;expressions&nbsp;or<br>
other&nbsp;commands&nbsp;in&nbsp;the&nbsp;text.<br>
*&nbsp;[$ATGPREFIX$Text$]&nbsp;-&nbsp;Will&nbsp;add&nbsp;the&nbsp;given&nbsp;text&nbsp;to&nbsp;the&nbsp;filename&nbsp;prefix.<br>
You&nbsp;can&nbsp;use&nbsp;other&nbsp;commands&nbsp;in&nbsp;text,&nbsp;but&nbsp;do&nbsp;it&nbsp;carefully.<br>
*&nbsp;[$ATGSKIP$]&nbsp;-&nbsp;Skip&nbsp;the&nbsp;current&nbsp;row.&nbsp;Use&nbsp;only&nbsp;in&nbsp;combination&nbsp;with&nbsp;the<br>
ATGIF/ATGIFNOT,&nbsp;or&nbsp;you&nbsp;will&nbsp;generate&nbsp;nothing.<br>
*&nbsp;[$ATGPREV$Name$],&nbsp;where&nbsp;Name&nbsp;is&nbsp;the&nbsp;column&nbsp;header,<br>
will&nbsp;be&nbsp;replaced&nbsp;with&nbsp;the&nbsp;with&nbsp;the&nbsp;value&nbsp;of&nbsp;the&nbsp;given&nbsp;header&nbsp;from&nbsp;the<br>
previous&nbsp;row.&nbsp;ATGSKIP&nbsp;will&nbsp;be&nbsp;used&nbsp;for&nbsp;the&nbsp;first&nbsp;row.<br>&nbsp;</tt></td></tr>
<tr><td>&nbsp;</td>
<td width="100%">Methods defined here:<br>
<dl><dt><a name="TemplateV2-__init__"><strong>__init__</strong></a>(self, filename<font color="#909090">=None</font>, encoding<font color="#909090">='utf-8'</font>, text<font color="#909090">=''</font>)</dt><dd><tt>Constructor.<br>
&nbsp;<br>
filename&nbsp;-&nbsp;name&nbsp;of&nbsp;the&nbsp;ATGv2&nbsp;template&nbsp;file.<br>
encoding&nbsp;-&nbsp;encoding&nbsp;of&nbsp;the&nbsp;template&nbsp;file.<br>
text&nbsp;-&nbsp;text&nbsp;to&nbsp;use&nbsp;if&nbsp;no&nbsp;filename&nbsp;has&nbsp;been&nbsp;provided.</tt></dd></dl>

<dl><dt><a name="TemplateV2-process"><strong>process</strong></a>(self, data)</dt><dd><tt>Generate&nbsp;text&nbsp;for&nbsp;the&nbsp;given&nbsp;data.</tt></dd></dl>

<hr>
Static methods defined here:<br>
<dl><dt><a name="TemplateV2-express"><strong>express</strong></a>(cls, text, **kwargs)</dt></dl>

<hr>
Methods inherited from <a href="template.html#Template">Template</a>:<br>
<dl><dt><a name="TemplateV2-log"><strong>log</strong></a>(self, text)</dt><dd><tt>Print&nbsp;information</tt></dd></dl>

<dl><dt><a name="TemplateV2-warning"><strong>warning</strong></a>(self, text)</dt><dd><tt>Prints&nbsp;a&nbsp;warning</tt></dd></dl>

</td></tr></table></td></tr></table>
</body></html>

+ 1
- 1
ktt_atgcsv.py View File

@@ -3,7 +3,7 @@
''' '''
Generates files from csv table. Generates files from csv table.


Part of Kai's Text Tools
Part of KaiSD Text Tools


(c) 2013 Ivan "Kai SD" Korystin (c) 2013 Ivan "Kai SD" Korystin




+ 10
- 0
scripts/gendoc.cmd View File

@@ -0,0 +1,10 @@
@echo off
set PYDOC=C:\Python27\Lib\pydoc.py
set OUTDIR=docs

cd ..

for %%I in (atg atr data template) do (
%PYDOC% -w %%I
move %%I.html %OUTDIR%
)

+ 91
- 28
template.py View File

@@ -1,7 +1,7 @@
#!/usr/bin/python #!/usr/bin/python
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Template module for a Kai's Text Tools.
Template module for a KaiSD Text Tools.


(c) 2013 Ivan "Kai SD" Korystin (c) 2013 Ivan "Kai SD" Korystin


@@ -9,20 +9,90 @@ License: GPLv3
''' '''


import re import re
class TemplateV3(object):
class Template:
''' '''
Class for reading ATGv3 templates.
Empty template class. Generates empty text.
''' '''
pass
def process(self, data):
'''
Replace this method in subclasses.
'''
return ''
def warning(self, text):
'''
Prints a warning
'''
print text
def log(self, text):
'''
Print information
'''
pass
class TemplateV2(object):
class TemplateV2(Template):
''' '''
Class for reading ATGv2 templates. Class for reading ATGv2 templates.
ATGv2 template file should be a plain text file, starting with the line
ATGV2
followed by the info line:
[$KeyField$Extension$Prefix$Encoding$]
where
KeyField - is a name of a data column, that contains an identifier.
Extension - is the desired extension for the generated files.
Prefix - is the desired filename prefix for the generated files
Encoding - is the desired encoding for the generated files.
The line may also have some optional keywords before the closing bracket:
oneFile$ - place all generated text into a single file instead of
generating a file for each table row.
After the info line, you can put your text.
You can use following commands to handle the data:
* [$Name$], where Name is the column header,
will be replaced with value from the current row.
* [$ATGLINDEX$] will be replaced with the number of a current row.
* [$ATGHEADER$Text$] and [$ATGFOOTER$Text$] will place the given text
at the begining or at the end of the file. You can't use other
commands in this text.
* [$ATGLIST$Name$Text$], where Name is a multi-column header
(i.e. 'Col' will represent 'Col1', 'Col2', 'Col3' etc)
will repeat the given text for each non-empty value.
You can use other commands in Text. Also [$Name$] inside the list
will be replaced with the value for the current row and column.
* [$ATGLINDEX$] can be used only inside the ATGLIST text,
will be replaced with the current column index.
* [$ATGLISTCUT$Name$Text$] - same as ATGLIST, but the last symbol
will be removed. Useful for removing unnecessary newlines.
* [$ATGIF$Name$Value$Text$] will be replaced with the given text
only if the the given column's value is the same as the given one.
Will be replaced with the empty text otherwise. You can use other
commands in Text.
* [$ATGIFNOT$Name$Value$Text$] - same as ATGIF, but the column's value
should not be equal to the given one.
* [$ATGGREATER$Name$Value$Text$] - same as ATGIF, but the value should
be the number and it should be greater then the given one.
* [$ATGGREATER$Name$Value$Text$] - same as ATGGREATER, but the value
should be less then the given one.
* [$ATGREPLACE$Text1$Text2$] - Will replace Text1 with Text2. Replacements
will be done after all other commands. You can't use regular expressions or
other commands in the text.
* [$ATGPREFIX$Text$] - Will add the given text to the filename prefix.
You can use other commands in text, but do it carefully.
* [$ATGSKIP$] - Skip the current row. Use only in combination with the
ATGIF/ATGIFNOT, or you will generate nothing.
* [$ATGPREV$Name$], where Name is the column header,
will be replaced with the with the value of the given header from the
previous row. ATGSKIP will be used for the first row.
''' '''


def __init__(self, filename=None, encoding='utf-8', text=''): def __init__(self, filename=None, encoding='utf-8', text=''):
''' '''
Constructor
Constructor.
filename - name of the ATGv2 template file.
encoding - encoding of the template file.
text - text to use if no filename has been provided.
''' '''
if filename: if filename:
with open(filename, 'r') as templateFile: with open(filename, 'r') as templateFile:
@@ -43,10 +113,6 @@ class TemplateV2(object):
self.oneFile = True self.oneFile = True
else: else:
self.oneFile = False self.oneFile = False
if 'transpose' in keyInfo[4:]:
self.transpose = True
else:
self.transpose = False
self.text = u'' self.text = u''
else: else:
raise BaseException('%s has bad ATGv2 key' % (filename)) raise BaseException('%s has bad ATGv2 key' % (filename))
@@ -56,7 +122,7 @@ class TemplateV2(object):
else: else:
self.text = text self.text = text
self.key = u''
self.header = u''
self.footer = u'' self.footer = u''
self.replacement = {} self.replacement = {}
self._data = None self._data = None
@@ -138,12 +204,12 @@ class TemplateV2(object):
def lIndex(index, flow, keytag, number): def lIndex(index, flow, keytag, number):
return flow.replace('[$ATGLINDEX$]', str(number)) return flow.replace('[$ATGLINDEX$]', str(number))
def addkey(index, flow, text):
if self.key.find(text) < 0:
self.key += text
key = '[$ATGkey$' + text + '$]'
def addHeader(index, flow, text):
if self.header.find(text) < 0:
self.header += text
key = '[$ATGHEADER$' + text + '$]'
return flow.replace(key,'') return flow.replace(key,'')
partCommands['ATGkey'] = addkey
partCommands['ATGHEADER'] = addHeader
def addFooter(index, flow, text): def addFooter(index, flow, text):
if self.footer.find(text) < 0: if self.footer.find(text) < 0:
@@ -349,6 +415,9 @@ class TemplateV2(object):
self.parts = parse(self.text) self.parts = parse(self.text)
def process(self, data): def process(self, data):
'''
Generate text for the given data.
'''
self._data = data self._data = data
multiWords = {} multiWords = {}
@@ -394,26 +463,20 @@ class TemplateV2(object):
out += text out += text
else: else:
name = self.bonusPrefix + unicode(element) name = self.bonusPrefix + unicode(element)
out[name] = text
out[name] = self.header + text + self.footer
self.log('Created %s' % (element)) self.log('Created %s' % (element))
if self.oneFile: if self.oneFile:
out = self.key + out + self.footer
out = self.header + out + self.footer
return out return out
def warning(self, text):
print text
def log(self, text):
pass
@staticmethod @staticmethod
def express(cls, text, **kwargs): def express(cls, text, **kwargs):
obj = cls() obj = cls()
obj.text = text obj.text = text
self.keyField = kwargs.get('keyField', 'Index')
self.extension = kwargs.get('extension', '')
self.prefix = kwargs.get('prefix', '')
self.encoding = kwargs.get('encoding', 'utf-8')
obj.keyField = kwargs.get('keyField', 'Index')
obj.extension = kwargs.get('extension', '')
obj.prefix = kwargs.get('prefix', '')
obj.encoding = kwargs.get('encoding', 'utf-8')
return obj return obj