mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-06-02 21:39:23 +00:00
fix pylint issues (minus no-else-return
)
This commit is contained in:
parent
737ac8e908
commit
170d1fe205
|
@ -10,6 +10,7 @@ register = template.Library()
|
||||||
|
|
||||||
@register.filter(expects_localtime=True, is_safe=False)
|
@register.filter(expects_localtime=True, is_safe=False)
|
||||||
def naturalday_partial(date):
|
def naturalday_partial(date):
|
||||||
|
"""allow templates to easily format SealedDate objects"""
|
||||||
if not isinstance(date, SealedDate):
|
if not isinstance(date, SealedDate):
|
||||||
return defaultfilters.date(date)
|
return defaultfilters.date(date)
|
||||||
if date.has_day:
|
if date.has_day:
|
||||||
|
|
|
@ -25,7 +25,6 @@ from bookwyrm.models import fields, User, Status, Edition
|
||||||
from bookwyrm.models.base_model import BookWyrmModel
|
from bookwyrm.models.base_model import BookWyrmModel
|
||||||
from bookwyrm.models.activitypub_mixin import ActivitypubMixin
|
from bookwyrm.models.activitypub_mixin import ActivitypubMixin
|
||||||
from bookwyrm.settings import DOMAIN
|
from bookwyrm.settings import DOMAIN
|
||||||
from bookwyrm.utils import sealed_date
|
|
||||||
|
|
||||||
# pylint: disable=too-many-public-methods
|
# pylint: disable=too-many-public-methods
|
||||||
@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay")
|
@patch("bookwyrm.suggested_users.rerank_suggestions_task.delay")
|
||||||
|
|
|
@ -11,26 +11,30 @@ from bookwyrm.utils import sealed_date
|
||||||
|
|
||||||
|
|
||||||
class SealedDateTest(unittest.TestCase):
|
class SealedDateTest(unittest.TestCase):
|
||||||
|
"""test SealedDate class in isolation"""
|
||||||
|
|
||||||
|
# pylint: disable=missing-function-docstring
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.dt = datetime.datetime(2023, 10, 20, 17, 33, 10, tzinfo=timezone.utc)
|
self._dt = datetime.datetime(2023, 10, 20, 17, 33, 10, tzinfo=timezone.utc)
|
||||||
|
|
||||||
def test_day_seal(self):
|
def test_day_seal(self):
|
||||||
sealed = sealed_date.SealedDate.from_datetime(self.dt)
|
sealed = sealed_date.SealedDate.from_datetime(self._dt)
|
||||||
self.assertEqual(self.dt, sealed)
|
self.assertEqual(self._dt, sealed)
|
||||||
self.assertEqual("2023-10-20", sealed.partial_isoformat())
|
self.assertEqual("2023-10-20", sealed.partial_isoformat())
|
||||||
self.assertTrue(sealed.has_day)
|
self.assertTrue(sealed.has_day)
|
||||||
self.assertTrue(sealed.has_month)
|
self.assertTrue(sealed.has_month)
|
||||||
|
|
||||||
def test_month_seal(self):
|
def test_month_seal(self):
|
||||||
sealed = sealed_date.MonthSeal.from_datetime(self.dt)
|
sealed = sealed_date.MonthSeal.from_datetime(self._dt)
|
||||||
self.assertEqual(self.dt, sealed)
|
self.assertEqual(self._dt, sealed)
|
||||||
self.assertEqual("2023-10", sealed.partial_isoformat())
|
self.assertEqual("2023-10", sealed.partial_isoformat())
|
||||||
self.assertFalse(sealed.has_day)
|
self.assertFalse(sealed.has_day)
|
||||||
self.assertTrue(sealed.has_month)
|
self.assertTrue(sealed.has_month)
|
||||||
|
|
||||||
def test_year_seal(self):
|
def test_year_seal(self):
|
||||||
sealed = sealed_date.YearSeal.from_datetime(self.dt)
|
sealed = sealed_date.YearSeal.from_datetime(self._dt)
|
||||||
self.assertEqual(self.dt, sealed)
|
self.assertEqual(self._dt, sealed)
|
||||||
self.assertEqual("2023", sealed.partial_isoformat())
|
self.assertEqual("2023", sealed.partial_isoformat())
|
||||||
self.assertFalse(sealed.has_day)
|
self.assertFalse(sealed.has_day)
|
||||||
self.assertFalse(sealed.has_month)
|
self.assertFalse(sealed.has_month)
|
||||||
|
@ -95,20 +99,24 @@ class SealedDateTest(unittest.TestCase):
|
||||||
|
|
||||||
|
|
||||||
class SealedDateFormFieldTest(unittest.TestCase):
|
class SealedDateFormFieldTest(unittest.TestCase):
|
||||||
|
"""test form support for SealedDate objects"""
|
||||||
|
|
||||||
|
# pylint: disable=missing-function-docstring
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.dt = datetime.datetime(2022, 11, 21, 17, 1, 0, tzinfo=timezone.utc)
|
self._dt = datetime.datetime(2022, 11, 21, 17, 1, 0, tzinfo=timezone.utc)
|
||||||
self.field = sealed_date.SealedDateFormField()
|
self.field = sealed_date.SealedDateFormField()
|
||||||
|
|
||||||
def test_prepare_value(self):
|
def test_prepare_value(self):
|
||||||
sealed = sealed_date.SealedDate.from_datetime(self.dt)
|
sealed = sealed_date.SealedDate.from_datetime(self._dt)
|
||||||
self.assertEqual("2022-11-21", self.field.prepare_value(sealed))
|
self.assertEqual("2022-11-21", self.field.prepare_value(sealed))
|
||||||
|
|
||||||
def test_prepare_value_month(self):
|
def test_prepare_value_month(self):
|
||||||
sealed = sealed_date.MonthSeal.from_datetime(self.dt)
|
sealed = sealed_date.MonthSeal.from_datetime(self._dt)
|
||||||
self.assertEqual("2022-11-0", self.field.prepare_value(sealed))
|
self.assertEqual("2022-11-0", self.field.prepare_value(sealed))
|
||||||
|
|
||||||
def test_prepare_value_year(self):
|
def test_prepare_value_year(self):
|
||||||
sealed = sealed_date.YearSeal.from_datetime(self.dt)
|
sealed = sealed_date.YearSeal.from_datetime(self._dt)
|
||||||
self.assertEqual("2022-0-0", self.field.prepare_value(sealed))
|
self.assertEqual("2022-0-0", self.field.prepare_value(sealed))
|
||||||
|
|
||||||
def test_to_python(self):
|
def test_to_python(self):
|
||||||
|
|
|
@ -12,6 +12,7 @@ from django.forms import DateField
|
||||||
from django.forms.widgets import SelectDateWidget
|
from django.forms.widgets import SelectDateWidget
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
|
# pylint: disable=no-else-return
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"SealedDate",
|
"SealedDate",
|
||||||
|
@ -32,17 +33,25 @@ class SealedDate(datetime):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_day(self) -> bool:
|
def has_day(self) -> bool:
|
||||||
|
"""whether this is a full date"""
|
||||||
return self.has_month
|
return self.has_month
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_month(self) -> bool:
|
def has_month(self) -> bool:
|
||||||
|
"""whether this date includes month"""
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def partial_isoformat(self) -> str:
|
def partial_isoformat(self) -> str:
|
||||||
|
"""partial ISO-8601 format"""
|
||||||
return self.strftime("%Y-%m-%d")
|
return self.strftime("%Y-%m-%d")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_datetime(cls: Type[Sealed], dt: datetime) -> Sealed:
|
def from_datetime(cls: Type[Sealed], dt: datetime) -> Sealed:
|
||||||
|
"""construct a SealedDate object from a timezone-aware datetime
|
||||||
|
|
||||||
|
Use subclasses to specify precision. If `dt` is naive, `ValueError`
|
||||||
|
is raised.
|
||||||
|
"""
|
||||||
# pylint: disable=invalid-name
|
# pylint: disable=invalid-name
|
||||||
if timezone.is_naive(dt):
|
if timezone.is_naive(dt):
|
||||||
raise ValueError("naive datetime not accepted")
|
raise ValueError("naive datetime not accepted")
|
||||||
|
@ -50,6 +59,9 @@ class SealedDate(datetime):
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def from_date_parts(cls: Type[Sealed], year: int, month: int, day: int) -> Sealed:
|
def from_date_parts(cls: Type[Sealed], year: int, month: int, day: int) -> Sealed:
|
||||||
|
"""construct a SealedDate from year, month, day.
|
||||||
|
|
||||||
|
Use sublcasses to specify precision."""
|
||||||
# because SealedDate is actually a datetime object, we must create it with a
|
# because SealedDate is actually a datetime object, we must create it with a
|
||||||
# timezone such that its date remains stable no matter the values of USE_TZ,
|
# timezone such that its date remains stable no matter the values of USE_TZ,
|
||||||
# current_timezone and default_timezone.
|
# current_timezone and default_timezone.
|
||||||
|
@ -57,6 +69,8 @@ class SealedDate(datetime):
|
||||||
|
|
||||||
|
|
||||||
class MonthSeal(SealedDate):
|
class MonthSeal(SealedDate):
|
||||||
|
"""a date sealed into month precision"""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_day(self) -> bool:
|
def has_day(self) -> bool:
|
||||||
return False
|
return False
|
||||||
|
@ -66,6 +80,8 @@ class MonthSeal(SealedDate):
|
||||||
|
|
||||||
|
|
||||||
class YearSeal(SealedDate):
|
class YearSeal(SealedDate):
|
||||||
|
"""a date sealed into year precision"""
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def has_month(self) -> bool:
|
def has_month(self) -> bool:
|
||||||
return False
|
return False
|
||||||
|
@ -75,6 +91,11 @@ class YearSeal(SealedDate):
|
||||||
|
|
||||||
|
|
||||||
def from_partial_isoformat(value: str) -> SealedDate:
|
def from_partial_isoformat(value: str) -> SealedDate:
|
||||||
|
"""construct SealedDate from a partial string.
|
||||||
|
|
||||||
|
Accepted formats: YYYY, YYYY-MM, YYYY-MM-DD; otherwise `ValueError`
|
||||||
|
is raised.
|
||||||
|
"""
|
||||||
match = _partial_re.match(value)
|
match = _partial_re.match(value)
|
||||||
|
|
||||||
if not match:
|
if not match:
|
||||||
|
@ -127,6 +148,10 @@ class SealedDateFormField(DateField):
|
||||||
|
|
||||||
|
|
||||||
class SealedDateDescriptor:
|
class SealedDateDescriptor:
|
||||||
|
"""descriptor for SealedDateField.
|
||||||
|
|
||||||
|
Encapsulates the "two columns, one field" for SealedDateField.
|
||||||
|
"""
|
||||||
|
|
||||||
_SEAL_TYPES = {
|
_SEAL_TYPES = {
|
||||||
YearSeal: "YEAR",
|
YearSeal: "YEAR",
|
||||||
|
@ -185,6 +210,7 @@ class SealedDateDescriptor:
|
||||||
|
|
||||||
|
|
||||||
class SealedDateField(models.DateTimeField): # FIXME: use DateField.
|
class SealedDateField(models.DateTimeField): # FIXME: use DateField.
|
||||||
|
"""a date field for Django models, using SealedDate as values"""
|
||||||
|
|
||||||
descriptor_class = SealedDateDescriptor
|
descriptor_class = SealedDateDescriptor
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue