diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 36db1d1..4283257 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 0.0.2 +current_version = 0.1.0 commit = True tag = True diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 7eee770..68c4b0e 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -2,6 +2,12 @@ Changelog ========= +0.1.0 (2020-05-05) +------------------ +* Added static typing +* Added mypy to travis CI +* Removed unecessary params + 0.0.2 (2020-05-04) ------------------ diff --git a/README.rst b/README.rst index 54f8232..3aedb66 100644 --- a/README.rst +++ b/README.rst @@ -47,9 +47,9 @@ Overview :alt: Supported implementations :target: https://pypi.org/project/pdmongo -.. |commits-since| image:: https://img.shields.io/github/commits-since/pakallis/python-pandas-mongo/v0.0.2.svg +.. |commits-since| image:: https://img.shields.io/github/commits-since/pakallis/python-pandas-mongo/v0.1.0.svg :alt: Commits since latest release - :target: https://github.com/pakallis/python-pandas-mongo/compare/v0.0.2...master + :target: https://github.com/pakallis/python-pandas-mongo/compare/v0.1.0...master diff --git a/docs/conf.py b/docs/conf.py index 19901c6..1f09fdf 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -20,7 +20,7 @@ year = '2020' author = 'Pavlos Kallis' copyright = '{0}, {1}'.format(year, author) -version = release = '0.0.2' +version = release = '0.1.0' pygments_style = 'trac' templates_path = ['.'] diff --git a/setup.cfg b/setup.cfg index a0bfcb2..c01ff55 100644 --- a/setup.cfg +++ b/setup.cfg @@ -59,3 +59,9 @@ default_section = THIRDPARTY forced_separate = test_pdmongo not_skip = __init__.py skip = migrations + + +[mypy] +python_version = 3.6 +strict = True +ignore_missing_imports = True \ No newline at end of file diff --git a/setup.py b/setup.py index 5e83d7a..969eac2 100644 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ def read(*names, **kwargs): setup( name='pdmongo', - version='0.0.2', + version='0.1.0', license='MIT', description='Transfer data between pandas dataframes and MongoDB', long_description='%s\n%s' % ( diff --git a/src/pdmongo/__init__.py b/src/pdmongo/__init__.py index 65bc4f4..d82858c 100644 --- a/src/pdmongo/__init__.py +++ b/src/pdmongo/__init__.py @@ -6,4 +6,4 @@ pandas.DataFrame.to_mongo = to_mongo __all__ = ['read_mongo', 'to_mongo'] -__version__ = '0.0.2' +__version__ = '0.1.0' diff --git a/src/pdmongo/core.py b/src/pdmongo/core.py index bfc91b8..8fa0738 100644 --- a/src/pdmongo/core.py +++ b/src/pdmongo/core.py @@ -1,9 +1,19 @@ +from typing import Any +from typing import Dict +from typing import Iterator +from typing import List +from typing import Optional +from typing import Sequence +from typing import Union + from pandas import DataFrame from pymongo import MongoClient +from pymongo.database import Database +from pymongo.results import InsertManyResult from pymongo.uri_parser import parse_uri -def _get_db_instance(db): +def _get_db_instance(db: Union[str, Database]) -> MongoClient: """ Retrieve the pymongo.database.Database instance. @@ -26,7 +36,7 @@ def _get_db_instance(db): return db -def _handle_exists_collection(name, exists, db): +def _handle_exists_collection(name: str, exists: Optional[str], db: Database) -> None: """ Handles the `if_exists` argument of `to_mongo`. @@ -55,7 +65,7 @@ def _handle_exists_collection(name, exists, db): raise ValueError(f"'{exists}' is not valid for if_exists") -def _split_in_chunks(lst, chunksize): +def _split_in_chunks(lst: Sequence[Any], chunksize: int) -> Iterator[Sequence[Any]]: """ Splits a list in chunks based on provided chunk size. @@ -73,7 +83,7 @@ def _split_in_chunks(lst, chunksize): yield lst[i:i + chunksize] -def _validate_chunksize(chunksize): +def _validate_chunksize(chunksize: int) -> None: """ Raises the proper exception if chunksize is not valid. @@ -89,14 +99,13 @@ def _validate_chunksize(chunksize): def read_mongo( - collection, - query, - db, - index_col=None, - extra=None, - columns=None, - chunksize=None -): + collection: str, + query: List[Dict[str, Any]], + db: Union[str, Database], + index_col: Optional[Union[str, List[str]]] = None, + extra: Optional[Dict[str, Any]] = None, + chunksize: Optional[int] = None +) -> DataFrame: """ Read MongoDB query into a DataFrame. @@ -115,8 +124,8 @@ def read_mongo( The database to use index_col : str or list of str, optional, default: None Column(s) to set as index(MultiIndex). - extra : list, tuple or dict, optional, default: None - List of parameters to pass to find/aggregate method. + extra : dict, optional, default: None + List of parameters to pass to aggregate method. chunksize : int, default None If specified, return an iterator where `chunksize` is the number of docs to include in each chunk. @@ -143,14 +152,14 @@ def read_mongo( def to_mongo( - frame, - name, - db, - if_exists="fail", - index=True, - index_label=None, - chunksize=None, -): + frame: DataFrame, + name: str, + db: Union[str, Database], + if_exists: Optional[str] = "fail", + index: Optional[bool] = True, + index_label: Optional[Union[str, Sequence[str]]] = None, + chunksize: Optional[int] = None, +) -> Union[List[InsertManyResult], InsertManyResult]: """ Write records stored in a DataFrame to a MongoDB collection. diff --git a/tox.ini b/tox.ini index 0eed220..4814984 100644 --- a/tox.ini +++ b/tox.ini @@ -46,12 +46,14 @@ deps = readme-renderer pygments isort + mypy skip_install = true commands = python setup.py check --strict --metadata --restructuredtext check-manifest {toxinidir} flake8 src tests setup.py isort --verbose --check-only --diff --recursive src tests setup.py + mypy src [testenv:docs] usedevelop = true