diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f7b3cce8..a79c7c34 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.2.2 + rev: v0.3.2 hooks: - id: ruff - id: ruff-format diff --git a/pyproject.toml b/pyproject.toml index 25aca859..144c5f4a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -75,6 +75,9 @@ exclude = [ "src/textblob/_text.py", ] +[tool.ruff.format] +docstring-code-format = true + [tool.ruff.lint] select = [ "B", # flake8-bugbear diff --git a/src/textblob/base.py b/src/textblob/base.py index 2690d3f2..2c726073 100644 --- a/src/textblob/base.py +++ b/src/textblob/base.py @@ -4,6 +4,7 @@ .. versionchanged:: 0.7.0 All base classes are defined in the same module, ``textblob.base``. """ + from abc import ABCMeta, abstractmethod import nltk diff --git a/src/textblob/blob.py b/src/textblob/blob.py index 0bea3325..d26e2f0b 100644 --- a/src/textblob/blob.py +++ b/src/textblob/blob.py @@ -19,6 +19,7 @@ .. versionchanged:: 0.8.0 These classes are now imported from ``textblob`` rather than ``text.blob``. """ # noqa: E501 + import json import sys from collections import defaultdict @@ -65,7 +66,6 @@ def _penn_to_wordnet(tag): class Word(str): - """A simple word representation. Includes methods for inflection, and WordNet integration. """ @@ -486,8 +486,14 @@ def pos_tags(self): Example: :: - [('At', 'IN'), ('eight', 'CD'), ("o'clock", 'JJ'), ('on', 'IN'), - ('Thursday', 'NNP'), ('morning', 'NN')] + [ + ("At", "IN"), + ("eight", "CD"), + ("o'clock", "JJ"), + ("on", "IN"), + ("Thursday", "NNP"), + ("morning", "NN"), + ] :rtype: list of tuples """ @@ -775,15 +781,12 @@ def __repr__(self): self.classifier.__class__.__name__ + "()" if self.classifier else "None" ) return ( - "Blobber(tokenizer={}(), pos_tagger={}(), " - "np_extractor={}(), analyzer={}(), parser={}(), classifier={})" - ).format( - self.tokenizer.__class__.__name__, - self.pos_tagger.__class__.__name__, - self.np_extractor.__class__.__name__, - self.analyzer.__class__.__name__, - self.parser.__class__.__name__, - classifier_name, + f"Blobber(tokenizer={self.tokenizer.__class__.__name__}(), " + f"pos_tagger={self.pos_tagger.__class__.__name__}(), " + f"np_extractor={self.np_extractor.__class__.__name__}(), " + f"analyzer={self.analyzer.__class__.__name__}(), " + f"parser={self.parser.__class__.__name__}(), " + f"classifier={classifier_name})" ) __str__ = __repr__ diff --git a/src/textblob/classifiers.py b/src/textblob/classifiers.py index 74461e2c..9a5f19ac 100644 --- a/src/textblob/classifiers.py +++ b/src/textblob/classifiers.py @@ -30,6 +30,7 @@ .. versionadded:: 0.6.0 """ # noqa: E501 + from itertools import chain import nltk diff --git a/src/textblob/download_corpora.py b/src/textblob/download_corpora.py index d51ccd4f..43a3f38e 100644 --- a/src/textblob/download_corpora.py +++ b/src/textblob/download_corpora.py @@ -11,6 +11,7 @@ $ python -m textblob.download_corpora lite """ + import sys import nltk diff --git a/src/textblob/formats.py b/src/textblob/formats.py index 312bc997..cff7c7a4 100644 --- a/src/textblob/formats.py +++ b/src/textblob/formats.py @@ -5,19 +5,22 @@ from textblob import formats + class PipeDelimitedFormat(formats.DelimitedFormat): - delimiter = '|' + delimiter = "|" + - formats.register('psv', PipeDelimitedFormat) + formats.register("psv", PipeDelimitedFormat) Once a format has been registered, classifiers will be able to read data files with that format. :: from textblob.classifiers import NaiveBayesAnalyzer - with open('training_data.psv', 'r') as fp: - cl = NaiveBayesAnalyzer(fp, format='psv') + with open("training_data.psv", "r") as fp: + cl = NaiveBayesAnalyzer(fp, format="psv") """ + import csv import json from collections import OrderedDict @@ -105,7 +108,7 @@ class JSON(BaseFormat): [ {"text": "Today is a good day.", "label": "pos"}, - {"text": "I hate this car.", "label": "neg"} + {"text": "I hate this car.", "label": "neg"}, ] """ diff --git a/src/textblob/inflect.py b/src/textblob/inflect.py index 65ac3334..4a05c5c9 100644 --- a/src/textblob/inflect.py +++ b/src/textblob/inflect.py @@ -7,6 +7,7 @@ >>> from textblob.en.inflect import singularize """ + from textblob.en.inflect import pluralize, singularize __all__ = [ diff --git a/src/textblob/mixins.py b/src/textblob/mixins.py index b3a134a5..447171a5 100644 --- a/src/textblob/mixins.py +++ b/src/textblob/mixins.py @@ -2,7 +2,6 @@ class ComparableMixin: - """Implements rich operators for an object.""" def _compare(self, other, method): @@ -33,7 +32,6 @@ def __ne__(self, other): class BlobComparableMixin(ComparableMixin): - """Allow blob objects to be comparable with both strings and blobs.""" def _compare(self, other, method): @@ -44,7 +42,6 @@ def _compare(self, other, method): class StringlikeMixin: - """Make blob objects behave like Python strings. Expects that classes that use this mixin to have a _strkey() method that diff --git a/src/textblob/np_extractors.py b/src/textblob/np_extractors.py index 13bbd7e3..b8b41e72 100644 --- a/src/textblob/np_extractors.py +++ b/src/textblob/np_extractors.py @@ -7,6 +7,7 @@ >>> from textblob.en.np_extractors import ConllExtractor """ + from textblob.base import BaseNPExtractor from textblob.en.np_extractors import ConllExtractor, FastNPExtractor diff --git a/src/textblob/parsers.py b/src/textblob/parsers.py index 83f6d506..d526da4c 100644 --- a/src/textblob/parsers.py +++ b/src/textblob/parsers.py @@ -6,6 +6,7 @@ >>> from textblob.en.parsers import PatternParser """ + from textblob.base import BaseParser from textblob.en.parsers import PatternParser diff --git a/src/textblob/sentiments.py b/src/textblob/sentiments.py index 0c855679..8d368b34 100644 --- a/src/textblob/sentiments.py +++ b/src/textblob/sentiments.py @@ -7,6 +7,7 @@ >>> from textblob.en.sentiments import PatternAnalyzer """ + from textblob.base import BaseSentimentAnalyzer from textblob.en.sentiments import ( CONTINUOUS, diff --git a/src/textblob/taggers.py b/src/textblob/taggers.py index 6a861ceb..d8b38471 100644 --- a/src/textblob/taggers.py +++ b/src/textblob/taggers.py @@ -7,6 +7,7 @@ >>> from textblob.en.taggers import NLTKTagger """ + from textblob.base import BaseTagger from textblob.en.taggers import NLTKTagger, PatternTagger diff --git a/src/textblob/tokenizers.py b/src/textblob/tokenizers.py index d5adea10..7be2d0c4 100644 --- a/src/textblob/tokenizers.py +++ b/src/textblob/tokenizers.py @@ -2,6 +2,7 @@ .. versionadded:: 0.4.0 """ + from itertools import chain import nltk diff --git a/src/textblob/wordnet.py b/src/textblob/wordnet.py index 71486ff3..28553b3a 100644 --- a/src/textblob/wordnet.py +++ b/src/textblob/wordnet.py @@ -4,6 +4,7 @@ .. versionadded:: 0.7.0 """ + import nltk #: wordnet module from nltk diff --git a/tests/test_blob.py b/tests/test_blob.py index 2be94f36..72f672d3 100644 --- a/tests/test_blob.py +++ b/tests/test_blob.py @@ -1,6 +1,7 @@ """ Tests for the text processor. """ + import json from datetime import datetime from unittest import TestCase diff --git a/tests/test_classifiers.py b/tests/test_classifiers.py index a0bc9109..3b4bef23 100644 --- a/tests/test_classifiers.py +++ b/tests/test_classifiers.py @@ -47,7 +47,6 @@ class BadNLTKClassifier(NLTKClassifier): - """An NLTK classifier without ``nltk_class`` defined. Oops!""" pass @@ -329,9 +328,7 @@ def test_accuracy(self): def test_repr(self): assert ( repr(self.classifier) - == "".format( # noqa: E501 - len(self.classifier.positive_set), len(self.classifier.unlabeled_set) - ) + == f"" # noqa: E501 )