Skip to content
This repository has been archived by the owner on Aug 5, 2019. It is now read-only.

Commit

Permalink
Merge pull request #14 from cssho/add_max_length
Browse files Browse the repository at this point in the history
Support display maximum length of character varying.
  • Loading branch information
Brian Hines committed Oct 5, 2016
2 parents cd31d3b + c969acc commit 12e5a16
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 13 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Options:
--database_url TEXT Database connection URL
--table_schema TEXT Postgres table_schema, default is: public
--output_file TEXT Path for generated markdown file
--max_length To display maximum length of character varying, default is: False
--help Show this message and exit.
```

Expand Down
10 changes: 7 additions & 3 deletions pg_table_markdown/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,14 @@
TABLE_HEADER = 'Column | Type | Default | Nullable \n'
TABLE_DIVIDER = '--- | --- | --- | --- \n'
TABLE_ROW = '{column_name} | {data_type} | {column_default} | {is_nullable} \n'

TABLE_ROW_WITH_MAXLENGTH = '{column_name} | {data_type}({character_maximum_length}) | {column_default} | {is_nullable} \n'

@click.command()
@click.option('--database_url', prompt=True, help='Database connection URL')
@click.option('--table_schema', default='public', help='Postgres table_schema, default is: public')
@click.option('--output_file', prompt=True, help='Path for generated markdown file')
def cli(database_url, table_schema, output_file):
@click.option('--max_length', is_flag=True, help='To display maximum length of character varying, default is: False')
def cli(database_url, table_schema, output_file, max_length):
"""
Export Postgres table documentation to a markdown file
"""
Expand All @@ -37,5 +38,8 @@ def cli(database_url, table_schema, output_file):
f.write(TABLE_HEADER)
f.write(TABLE_DIVIDER)
for column in parsed[table_name]:
f.write(TABLE_ROW.format(**column))
if max_length and column['character_maximum_length'] is not None:
f.write(TABLE_ROW_WITH_MAXLENGTH.format(**column))
else:
f.write(TABLE_ROW.format(**column))
f.write('\n')
47 changes: 37 additions & 10 deletions tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
DATABASE_PORT,
DATABASE_NAME)
OUTPUT_FILE = '/test/tables.md'

OUTPUT_FILE2 = '/test/tables_with_length.md'

def database_connection():
connection = psycopg2.connect(
Expand Down Expand Up @@ -50,7 +50,8 @@ def build_table(self):
(
id SERIAL PRIMARY KEY,
email TEXT NOT NULL,
password TEXT NOT NULL
password TEXT NOT NULL,
display_name CHARACTER VARYING(256)
);
"""
cursor = db.cursor()
Expand All @@ -73,12 +74,38 @@ def test_generate_table_markdown(self):
self.assertEqual("id | integer | nextval('my_users_id_seq'::regclass) | NO \n", result[4])
self.assertEqual('email | text | None | NO \n', result[5])
self.assertEqual('password | text | None | NO \n', result[6])
self.assertEqual('\n', result[7])
self.assertEqual('display_name | character varying | None | YES \n',result[7])
self.assertEqual('\n', result[8])

self.assertEqual('### my_whatever \n', result[9])
self.assertEqual('\n', result[10])
self.assertEqual('Column | Type | Default | Nullable \n', result[11])
self.assertEqual('--- | --- | --- | --- \n', result[12])
self.assertEqual("id | integer | nextval('my_whatever_id_seq'::regclass) | NO \n", result[13])
self.assertEqual('stuff | text | None | NO \n', result[14])
self.assertEqual('\n', result[15])

output_file = '--output_file={0}'.format(OUTPUT_FILE2)
max_length = '--max_length'
proc = subprocess.Popen(['pgtablemd', database_url, table_schema, output_file, max_length])
proc.communicate()
with open(OUTPUT_FILE2, 'r') as f:
result = f.readlines()

self.assertEqual('### my_users \n', result[0])
self.assertEqual('\n', result[1])
self.assertEqual('Column | Type | Default | Nullable \n', result[2])
self.assertEqual('--- | --- | --- | --- \n', result[3])
self.assertEqual("id | integer | nextval('my_users_id_seq'::regclass) | NO \n", result[4])
self.assertEqual('email | text | None | NO \n', result[5])
self.assertEqual('password | text | None | NO \n', result[6])
self.assertEqual('display_name | character varying(256) | None | YES \n',result[7])
self.assertEqual('\n', result[8])

self.assertEqual('### my_whatever \n', result[8])
self.assertEqual('\n', result[9])
self.assertEqual('Column | Type | Default | Nullable \n', result[10])
self.assertEqual('--- | --- | --- | --- \n', result[11])
self.assertEqual("id | integer | nextval('my_whatever_id_seq'::regclass) | NO \n", result[12])
self.assertEqual('stuff | text | None | NO \n', result[13])
self.assertEqual('\n', result[14])
self.assertEqual('### my_whatever \n', result[9])
self.assertEqual('\n', result[10])
self.assertEqual('Column | Type | Default | Nullable \n', result[11])
self.assertEqual('--- | --- | --- | --- \n', result[12])
self.assertEqual("id | integer | nextval('my_whatever_id_seq'::regclass) | NO \n", result[13])
self.assertEqual('stuff | text | None | NO \n', result[14])
self.assertEqual('\n', result[15])

0 comments on commit 12e5a16

Please sign in to comment.