pysubtypes
Advanced tools
+1
-1
| Metadata-Version: 2.1 | ||
| Name: pysubtypes | ||
| Version: 0.3.13 | ||
| Version: 0.3.14 | ||
| Summary: Provides subclasses for common python types with additional functionality and convenience methods. | ||
@@ -5,0 +5,0 @@ Home-page: https://github.com/matthewgdv/subtypes |
| Metadata-Version: 2.1 | ||
| Name: pysubtypes | ||
| Version: 0.3.13 | ||
| Version: 0.3.14 | ||
| Summary: Provides subclasses for common python types with additional functionality and convenience methods. | ||
@@ -5,0 +5,0 @@ Home-page: https://github.com/matthewgdv/subtypes |
+1
-1
| from setuptools import setup, find_packages | ||
| from os import path | ||
| __version__ = "0.3.13" | ||
| __version__ = "0.3.14" | ||
@@ -6,0 +6,0 @@ here = path.abspath(path.dirname(__file__)) |
+14
-47
@@ -14,2 +14,3 @@ from __future__ import annotations | ||
| from pandas.io.sql import SQLTable, pandasSQL_builder | ||
| from pandas.io.excel._xlsxwriter import _XlsxWriter | ||
| from pandas.core.indexes.base import Index | ||
@@ -64,5 +65,3 @@ import numpy as np | ||
| def __init__(self, *args: Any, **kwargs: Any) -> None: | ||
| with self._using_parent_constructor(): | ||
| super().__init__(*args, **kwargs) | ||
| self._clean_dtypes() | ||
| super().__init__(pd.DataFrame(*args, **kwargs).convert_dtypes()) | ||
@@ -73,4 +72,4 @@ def __repr__(self) -> str: | ||
| @property | ||
| def _constructor(self) -> Type[pd.DataFrame]: | ||
| return type(self) if self._using_own_constructor() else pd.DataFrame | ||
| def _constructor(self) -> Type[Frame]: | ||
| return type(self) | ||
@@ -158,5 +157,4 @@ def is_nan(self, val: Any) -> bool: | ||
| def infer_dtypes(self) -> Frame: | ||
| """Return a new Frame with newly inferred dtypes.""" | ||
| return type(self)(self.to_dict()) | ||
| def convert_dtypes(self) -> Frame: | ||
| return type(self)(super().convert_dtypes()) | ||
@@ -168,5 +166,5 @@ def fillna_as_none(self) -> Frame: | ||
| if col.isnull().any(): | ||
| df[name] = col.astype(object) | ||
| df[name] = col.astype(object).where(pd.notnull(col), None) | ||
| return cast(Frame, df.where(df.notnull(), None)) | ||
| return df | ||
@@ -220,4 +218,3 @@ @_check_import_is_available | ||
| infer_range = Maybe(infer_range).else_(cls.DEFAULT_INFER_RANGE) | ||
| if infer_range: | ||
| if infer_range := Maybe(infer_range).else_(cls.DEFAULT_INFER_RANGE): | ||
| frame._infer_range(mode=infer_range) | ||
@@ -253,14 +250,2 @@ | ||
| def _using_own_constructor(self) -> bool: | ||
| return bool(object.__getattribute__(self, "_own_constructor_")) | ||
| def _use_own_constructor(self, own: bool) -> None: | ||
| object.__setattr__(self, "_own_constructor_", own) | ||
| @contextlib.contextmanager | ||
| def _using_parent_constructor(self) -> Iterator[None]: | ||
| self._use_own_constructor(False) | ||
| yield | ||
| self._use_own_constructor(True) | ||
| @classmethod | ||
@@ -344,12 +329,2 @@ @_check_import_is_available | ||
| def _clean_dtypes(self) -> Frame: | ||
| self._clean_nullable_ints() | ||
| return self | ||
| def _clean_nullable_ints(self) -> None: | ||
| for name, col in self.iteritems(): | ||
| if col.dtype.name == "float64": | ||
| if col.apply(lambda val: val is None or np.isnan(val) or val.is_integer()).all(): | ||
| self[name] = col.astype("Int64") | ||
| def _infer_boolean_columns(self) -> None: | ||
@@ -365,4 +340,4 @@ for name, col in self.iteritems(): | ||
| def _write_to_excel(self, writer: ExcelWriter, sheet_name: str, index: bool, **kwargs: Any) -> None: | ||
| df, sheet_name = self.infer_dtypes(), Maybe(sheet_name).else_(self.DEFAULT_SHEET_NAME) | ||
| super(type(df), df).to_excel(writer.writer, sheet_name=sheet_name, index=index, **kwargs) | ||
| df, sheet_name = self.convert_dtypes(), Maybe(sheet_name).else_(self.DEFAULT_SHEET_NAME) | ||
| super(type(df), df).to_excel(writer, sheet_name=sheet_name, index=index, **kwargs) | ||
| df._table_from_sheet(writer[sheet_name]) | ||
@@ -395,15 +370,7 @@ | ||
| class ExcelWriter: | ||
| class ExcelWriter(_XlsxWriter): | ||
| def __init__(self, filepath: PathLike) -> None: | ||
| self.writer = pd.ExcelWriter(os.fspath(filepath), engine="xlsxwriter", mode="w") | ||
| super().__init__(os.fspath(filepath), engine="xlsxwriter", mode="w") | ||
| def __enter__(self) -> ExcelWriter: | ||
| return self | ||
| def __exit__(self, ex_type: Any, ex_value: Any, ex_traceback: Any) -> None: | ||
| self.writer.save() | ||
| def __getitem__(self, sheet_name: str) -> Any: | ||
| # if self.writer.sheets is None: | ||
| # self.writer.add_worksheet(sheet_name) | ||
| return self.writer.sheets.get(sheet_name) | ||
| return self.sheets.get(sheet_name) |
+9
-11
@@ -19,9 +19,6 @@ from __future__ import annotations | ||
| class Settings(Settings): | ||
| def __init__(self, raise_if_absent: bool = False) -> None: | ||
| self.raise_if_absent = raise_if_absent | ||
| raise_if_absent = False | ||
| settings = Settings() | ||
| def __init__(self, parent: List = None) -> None: | ||
| self.parent, self.settings = parent, self.Settings(raise_if_absent=type(self).settings.raise_if_absent) | ||
| self.parent, self.settings = parent, self.Settings() | ||
@@ -113,7 +110,2 @@ def __call__(self, parent: List = None, raise_if_absent: bool = None) -> SliceAccessor: | ||
| class ListSettings(Settings): | ||
| def __init__(self) -> None: | ||
| self.slice, self.translator, self.recursive = SliceAccessor(), Translator.default, True | ||
| class BaseList(list): | ||
@@ -191,6 +183,12 @@ """ | ||
| """ | ||
| settings = ListSettings() | ||
| class Accessors(Settings): | ||
| slice = SliceAccessor | ||
| class Settings(Settings): | ||
| translator, recursive = Translator.default, True | ||
| def __init__(self, iterable: Iterable = None) -> None: | ||
| super().__init__(iterable) if iterable is not None else super().__init__() | ||
| self.settings = self.Settings() | ||
@@ -197,0 +195,0 @@ if self.settings.recursive: |
+18
-38
@@ -42,4 +42,3 @@ from __future__ import annotations | ||
| class Settings(Settings): | ||
| def __init__(self, dotall: bool = True, ignorecase: bool = True, multiline: bool = False): | ||
| self.dotall, self.ignorecase, self.multiline = dotall, ignorecase, multiline | ||
| dotall, ignorecase, multiline = True, True, False | ||
@@ -71,6 +70,4 @@ def __repr__(self) -> str: | ||
| settings = Settings() | ||
| def __init__(self, parent: Str = None) -> None: | ||
| self.parent, self.settings = parent, self.settings.deepcopy() | ||
| self.parent, self.settings = parent, self.Settings() | ||
@@ -117,9 +114,6 @@ def __call__(self, parent: Str = None, dotall: bool = None, ignorecase: bool = None, multiline: bool = None) -> RegexAccessor: | ||
| class Settings(Settings): | ||
| def __init__(self, tokenize: bool = False, partial: bool = False) -> None: | ||
| self.tokenize, self.partial = tokenize, partial | ||
| tokenize, partial = False, False | ||
| settings = Settings() | ||
| def __init__(self, parent: Str = None) -> None: | ||
| self.parent, self.settings = parent, self.settings.deepcopy() | ||
| self.parent, self.settings = parent, self.Settings() | ||
| self._determine_matcher() | ||
@@ -156,14 +150,7 @@ | ||
| class Settings(Settings): | ||
| def __init__(self, detect_acronyms: bool = True, acronyms: list = None) -> None: | ||
| self.detect_acronyms, self.acronyms = detect_acronyms, acronyms | ||
| settings = Settings() | ||
| def __init__(self, parent: Str = None) -> None: | ||
| self.parent, self.settings = parent, self.settings.deepcopy() | ||
| self.parent = parent | ||
| def __call__(self, parent: Str = None, detect_acronyms: bool = None, acronyms: list = None) -> CasingAccessor: | ||
| def __call__(self, parent: Str = None, acronyms: list = None) -> CasingAccessor: | ||
| self.parent = Maybe(parent).else_(self.parent) | ||
| self.settings.detect_acronyms = Maybe(detect_acronyms).else_(self.settings.detect) | ||
| self.settings.acronyms = Maybe(acronyms).else_(self.settings.acronyms) | ||
@@ -174,31 +161,31 @@ return self | ||
| """snake_case this Str""" | ||
| return type(self.parent)(case_conversion.snakecase(self.parent, detect_acronyms=self.settings.detect_acronyms, acronyms=self.settings.acronyms).strip("_")) | ||
| return type(self.parent)(case_conversion.snakecase(self.parent).strip("_")) | ||
| def camel(self) -> Str: | ||
| """camelCase this Str""" | ||
| return type(self.parent)(case_conversion.camelcase(self.snake(), detect_acronyms=self.settings.detect_acronyms, acronyms=self.settings.acronyms)) | ||
| return type(self.parent)(case_conversion.camelcase(self.snake())) | ||
| def pascal(self) -> Str: | ||
| """PascalCase this Str""" | ||
| return type(self.parent)(case_conversion.pascalcase(self.snake(), detect_acronyms=self.settings.detect_acronyms, acronyms=self.settings.acronyms)) | ||
| return type(self.parent)(case_conversion.pascalcase(self.snake())) | ||
| def dash(self) -> Str: | ||
| """dash-case this Str""" | ||
| return type(self.parent)(case_conversion.dashcase(self.parent, detect_acronyms=self.settings.detect_acronyms, acronyms=self.settings.acronyms)) | ||
| return type(self.parent)(case_conversion.dashcase(self.parent)) | ||
| def constant(self) -> Str: | ||
| """CONSTANT_CASE this Str""" | ||
| return type(self.parent)(case_conversion.constcase(self.parent, detect_acronyms=self.settings.detect_acronyms, acronyms=self.settings.acronyms)) | ||
| return type(self.parent)(case_conversion.constcase(self.parent)) | ||
| def dot(self) -> Str: | ||
| """dot.case this Str""" | ||
| return type(self.parent)(case_conversion.dotcase(self.parent, detect_acronyms=self.settings.detect_acronyms, acronyms=self.settings.acronyms)) | ||
| return type(self.parent)(case_conversion.dotcase(self.parent)) | ||
| def slash(self) -> Str: | ||
| """slash/case this Str""" | ||
| return type(self.parent)(case_conversion.slashcase(self.parent, detect_acronyms=self.settings.detect_acronyms, acronyms=self.settings.acronyms)) | ||
| return type(self.parent)(case_conversion.slashcase(self.parent)) | ||
| def backslash(self) -> Str: | ||
| """backslash\\case this Str""" | ||
| return type(self.parent)(case_conversion.backslashcase(self.parent, detect_acronyms=self.settings.detect_acronyms, acronyms=self.settings.acronyms)) | ||
| return type(self.parent)(case_conversion.backslashcase(self.parent)) | ||
@@ -221,9 +208,6 @@ def identifier(self) -> Str: | ||
| class Settings(Settings): | ||
| def __init__(self, raise_if_absent: bool = False) -> None: | ||
| self.raise_if_absent = raise_if_absent | ||
| raise_if_absent = False | ||
| settings = Settings() | ||
| def __init__(self, parent: Str = None) -> None: | ||
| self.parent, self.settings = parent, self.settings.deepcopy() | ||
| self.parent, self.settings = parent, self.Settings() | ||
@@ -334,7 +318,2 @@ def __call__(self, parent: Str = None, raise_if_absent: bool = None) -> SliceAccessor: | ||
| class StrSettings(Settings): | ||
| def __init__(self) -> None: | ||
| self.re, self.case, self.slice, self.fuzzy = RegexAccessor.settings, CasingAccessor.settings, SliceAccessor.settings, FuzzyAccessor.settings | ||
| class BaseStr(str): | ||
@@ -433,3 +412,4 @@ """An alternative implementation of collections.UserString that inherits directly from 'str'.""" | ||
| settings = StrSettings() | ||
| class Accessors(Settings): | ||
| re, slice, fuzzy = RegexAccessor, SliceAccessor, FuzzyAccessor | ||
@@ -436,0 +416,0 @@ @cached_property |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
119476
-2.42%1710
-2.29%