mirror of
https://github.com/zulip/zulip.git
synced 2025-11-06 15:03:34 +00:00
python: Replace NamedTuple with dataclass.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Tim Abbott
parent
39d6185ce7
commit
03e147d5e1
@@ -8,6 +8,9 @@ Django==2.2.*
|
|||||||
# needed for Literal, TypedDict
|
# needed for Literal, TypedDict
|
||||||
typing-extensions
|
typing-extensions
|
||||||
|
|
||||||
|
# Backport of @dataclass
|
||||||
|
dataclasses;python_version<"3.7"
|
||||||
|
|
||||||
# Needed for rendering backend templates
|
# Needed for rendering backend templates
|
||||||
Jinja2
|
Jinja2
|
||||||
|
|
||||||
|
|||||||
@@ -243,6 +243,10 @@ cssutils==1.0.2 \
|
|||||||
--hash=sha256:a2fcf06467553038e98fea9cfe36af2bf14063eb147a70958cfcaa8f5786acaf \
|
--hash=sha256:a2fcf06467553038e98fea9cfe36af2bf14063eb147a70958cfcaa8f5786acaf \
|
||||||
--hash=sha256:c74dbe19c92f5052774eadb15136263548dd013250f1ed1027988e7fef125c8d \
|
--hash=sha256:c74dbe19c92f5052774eadb15136263548dd013250f1ed1027988e7fef125c8d \
|
||||||
# via premailer
|
# via premailer
|
||||||
|
dataclasses==0.7 ; python_version < "3.7" \
|
||||||
|
--hash=sha256:3459118f7ede7c8bea0fe795bff7c6c2ce287d01dd226202f7c9ebc0610a7836 \
|
||||||
|
--hash=sha256:494a6dcae3b8bcf80848eea2ef64c0cc5cd307ffc263e17cdf42f3e5420808e6 \
|
||||||
|
# via -r requirements/common.in
|
||||||
decorator==4.4.2 \
|
decorator==4.4.2 \
|
||||||
--hash=sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760 \
|
--hash=sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760 \
|
||||||
--hash=sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7 \
|
--hash=sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7 \
|
||||||
|
|||||||
@@ -154,6 +154,10 @@ cssutils==1.0.2 \
|
|||||||
--hash=sha256:a2fcf06467553038e98fea9cfe36af2bf14063eb147a70958cfcaa8f5786acaf \
|
--hash=sha256:a2fcf06467553038e98fea9cfe36af2bf14063eb147a70958cfcaa8f5786acaf \
|
||||||
--hash=sha256:c74dbe19c92f5052774eadb15136263548dd013250f1ed1027988e7fef125c8d \
|
--hash=sha256:c74dbe19c92f5052774eadb15136263548dd013250f1ed1027988e7fef125c8d \
|
||||||
# via premailer
|
# via premailer
|
||||||
|
dataclasses==0.7 ; python_version < "3.7" \
|
||||||
|
--hash=sha256:3459118f7ede7c8bea0fe795bff7c6c2ce287d01dd226202f7c9ebc0610a7836 \
|
||||||
|
--hash=sha256:494a6dcae3b8bcf80848eea2ef64c0cc5cd307ffc263e17cdf42f3e5420808e6 \
|
||||||
|
# via -r requirements/common.in
|
||||||
decorator==4.4.2 \
|
decorator==4.4.2 \
|
||||||
--hash=sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760 \
|
--hash=sha256:41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760 \
|
||||||
--hash=sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7 \
|
--hash=sha256:e3a62f0520172440ca0dcc823749319382e377f37f140a0b99ef45fecb84bfe7 \
|
||||||
|
|||||||
@@ -44,4 +44,4 @@ API_FEATURE_LEVEL = 12
|
|||||||
# historical commits sharing the same major version, in which case a
|
# historical commits sharing the same major version, in which case a
|
||||||
# minor version bump suffices.
|
# minor version bump suffices.
|
||||||
|
|
||||||
PROVISION_VERSION = '86.3'
|
PROVISION_VERSION = '86.4'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Zulip's main markdown implementation. See docs/subsystems/markdown.md for
|
# Zulip's main markdown implementation. See docs/subsystems/markdown.md for
|
||||||
# detailed documentation on our markdown syntax.
|
# detailed documentation on our markdown syntax.
|
||||||
from typing import (Any, Callable, Dict, Generic, Iterable, List, NamedTuple,
|
from typing import (Any, Callable, Dict, Generic, Iterable, List,
|
||||||
Optional, Set, Tuple, TypeVar, Union)
|
Optional, Set, Tuple, TypeVar, Union)
|
||||||
from typing.re import Match, Pattern
|
from typing.re import Match, Pattern
|
||||||
from typing_extensions import TypedDict
|
from typing_extensions import TypedDict
|
||||||
@@ -15,6 +15,7 @@ import os
|
|||||||
import html
|
import html
|
||||||
import time
|
import time
|
||||||
import functools
|
import functools
|
||||||
|
from dataclasses import dataclass
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
import dateutil.parser
|
import dateutil.parser
|
||||||
import dateutil.tz
|
import dateutil.tz
|
||||||
@@ -291,12 +292,12 @@ def walk_tree(root: Element,
|
|||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
||||||
ElementFamily = NamedTuple('ElementFamily', [
|
@dataclass
|
||||||
('grandparent', Optional[Element]),
|
class ElementFamily:
|
||||||
('parent', Element),
|
grandparent: Optional[Element]
|
||||||
('child', Element),
|
parent: Element
|
||||||
('in_blockquote', bool),
|
child: Element
|
||||||
])
|
in_blockquote: bool
|
||||||
|
|
||||||
T = TypeVar("T")
|
T = TypeVar("T")
|
||||||
|
|
||||||
@@ -1517,6 +1518,11 @@ class BlockQuoteProcessor(markdown.blockprocessors.BlockQuoteProcessor):
|
|||||||
# And then run the upstream processor's code for removing the '>'
|
# And then run the upstream processor's code for removing the '>'
|
||||||
return super().clean(line)
|
return super().clean(line)
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Fence:
|
||||||
|
fence_str: str
|
||||||
|
is_code: bool
|
||||||
|
|
||||||
class BugdownListPreprocessor(markdown.preprocessors.Preprocessor):
|
class BugdownListPreprocessor(markdown.preprocessors.Preprocessor):
|
||||||
""" Allows list blocks that come directly after another block
|
""" Allows list blocks that come directly after another block
|
||||||
to be rendered as a list.
|
to be rendered as a list.
|
||||||
@@ -1529,11 +1535,6 @@ class BugdownListPreprocessor(markdown.preprocessors.Preprocessor):
|
|||||||
|
|
||||||
def run(self, lines: List[str]) -> List[str]:
|
def run(self, lines: List[str]) -> List[str]:
|
||||||
""" Insert a newline between a paragraph and ulist if missing """
|
""" Insert a newline between a paragraph and ulist if missing """
|
||||||
Fence = NamedTuple('Fence', [
|
|
||||||
('fence_str', str),
|
|
||||||
('is_code', bool),
|
|
||||||
])
|
|
||||||
|
|
||||||
inserts = 0
|
inserts = 0
|
||||||
in_code_fence: bool = False
|
in_code_fence: bool = False
|
||||||
open_fences: List[Fence] = []
|
open_fences: List[Fence] = []
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
from typing import Dict, List, Optional, Any, Tuple
|
from typing import Dict, List, Optional, Any, Tuple
|
||||||
from django.conf.urls import url
|
from django.conf.urls import url
|
||||||
from django.contrib.staticfiles.storage import staticfiles_storage
|
from django.contrib.staticfiles.storage import staticfiles_storage
|
||||||
@@ -201,22 +202,17 @@ def split_fixture_path(path: str) -> Tuple[str, str]:
|
|||||||
integration_name = os.path.split(os.path.dirname(path))[-1]
|
integration_name = os.path.split(os.path.dirname(path))[-1]
|
||||||
return integration_name, fixture_name
|
return integration_name, fixture_name
|
||||||
|
|
||||||
# FIXME: Change to namedtuple if we drop Python3.6: No default values support on namedtuples (or dataclass)
|
@dataclass
|
||||||
class ScreenshotConfig:
|
class ScreenshotConfig:
|
||||||
def __init__(self, fixture_name: str, image_name: str='001.png',
|
fixture_name: str
|
||||||
image_dir: Optional[str]=None, bot_name: Optional[str]=None,
|
image_name: str = '001.png'
|
||||||
payload_as_query_param: bool=False, payload_param_name: str='payload',
|
image_dir: Optional[str] = None
|
||||||
extra_params: Optional[Dict[str, str]]=None,
|
bot_name: Optional[str] = None
|
||||||
use_basic_auth: bool=False, custom_headers: Optional[Dict[str, str]]=None):
|
payload_as_query_param: bool = False
|
||||||
self.fixture_name = fixture_name
|
payload_param_name: str = 'payload'
|
||||||
self.image_name = image_name
|
extra_params: Optional[Dict[str, str]] = None
|
||||||
self.image_dir = image_dir
|
use_basic_auth: bool = False
|
||||||
self.bot_name = bot_name
|
custom_headers: Optional[Dict[str, str]] = None
|
||||||
self.payload_as_query_param = payload_as_query_param
|
|
||||||
self.payload_param_name = payload_param_name
|
|
||||||
self.extra_params = extra_params
|
|
||||||
self.use_basic_auth = use_basic_auth
|
|
||||||
self.custom_headers = custom_headers
|
|
||||||
|
|
||||||
def get_fixture_and_image_paths(integration: WebhookIntegration,
|
def get_fixture_and_image_paths(integration: WebhookIntegration,
|
||||||
screenshot_config: ScreenshotConfig) -> Tuple[str, str]:
|
screenshot_config: ScreenshotConfig) -> Tuple[str, str]:
|
||||||
|
|||||||
Reference in New Issue
Block a user