Skip to content

Commit

Permalink
renaming stuff, adding better command tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dannguyen committed Nov 11, 2020
1 parent 681b8c6 commit 9982834
Show file tree
Hide file tree
Showing 39 changed files with 235 additions and 141 deletions.
2 changes: 1 addition & 1 deletion csvmedkit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
import regex as re_plus


from typing import Union as typeUnion, Sequence as typeSequence
from typing import Union as UnionType, Sequence as SequenceType

agate = agate
rxlib = re_std
14 changes: 7 additions & 7 deletions csvmedkit/cmk/aggs.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
from csvmedkit.cmk.helpers import *
from csvmedkit.exceptions import InvalidAggregateName
from typing import (
List as typeList,
NoReturn as typeNoReturn,
Tuple as typeTuple,
Optional as typeOptional,
List as ListType,
NoReturn as NoReturnType,
Tuple as TupleType,
Optional as OptionalType,
)


Expand Down Expand Up @@ -41,7 +41,7 @@ class Aggy(object):
given dataset
"""

def __init__(self, slug: str, args: list, output_name: typeOptional[str]):
def __init__(self, slug: str, args: list, output_name: OptionalType[str]):
self._slug = slug
self._args = args
self._output_name = output_name
Expand All @@ -57,12 +57,12 @@ def aggregation(self) -> agate.Aggregation:
return self.aggregate_class(*self._args)

@property
def agg_args(self) -> typeList[str]:
def agg_args(self) -> ListType[str]:
d = self._args.copy()
return d

@property
def column_name(self) -> typeOptional[str]:
def column_name(self) -> OptionalType[str]:
"""basically, agg_args[0]"""
return self._args[0] if self._args else None

Expand Down
12 changes: 6 additions & 6 deletions csvmedkit/cmk/cmkutil.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
import argparse
import sys
from typing import (
List as typeList,
NoReturn as typeNoReturn,
Iterable as typeIterable,
Union as typeUnion,
List as ListType,
NoReturn as NoReturnType,
Iterable as IterableType,
Union as UnionType,
)
import warnings

Expand Down Expand Up @@ -54,7 +54,7 @@ def read_input(self):
)

@property
def filtered_column_ids(self) -> typeList[int]:
def filtered_column_ids(self) -> ListType[int]:
"""convenience helper"""
return parse_column_identifiers(
self.columns_filter,
Expand Down Expand Up @@ -93,7 +93,7 @@ class CmkUtil(CmkProps, CSVKitUtility):
slightly adjusted version of standard CSVKitUtility
"""

def log_err(self, txt: str) -> typeNoReturn:
def log_err(self, txt: str) -> NoReturnType:
stderr.write(f"{txt}\n")

def text_csv_reader(self) -> agate.csv.reader:
Expand Down
22 changes: 11 additions & 11 deletions csvmedkit/cmk/helpers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
from io import StringIO
import sys
from typing import (
List as typeList,
NoReturn as typeNoReturn,
Iterable as typeIterable,
Union as typeUnion,
Sequence as typeSequence,
List as ListType,
NoReturn as NoReturnType,
Iterable as IterableType,
Union as UnionType,
Sequence as SequenceType,
)

from slugify import slugify as pyslugify
Expand All @@ -20,16 +20,16 @@


def cmk_parse_column_ids(
ids: str, column_names: typeList[str], column_offset=1
) -> typeList[int]:
ids: str, column_names: ListType[str], column_offset=1
) -> ListType[int]:
"""just a simplified version of parse_column_identifiers"""
return parse_column_identifiers(
ids, column_names, column_offset, excluded_columns=None
)


def cmk_filter_rows(
rows: typeIterable,
rows: IterableType,
pattern_str: str,
columns_str: str,
column_names: list,
Expand Down Expand Up @@ -73,12 +73,12 @@ def cmk_parse_delimited_str(
minlength: int = 0,
escapechar=None,
**csvreader_kwargs,
) -> typeList[typeUnion[str]]:
) -> ListType[UnionType[str]]:
"""
minlength: expected minimum number of elements. If csv.reader returns a row shorter than minlength, it
will pad the row with empty strings ''
"""
row: typeList
row: ListType
with StringIO(txt) as src:
kwargs = csvreader_kwargs.copy()
kwargs["delimiter"] = delimiter
Expand All @@ -93,7 +93,7 @@ def cmk_parse_delimited_str(
return row


def cmk_slugify(txt: typeUnion[str, typeSequence]) -> str:
def cmk_slugify(txt: UnionType[str, SequenceType]) -> str:
if not isinstance(txt, str):
# e.g a list of strings
txt = " ".join(str(t) for t in txt)
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@
import sys
import textwrap
from typing import (
Callable as typeCallable,
Optional as typeOptional,
Callable as CallableType,
Optional as OptionalType,
)

DEFAULT_EOR_MARKER = "~"
Expand Down Expand Up @@ -79,7 +79,7 @@ def add_arguments(self):
)

@property
def chunkpattern(self) -> typeCallable:
def chunkpattern(self) -> CallableType:
"""
expects self.max_field_length to be set
"""
Expand All @@ -91,13 +91,13 @@ def chunkpattern(self) -> typeCallable:
return _cp

@property
def end_of_record_marker(self) -> typeOptional[str]:
def end_of_record_marker(self) -> OptionalType[str]:
"""
preconditions:
- self.max_column_name_length
- self.rec_ids_mode
"""
marker: typeOptional[str]
marker: OptionalType[str]

_eor = self.args.end_of_record_marker
if _eor == "none" or _eor == "":
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
from io import StringIO
import itertools
from typing import (
List as typeList,
Iterable as typeIterable,
NoReturn as typeNoReturn,
Optional as typeOptional,
Tuple as typeTuple,
List as ListType,
Iterable as IterableType,
NoReturn as NoReturnType,
Optional as OptionalType,
Tuple as TupleType,
)

from csvmedkit import re_plus as re
Expand Down Expand Up @@ -111,14 +111,14 @@ def generic_x_header(self) -> bool:
return self.args.generic_x_header

@property
def add_header(self) -> typeOptional[list]:
def add_header(self) -> OptionalType[list]:
if self.args.add_header:
return cmk_parse_delimited_str(self.args.add_header, delimiter=",")
else:
return None

@property
def add_x_header(self) -> typeOptional[list]:
def add_x_header(self) -> OptionalType[list]:
"""todo: refactor with add_header; added_custom_header"""
if self.args.add_x_header:
return cmk_parse_delimited_str(
Expand All @@ -128,7 +128,7 @@ def add_x_header(self) -> typeOptional[list]:
return None

@property
def added_custom_header(self) -> typeOptional[list]:
def added_custom_header(self) -> OptionalType[list]:
"""TODO: refactor"""
if self.args.add_header or self.args.add_x_header:
return self.add_header if self.add_header else self.add_x_header
Expand All @@ -146,8 +146,8 @@ def slugify_mode(self) -> bool:
@staticmethod
def parse_rename_param(
txt: str,
column_names: typeList[str],
) -> typeList[typeTuple[str]]:
column_names: ListType[str],
) -> ListType[TupleType[str]]:
"""
Converts:
'a|apples,b|Be Bee,"c|Sea, shell "'
Expand All @@ -160,15 +160,15 @@ def parse_rename_param(
return [h.split("|") for h in next(csv.reader(StringIO(txt)))]

def output_indexed_headers(
self, rows: typeIterable, column_names: typeList[str]
) -> typeNoReturn:
self, rows: IterableType, column_names: ListType[str]
) -> NoReturnType:
"""default behavior of csvheaders is called without any modifying flags"""
outs = self.text_csv_writer()
outs.writerow(("index", "field"))
for idx, colname in enumerate(column_names, self.column_start_index):
outs.writerow((idx, colname))

def _prepare_headers(self) -> typeTuple[typeIterable]:
def _prepare_headers(self) -> TupleType[IterableType]:
"""besides returning (rows, column_names,), this sets self.generic_columnized to True/False """

rows = self.text_csv_reader()
Expand Down Expand Up @@ -203,7 +203,7 @@ def _prepare_headers(self) -> typeTuple[typeIterable]:
column_names,
)

def _set_modes(self, column_names=typeList[str]) -> typeNoReturn:
def _set_modes(self, column_names=ListType[str]) -> NoReturnType:

self.output_headers_only: bool

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
# from io import StringIO
# import itertools
from typing import (
List as typeList,
Iterable as typeIterable,
NoReturn as typeNoReturn,
Optional as typeOptional,
Tuple as typeTuple,
List as ListType,
Iterable as IterableType,
NoReturn as NoReturnType,
Optional as OptionalType,
Tuple as TupleType,
)

from csvmedkit import agate, re_plus as re
Expand Down Expand Up @@ -41,7 +41,7 @@ def squeeze_space(klass, txt: str, keep_lines: bool = False) -> str:
return newtxt

@classmethod
def normtext(klass, txt: typeOptional[str], **kwargs) -> str:
def normtext(klass, txt: OptionalType[str], **kwargs) -> str:
newtxt = txt
if newtxt:
newtxt = klass.norm_chars(newtxt)
Expand All @@ -50,7 +50,7 @@ def normtext(klass, txt: typeOptional[str], **kwargs) -> str:
return newtxt

@classmethod
def transformtext(klass, txt: typeOptional[str], **kwargs) -> str:
def transformtext(klass, txt: OptionalType[str], **kwargs) -> str:
newtxt = txt
if newtxt:
if kwargs.get("slugify"):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
from io import StringIO
import sys
from typing import (
List as typeList,
NoReturn as typeNoReturn,
Tuple as typeTuple,
Optional as typeOptional,
List as ListType,
NoReturn as NoReturnType,
Tuple as TupleType,
Optional as OptionalType,
)

from csvmedkit import agate
Expand Down Expand Up @@ -113,7 +113,7 @@ class Props:
"""

@property
def pivot_column_name(self) -> typeOptional[str]:
def pivot_column_name(self) -> OptionalType[str]:

if self.args.pivot_colname:
cids = cmk_parse_column_ids(
Expand All @@ -133,7 +133,7 @@ def pivot_column_name(self) -> typeOptional[str]:
return self.i_column_names[cids[0]] if cids else None

@property
def pivot_row_ids(self) -> typeList:
def pivot_row_ids(self) -> ListType:
if self.args.pivot_rownames:
return cmk_parse_column_ids(
self.args.pivot_rownames,
Expand All @@ -144,7 +144,7 @@ def pivot_row_ids(self) -> typeList:
return []

@property
def pivot_row_names(self) -> typeList:
def pivot_row_names(self) -> ListType:
"""
prereqs:
- self.pivot_row_ids
Expand All @@ -158,7 +158,7 @@ def pivot_row_names(self) -> typeList:
class CSVPivot(UniformReader, Props, Parser, CmkUtil):
def _validate_aggy_column_arguments(
self, aggy: Aggy, table: agate.Table
) -> typeNoReturn:
) -> NoReturnType:
"""
Aggy is csvpivot/agate.Table agnostic, so this method:
Expand Down Expand Up @@ -211,7 +211,7 @@ def _validate_aggy_column_arguments(
aggy._args[1] = dval

def _filter_input_rows(
self, rows: agate.csv.DictReader, colnames: typeList[str]
self, rows: agate.csv.DictReader, colnames: ListType[str]
) -> agate.Table:
"""
trim self.i_rows to the actually used columns
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/usr/bin/env python
import argparse
from pathlib import Path
from typing import List as typeList
from typing import List as ListType

from csvmedkit import re_std as re
from csvmedkit.cmk.cmkutil import CmkMixedUtil
Expand Down Expand Up @@ -96,7 +96,7 @@ def like_grep(self) -> bool:


class CSVSed(Props, Parser, CmkMixedUtil):
def _handle_sed_expressions(self, column_names: typeList[str]) -> typeList:
def _handle_sed_expressions(self, column_names: ListType[str]) -> ListType:
"""
Standard usage of csvsed expects only a single sed expression, so in practice, this
method returns a list of 1
Expand Down

0 comments on commit 9982834

Please sign in to comment.