style: format code using black v23
This commit is contained in:
parent
42879f2aec
commit
22c255700e
|
@ -46,7 +46,7 @@ def custom_preprocessing_hook(endpoints):
|
|||
# your modifications to the list of operations that are exposed in the schema
|
||||
api_type = os.environ.get("API_TYPE", "v1")
|
||||
|
||||
for (path, path_regex, method, callback) in endpoints:
|
||||
for path, path_regex, method, callback in endpoints:
|
||||
if path.startswith("/api/v1/providers"):
|
||||
continue
|
||||
|
||||
|
|
|
@ -736,7 +736,6 @@ See :doc:`/administrator_documentation/configuration_docs/ldap` for more informa
|
|||
"""
|
||||
|
||||
if AUTH_LDAP_ENABLED:
|
||||
|
||||
# Import the LDAP modules here.
|
||||
# This way, we don't need the dependency unless someone
|
||||
# actually enables the LDAP support
|
||||
|
|
|
@ -9,7 +9,6 @@ from . import serializers, utils
|
|||
|
||||
|
||||
class ActivityViewSet(viewsets.GenericViewSet):
|
||||
|
||||
serializer_class = serializers.AutoSerializer
|
||||
permission_classes = [ConditionalAuthentication]
|
||||
queryset = TrackFavorite.objects.none()
|
||||
|
|
|
@ -26,7 +26,6 @@ class PodcastRSSRenderer(renderers.JSONRenderer):
|
|||
|
||||
class PodcastRSSContentNegociation(negotiation.DefaultContentNegotiation):
|
||||
def select_renderer(self, request, renderers, format_suffix=None):
|
||||
|
||||
return (PodcastRSSRenderer(), PodcastRSSRenderer.media_type)
|
||||
|
||||
|
||||
|
|
|
@ -57,7 +57,7 @@ class SmartSearchFilter(django_filters.CharFilter):
|
|||
return qs
|
||||
try:
|
||||
cleaned = self.config.clean(value)
|
||||
except (forms.ValidationError):
|
||||
except forms.ValidationError:
|
||||
return qs.none()
|
||||
return search.apply(qs, cleaned)
|
||||
|
||||
|
|
|
@ -119,7 +119,6 @@ class MultipleQueryFilter(filters.TypedMultipleChoiceFilter):
|
|||
|
||||
|
||||
def filter_target(value):
|
||||
|
||||
config = {
|
||||
"artist": ["artist", "target_id", int],
|
||||
"album": ["album", "target_id", int],
|
||||
|
@ -177,7 +176,6 @@ class ActorScopeFilter(filters.CharFilter):
|
|||
super().__init__(*args, **kwargs)
|
||||
|
||||
def filter(self, queryset, value):
|
||||
|
||||
if not value:
|
||||
return queryset
|
||||
|
||||
|
|
|
@ -46,7 +46,6 @@ def create_local_accounts(factories, count, dependencies):
|
|||
|
||||
def create_taggable_items(dependency):
|
||||
def inner(factories, count, dependencies):
|
||||
|
||||
objs = []
|
||||
tagged_objects = dependencies.get(
|
||||
dependency, list(CONFIG_BY_ID[dependency]["model"].objects.all().only("pk"))
|
||||
|
@ -260,7 +259,6 @@ class Command(BaseCommand):
|
|||
|
||||
self.stdout.write("")
|
||||
if options["dry_run"]:
|
||||
|
||||
self.stdout.write(
|
||||
"Run this command with --no-dry-run to commit the changes to the database"
|
||||
)
|
||||
|
|
|
@ -167,7 +167,6 @@ def render_tags(tags):
|
|||
<meta hello="world" />
|
||||
"""
|
||||
for tag in tags:
|
||||
|
||||
yield "<{tag} {attrs} />".format(
|
||||
tag=tag.pop("tag"),
|
||||
attrs=" ".join(
|
||||
|
@ -408,7 +407,6 @@ class PymallocMiddleware:
|
|||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
|
||||
if tracemalloc.is_tracing():
|
||||
snapshot = tracemalloc.take_snapshot()
|
||||
stats = snapshot.statistics("lineno")
|
||||
|
|
|
@ -155,7 +155,7 @@ class ListenBrainzClient:
|
|||
|
||||
def _get_payload_many(tracks):
|
||||
payload = []
|
||||
for (listened_at, track) in tracks:
|
||||
for listened_at, track in tracks:
|
||||
data = _get_payload(track, listened_at)
|
||||
payload.append(data)
|
||||
return payload
|
||||
|
|
|
@ -19,7 +19,6 @@ class TrackFavoriteViewSet(
|
|||
mixins.ListModelMixin,
|
||||
viewsets.GenericViewSet,
|
||||
):
|
||||
|
||||
filterset_class = filters.TrackFavoriteFilter
|
||||
serializer_class = serializers.UserTrackFavoriteSerializer
|
||||
queryset = models.TrackFavorite.objects.all().select_related(
|
||||
|
|
|
@ -180,7 +180,6 @@ def receive(activity, on_behalf_of, inbox_actor=None):
|
|||
|
||||
inbox_items = []
|
||||
for recipients, type in [(local_to_recipients, "to"), (local_cc_recipients, "cc")]:
|
||||
|
||||
for r in recipients:
|
||||
inbox_items.append(models.InboxItem(actor_id=r, type=type, activity=copy))
|
||||
|
||||
|
|
|
@ -208,7 +208,6 @@ class InboxItemViewSet(
|
|||
mixins.RetrieveModelMixin,
|
||||
viewsets.GenericViewSet,
|
||||
):
|
||||
|
||||
queryset = (
|
||||
models.InboxItem.objects.select_related("activity__actor")
|
||||
.prefetch_related("activity__object", "activity__target")
|
||||
|
@ -239,7 +238,6 @@ class InboxItemViewSet(
|
|||
class FetchViewSet(
|
||||
mixins.CreateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
|
||||
):
|
||||
|
||||
queryset = models.Fetch.objects.select_related("actor")
|
||||
serializer_class = api_serializers.FetchSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
|
|
@ -154,7 +154,6 @@ def dereference(value, references):
|
|||
|
||||
|
||||
def get_value(value, keep=None, attr=None):
|
||||
|
||||
if keep == "first":
|
||||
value = value[0]
|
||||
if attr:
|
||||
|
@ -253,7 +252,6 @@ class JsonLdSerializer(serializers.Serializer):
|
|||
|
||||
def run_validation(self, data=empty):
|
||||
if data and data is not empty:
|
||||
|
||||
self.jsonld_context = data.get("@context", [])
|
||||
if self.context.get("expand", self.jsonld_expand):
|
||||
try:
|
||||
|
|
|
@ -756,7 +756,6 @@ class FollowActionSerializer(serializers.Serializer):
|
|||
|
||||
|
||||
class AcceptFollowSerializer(FollowActionSerializer):
|
||||
|
||||
type = serializers.ChoiceField(choices=["Accept"])
|
||||
action_type = "accept"
|
||||
|
||||
|
@ -770,7 +769,6 @@ class AcceptFollowSerializer(FollowActionSerializer):
|
|||
|
||||
|
||||
class RejectFollowSerializer(FollowActionSerializer):
|
||||
|
||||
type = serializers.ChoiceField(choices=["Reject"])
|
||||
action_type = "reject"
|
||||
|
||||
|
|
|
@ -139,7 +139,6 @@ def dispatch_outbox(activity):
|
|||
"delivery",
|
||||
)
|
||||
def deliver_to_remote(delivery):
|
||||
|
||||
if not preferences.get("federation__enabled"):
|
||||
# federation is disabled, we only deliver to local recipients
|
||||
return
|
||||
|
|
|
@ -145,7 +145,6 @@ def is_local(url) -> bool:
|
|||
|
||||
|
||||
def get_actor_data_from_username(username):
|
||||
|
||||
parts = username.split("@")
|
||||
|
||||
return {
|
||||
|
@ -243,7 +242,6 @@ FID_MODEL_LABELS = [
|
|||
|
||||
|
||||
def get_object_by_fid(fid, local=None):
|
||||
|
||||
if local:
|
||||
parsed = urllib.parse.urlparse(fid)
|
||||
if parsed.netloc != settings.FEDERATION_HOSTNAME:
|
||||
|
|
|
@ -17,7 +17,6 @@ class ListeningViewSet(
|
|||
mixins.RetrieveModelMixin,
|
||||
viewsets.GenericViewSet,
|
||||
):
|
||||
|
||||
serializer_class = serializers.ListeningSerializer
|
||||
queryset = models.Listening.objects.all().select_related(
|
||||
"user__actor__attachment_icon"
|
||||
|
|
|
@ -395,7 +395,6 @@ class ManageNestedTrackSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class ManageNestedAlbumSerializer(ManageBaseAlbumSerializer):
|
||||
|
||||
tracks_count = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
|
@ -662,7 +661,6 @@ class ManageUploadSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class ManageTagSerializer(ManageBaseAlbumSerializer):
|
||||
|
||||
tracks_count = serializers.SerializerMethodField()
|
||||
albums_count = serializers.SerializerMethodField()
|
||||
artists_count = serializers.SerializerMethodField()
|
||||
|
|
|
@ -674,7 +674,6 @@ class ManageChannelViewSet(
|
|||
mixins.DestroyModelMixin,
|
||||
viewsets.GenericViewSet,
|
||||
):
|
||||
|
||||
url_lookups = [
|
||||
{
|
||||
"lookup_field": "uuid",
|
||||
|
|
|
@ -36,7 +36,6 @@ def check_allow_list(payload, **kwargs):
|
|||
}
|
||||
|
||||
if relevant_domains - allowed_domains:
|
||||
|
||||
raise mrf.Discard(
|
||||
"These domains are not allowed: {}".format(
|
||||
", ".join(relevant_domains - allowed_domains)
|
||||
|
|
|
@ -46,7 +46,6 @@ class RelatedFilterSet(filters.FilterSet):
|
|||
|
||||
|
||||
class ChannelFilterSet(filters.FilterSet):
|
||||
|
||||
channel = filters.CharFilter(field_name="_", method="filter_channel")
|
||||
|
||||
def filter_channel(self, queryset, name, value):
|
||||
|
@ -70,7 +69,6 @@ class ChannelFilterSet(filters.FilterSet):
|
|||
|
||||
|
||||
class LibraryFilterSet(filters.FilterSet):
|
||||
|
||||
library = filters.CharFilter(field_name="_", method="filter_library")
|
||||
|
||||
def filter_library(self, queryset, name, value):
|
||||
|
@ -96,7 +94,6 @@ class ArtistFilter(
|
|||
audio_filters.IncludeChannelsFilterSet,
|
||||
moderation_filters.HiddenContentFilterSet,
|
||||
):
|
||||
|
||||
q = fields.SearchFilter(search_fields=["name"], fts_search_fields=["body_text"])
|
||||
playable = filters.BooleanFilter(field_name="_", method="filter_playable")
|
||||
has_albums = filters.BooleanFilter(field_name="_", method="filter_has_albums")
|
||||
|
|
|
@ -810,7 +810,6 @@ def check_updates(stdout, library, extensions, paths, batch_size):
|
|||
)
|
||||
|
||||
for upload in rows:
|
||||
|
||||
check_upload(stdout, upload)
|
||||
checked_paths.add(upload.source.replace("file://", "", 1))
|
||||
|
||||
|
|
|
@ -136,7 +136,6 @@ def clean_flac_pictures(apic):
|
|||
def clean_ogg_pictures(metadata_block_picture):
|
||||
pictures = []
|
||||
for b64_data in [metadata_block_picture]:
|
||||
|
||||
try:
|
||||
data = base64.b64decode(b64_data)
|
||||
except (TypeError, ValueError):
|
||||
|
|
|
@ -437,7 +437,6 @@ class TrackQuerySet(common_models.LocalFromFidQuerySet, models.QuerySet):
|
|||
)
|
||||
|
||||
def annotate_playable_by_actor(self, actor):
|
||||
|
||||
files = (
|
||||
Upload.objects.playable_by(actor)
|
||||
.filter(track=models.OuterRef("id"))
|
||||
|
@ -448,7 +447,6 @@ class TrackQuerySet(common_models.LocalFromFidQuerySet, models.QuerySet):
|
|||
return self.annotate(is_playable_by_actor=subquery)
|
||||
|
||||
def playable_by(self, actor, include=True):
|
||||
|
||||
if settings.MUSIC_USE_DENORMALIZATION:
|
||||
if actor is not None:
|
||||
query = models.Q(actor=None) | models.Q(actor=actor)
|
||||
|
|
|
@ -445,7 +445,6 @@ def get_best_candidate_or_create(model, query, defaults, sort_fields):
|
|||
"""
|
||||
candidates = model.objects.filter(query)
|
||||
if candidates:
|
||||
|
||||
return sort_candidates(candidates, sort_fields)[0], False
|
||||
|
||||
return model.objects.create(**defaults), True
|
||||
|
|
|
@ -20,7 +20,6 @@ class PlaylistViewSet(
|
|||
mixins.ListModelMixin,
|
||||
viewsets.GenericViewSet,
|
||||
):
|
||||
|
||||
serializer_class = serializers.PlaylistSerializer
|
||||
queryset = (
|
||||
models.Playlist.objects.all()
|
||||
|
|
|
@ -54,7 +54,6 @@ class RadioSessionTrackSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class RadioSessionSerializer(serializers.ModelSerializer):
|
||||
|
||||
related_object_id = serializers.CharField(required=False, allow_null=True)
|
||||
|
||||
class Meta:
|
||||
|
|
|
@ -20,7 +20,6 @@ class RadioViewSet(
|
|||
mixins.DestroyModelMixin,
|
||||
viewsets.GenericViewSet,
|
||||
):
|
||||
|
||||
serializer_class = serializers.RadioSerializer
|
||||
permission_classes = [
|
||||
oauth_permissions.ScopePermission,
|
||||
|
@ -87,7 +86,6 @@ class RadioViewSet(
|
|||
class RadioSessionViewSet(
|
||||
mixins.CreateModelMixin, mixins.RetrieveModelMixin, viewsets.GenericViewSet
|
||||
):
|
||||
|
||||
serializer_class = serializers.RadioSessionSerializer
|
||||
queryset = models.RadioSession.objects.all()
|
||||
permission_classes = []
|
||||
|
|
|
@ -387,7 +387,6 @@ class SubsonicViewSet(viewsets.GenericViewSet):
|
|||
try:
|
||||
offset = int(data.get("offset", 0))
|
||||
except (TypeError, ValueError):
|
||||
|
||||
offset = 0
|
||||
|
||||
try:
|
||||
|
|
|
@ -14,7 +14,6 @@ class MyUserChangeForm(UserChangeForm):
|
|||
|
||||
|
||||
class MyUserCreationForm(UserCreationForm):
|
||||
|
||||
error_message = UserCreationForm.error_messages.update(
|
||||
{"duplicate_username": "This username has already been taken."}
|
||||
)
|
||||
|
|
|
@ -114,7 +114,6 @@ class UserManager(BaseUserManager):
|
|||
|
||||
|
||||
class User(AbstractUser):
|
||||
|
||||
# First Name and Last Name do not cover name patterns
|
||||
# around the globe.
|
||||
name = models.CharField(_("Name of User"), blank=True, max_length=255)
|
||||
|
|
|
@ -47,7 +47,6 @@ METHOD_SCOPE_MAPPING = {
|
|||
|
||||
class ScopePermission(permissions.BasePermission):
|
||||
def has_permission(self, request, view):
|
||||
|
||||
if request.method.lower() in ["options", "head"]:
|
||||
return True
|
||||
|
||||
|
@ -103,7 +102,6 @@ class ScopePermission(permissions.BasePermission):
|
|||
)
|
||||
|
||||
def has_permission_token(self, token, required_scope):
|
||||
|
||||
if token.is_expired():
|
||||
return False
|
||||
|
||||
|
|
|
@ -185,7 +185,6 @@ class UserWriteSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class UserReadSerializer(serializers.ModelSerializer):
|
||||
|
||||
permissions = serializers.SerializerMethodField()
|
||||
full_username = serializers.SerializerMethodField()
|
||||
avatar = common_serializers.AttachmentSerializer(source="get_avatar")
|
||||
|
|
|
@ -138,7 +138,6 @@ def test_channel_update_permission(logged_in_api_client, factories):
|
|||
|
||||
|
||||
def test_channel_delete(logged_in_api_client, factories, mocker):
|
||||
|
||||
actor = logged_in_api_client.user.create_actor()
|
||||
channel = factories["audio.Channel"](attributed_to=actor)
|
||||
|
||||
|
@ -336,7 +335,6 @@ def test_channel_rss_feed_authentication_required(factories, api_client, prefere
|
|||
|
||||
|
||||
def test_channel_metadata_choices(factories, api_client):
|
||||
|
||||
expected = {
|
||||
"language": [
|
||||
{"value": code, "label": name} for code, name in locales.ISO_639_CHOICES
|
||||
|
|
|
@ -16,7 +16,6 @@ from funkwhale_api.federation import (
|
|||
def test_receive_validates_basic_attributes_and_stores_activity(
|
||||
mrf_inbox_registry, factories, now, mocker
|
||||
):
|
||||
|
||||
mocker.patch.object(
|
||||
activity.InboxRouter, "get_matching_handlers", return_value=True
|
||||
)
|
||||
|
@ -598,7 +597,6 @@ def test_prepare_deliveries_and_inbox_items_allow_list(factories, preferences):
|
|||
|
||||
|
||||
def test_prepare_deliveries_and_inbox_items_instances_with_followers(factories):
|
||||
|
||||
domain1 = factories["federation.Domain"](with_service_actor=True)
|
||||
domain2 = factories["federation.Domain"](with_service_actor=True)
|
||||
library = factories["music.Library"](actor__local=True)
|
||||
|
|
|
@ -237,7 +237,6 @@ async def test_fetch_many(a_responses):
|
|||
|
||||
|
||||
def test_dereference():
|
||||
|
||||
followers_doc = {
|
||||
"@context": jsonld.get_default_context(),
|
||||
"id": "https://noop/federation/actors/demo/followers",
|
||||
|
|
|
@ -401,7 +401,6 @@ def test_inbox_delete_library(factories):
|
|||
|
||||
|
||||
def test_inbox_delete_album(factories):
|
||||
|
||||
album = factories["music.Album"](attributed=True)
|
||||
payload = {
|
||||
"type": "Delete",
|
||||
|
|
|
@ -4,7 +4,6 @@ from funkwhale_api.federation import routes, serializers
|
|||
|
||||
|
||||
def test_pleroma_actor_from_ap_with_tags(factories):
|
||||
|
||||
payload = {
|
||||
"@context": [
|
||||
"https://www.w3.org/ns/activitystreams",
|
||||
|
@ -73,7 +72,6 @@ def test_pleroma_actor_from_ap_with_tags(factories):
|
|||
|
||||
|
||||
def test_pleroma_actor_from_ap(factories):
|
||||
|
||||
payload = {
|
||||
"@context": [
|
||||
"https://www.w3.org/ns/activitystreams",
|
||||
|
|
|
@ -156,7 +156,6 @@ def test_import_track_with_different_artist_than_release(factories, mocker):
|
|||
"extension,mimetype", [("ogg", "audio/ogg"), ("mp3", "audio/mpeg")]
|
||||
)
|
||||
def test_audio_track_mime_type(extension, mimetype, factories):
|
||||
|
||||
name = ".".join(["test", extension])
|
||||
path = os.path.join(DATA_DIR, name)
|
||||
upload = factories["music.Upload"](audio_file__from_path=path, mimetype=None)
|
||||
|
@ -166,7 +165,6 @@ def test_audio_track_mime_type(extension, mimetype, factories):
|
|||
|
||||
@pytest.mark.parametrize("name", ["test.ogg", "test.mp3"])
|
||||
def test_audio_track_checksum(name, factories):
|
||||
|
||||
path = os.path.join(DATA_DIR, name)
|
||||
upload = factories["music.Upload"](audio_file__from_path=path, mimetype=None)
|
||||
|
||||
|
|
|
@ -135,7 +135,6 @@ def test_clean_config_is_called_on_serializer_save(mocker, factories):
|
|||
|
||||
@pytest.mark.parametrize("radio_type", ["random", "less-listened", "favorites"])
|
||||
def test_create_radio_session(radio_type, logged_in_api_client):
|
||||
|
||||
url = reverse("api:v1:radios:sessions-list")
|
||||
response = logged_in_api_client.post(url, {"radio_type": radio_type})
|
||||
|
||||
|
|
|
@ -2,7 +2,6 @@ from funkwhale_api.radios import filters
|
|||
|
||||
|
||||
def test_clean_config_artist_name_sorting(factories):
|
||||
|
||||
artist3 = factories["music.Artist"](name="The Green Eyes")
|
||||
artist2 = factories["music.Artist"](name="The Green Eyed Machine")
|
||||
artist1 = factories["music.Artist"](name="The Green Seed")
|
||||
|
@ -21,7 +20,6 @@ def test_clean_config_artist_name_sorting(factories):
|
|||
|
||||
|
||||
def test_clean_config_tag_name_sorting(factories):
|
||||
|
||||
tag3 = factories["tags.Tag"](name="Rock")
|
||||
tag2 = factories["tags.Tag"](name="Classic")
|
||||
tag1 = factories["tags.Tag"](name="Punk")
|
||||
|
|
|
@ -419,7 +419,7 @@ def test_can_start_custom_multiple_radio_from_api(api_client, factories):
|
|||
tracks = factories["music.Track"].create_batch(5)
|
||||
url = reverse("api:v1:radios:sessions-list")
|
||||
map_filters_to_type = {"tags": "names", "artists": "ids", "playlists": "names"}
|
||||
for (key, value) in map_filters_to_type.items():
|
||||
for key, value in map_filters_to_type.items():
|
||||
attr = value[:-1]
|
||||
track_filter_key = [getattr(a.artist, attr) for a in tracks]
|
||||
config = {"filters": [{"type": key, value: track_filter_key}]}
|
||||
|
|
|
@ -2,5 +2,4 @@ from . import utils as test_utils
|
|||
|
||||
|
||||
def test_to_api_date(now):
|
||||
|
||||
assert test_utils.to_api_date(now) == now.isoformat().split("+")[0] + "Z"
|
||||
|
|
|
@ -187,5 +187,4 @@ from funkwhale_api.users.oauth import scopes
|
|||
],
|
||||
)
|
||||
def test_get_scopes_from_user_permissions(user_perms, expected):
|
||||
|
||||
assert scopes.get_from_permissions(**user_perms) == expected
|
||||
|
|
|
@ -7,7 +7,6 @@ from distutils.version import StrictVersion
|
|||
|
||||
|
||||
def get_versions():
|
||||
|
||||
output = subprocess.check_output(
|
||||
["git", "tag", "-l", "--format=%(creatordate:iso-strict)|%(refname:short)"]
|
||||
)
|
||||
|
@ -16,7 +15,7 @@ def get_versions():
|
|||
for line in output.decode().splitlines():
|
||||
try:
|
||||
date, tag = line.split("|")
|
||||
except (ValueError):
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
if not date or not tag:
|
||||
|
|
|
@ -267,7 +267,7 @@ REPLACEMENTS = {
|
|||
("background", "var(--site-background)"),
|
||||
("color", "var(--text-color)"),
|
||||
],
|
||||
("::-webkit-selection", "::-moz-selection", "::selection",): [
|
||||
("::-webkit-selection", "::-moz-selection", "::selection"): [
|
||||
("color", "var(--text-selection-color)"),
|
||||
("background-color", "var(--text-selection-background)"),
|
||||
],
|
||||
|
@ -448,7 +448,7 @@ REPLACEMENTS = {
|
|||
): [
|
||||
("color", "var(--input-focus-placeholder-color)"),
|
||||
],
|
||||
(".ui.form .field > label", ".ui.form .inline.fields .field > label",): [
|
||||
(".ui.form .field > label", ".ui.form .inline.fields .field > label"): [
|
||||
("color", "var(--form-label-color)"),
|
||||
],
|
||||
},
|
||||
|
@ -779,7 +779,7 @@ REPLACEMENTS = {
|
|||
".structured",
|
||||
"tablet stackable",
|
||||
],
|
||||
(".ui.table", ".ui.table > thead > tr > th",): [
|
||||
(".ui.table", ".ui.table > thead > tr > th"): [
|
||||
("color", "var(--text-color)"),
|
||||
("background", "var(--table-background)"),
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue