Skip to content

Commit

Permalink
move audio_path_validator to utils
Browse files Browse the repository at this point in the history
  • Loading branch information
SoulMelody committed Jul 2, 2024
1 parent deb9691 commit ca35c13
Show file tree
Hide file tree
Showing 40 changed files with 72 additions and 63 deletions.
2 changes: 1 addition & 1 deletion libresvip/gui/models/table_models.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import re
from functools import cache
from gettext import gettext as _
from typing import Any, Optional

from PySide6.QtCore import QAbstractTableModel, QModelIndex, Qt, Slot
Expand All @@ -9,6 +8,7 @@

from libresvip.core.config import LyricsReplacement, LyricsReplaceMode, settings
from libresvip.extension.manager import plugin_manager
from libresvip.utils.translation import gettext_lazy as _


class PluginCadidatesTableModel(QAbstractTableModel):
Expand Down
4 changes: 2 additions & 2 deletions libresvip/middlewares/pitch_shift/options.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.utils.translation import gettext_lazy as _


class ProcessOptions(BaseModel):
key: int = Field(
Expand Down
3 changes: 2 additions & 1 deletion libresvip/middlewares/project_zoom/options.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field

from libresvip.utils.translation import gettext_lazy as _


class ProjectZoomOptions(Enum):
NONE: Annotated[str, Field(title=_("None"))] = "1/1"
Expand Down
3 changes: 2 additions & 1 deletion libresvip/middlewares/pronounciation_conversion/options.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field

from libresvip.utils.translation import gettext_lazy as _


class PronounciationConversionOptions(Enum):
NONE: Annotated[str, Field(title=_("None"))] = "Do nothing"
Expand Down
3 changes: 2 additions & 1 deletion libresvip/middlewares/remove_short_silences/options.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field

from libresvip.utils.translation import gettext_lazy as _


class NoteLengthOption(Enum):
ZERO: Annotated[str, Field(title=_("Zero length note"))] = "0/1"
Expand Down
4 changes: 2 additions & 2 deletions libresvip/middlewares/replace_lyric/options.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.utils.translation import gettext_lazy as _


class ProcessOptions(BaseModel):
lyric_replacement_preset_name: str = Field(
Expand Down
2 changes: 1 addition & 1 deletion libresvip/model/option_mixins.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import abc
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.core.constants import DEFAULT_BPM
from libresvip.utils.translation import gettext_lazy as _


class EnableInstrumentalTrackImportationMixin(BaseModel, abc.ABC):
Expand Down
17 changes: 4 additions & 13 deletions libresvip/plugins/acep/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,8 @@

import itertools
import math
import pathlib
import statistics
from enum import Enum
from gettext import gettext as _
from itertools import chain
from typing import TYPE_CHECKING, Annotated, Any, Literal, NamedTuple, Optional, Union

Expand All @@ -22,14 +20,16 @@
from libresvip.core.time_interval import RangeInterval
from libresvip.model.base import BaseModel
from libresvip.model.point import PointList
from libresvip.utils.audio import audio_path_validator
from libresvip.utils.music_math import linear_interpolation

from .ace_curve_utils import interpolate_hermite
from .singers import DEFAULT_SEED, DEFAULT_SINGER, DEFAULT_SINGER_ID

if TYPE_CHECKING:
from collections.abc import Callable
from gettext import gettext as _

from libresvip.utils.translation import gettext_lazy as _


class AcepAnchorPoint(NamedTuple):
Expand Down Expand Up @@ -270,16 +270,7 @@ class AcepAudioPattern(AcepPattern):
gain: Optional[float] = None
analysed_beat: Optional[AcepAnalysedBeat] = Field(None, alias="analysedBeat")

@field_validator("path", mode="before")
@classmethod
def validate_path(cls, path: str, info: ValidationInfo) -> str:
audio_path = pathlib.Path(path)
if not audio_path.is_absolute() and info.context is not None:
project_path: Optional[pathlib.Path]
if (project_path := info.context.get("path")) and not hasattr(project_path, "protocol"):
audio_path = (project_path.parent / path).resolve()
path = str(audio_path)
return path
validate_path = field_validator("path", mode="before")(audio_path_validator)


class AcepVocalPattern(AcepPattern):
Expand Down
2 changes: 1 addition & 1 deletion libresvip/plugins/acep/options.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from __future__ import annotations

from enum import Enum
from gettext import gettext as _
from types import SimpleNamespace
from typing import Annotated, Literal, Union

Expand All @@ -14,6 +13,7 @@
EnableInstrumentalTrackImportationMixin,
EnablePitchImportationMixin,
)
from libresvip.utils.translation import gettext_lazy as _

from .model import AcepLyricsLanguage
from .singers import DEFAULT_SINGER
Expand Down
2 changes: 1 addition & 1 deletion libresvip/plugins/ass/options.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field

from libresvip.model.option_mixins import SelectSingleTrackMixin
from libresvip.utils.translation import gettext_lazy as _


class SplitOption(Enum):
Expand Down
3 changes: 1 addition & 2 deletions libresvip/plugins/ccs/options.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.model.option_mixins import (
EnableInstrumentalTrackImportationMixin,
EnablePitchImportationMixin,
)
from libresvip.utils.translation import gettext_lazy as _


class InputOptions(EnableInstrumentalTrackImportationMixin, EnablePitchImportationMixin, BaseModel):
Expand Down
3 changes: 1 addition & 2 deletions libresvip/plugins/ds/options.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.model.option_mixins import EnablePitchImportationMixin, SelectSingleTrackMixin
from libresvip.utils.translation import gettext_lazy as _


class InputOptions(EnablePitchImportationMixin, BaseModel):
Expand Down
3 changes: 1 addition & 2 deletions libresvip/plugins/gj/options.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.model.option_mixins import (
EnableInstrumentalTrackImportationMixin,
EnablePitchImportationMixin,
EnableVolumeImportationMixin,
)
from libresvip.utils.translation import gettext_lazy as _


class InputOptions(
Expand Down
4 changes: 2 additions & 2 deletions libresvip/plugins/json/options.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.utils.translation import gettext_lazy as _


class InputOptions(BaseModel):
pass
Expand Down
3 changes: 2 additions & 1 deletion libresvip/plugins/lrc/options.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field

from libresvip.utils.translation import gettext_lazy as _


class OffsetPolicyOption(Enum):
TIMELINE: Annotated[
Expand Down
2 changes: 1 addition & 1 deletion libresvip/plugins/mid/options.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field

from libresvip.core.constants import DEFAULT_BPM
from libresvip.model.option_mixins import EnablePitchImportationMixin, EnableVolumeImportationMixin
from libresvip.utils.translation import gettext_lazy as _


class MultiChannelOption(Enum):
Expand Down
3 changes: 1 addition & 2 deletions libresvip/plugins/mtp/options.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.model.option_mixins import (
EnableInstrumentalTrackImportationMixin,
EnablePitchImportationMixin,
)
from libresvip.utils.translation import gettext_lazy as _


class InputOptions(EnableInstrumentalTrackImportationMixin, EnablePitchImportationMixin, BaseModel):
Expand Down
3 changes: 1 addition & 2 deletions libresvip/plugins/nn/options.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
from gettext import gettext as _

from pydantic import BaseModel, Field

from libresvip.model.option_mixins import (
EnablePitchImportationMixin,
SelectSingleTrackMixin,
StaticTempoMixin,
)
from libresvip.utils.translation import gettext_lazy as _


class InputOptions(EnablePitchImportationMixin, BaseModel):
Expand Down
3 changes: 3 additions & 0 deletions libresvip/plugins/s5p/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
from libresvip.core.constants import DEFAULT_BPM, DEFAULT_PHONEME
from libresvip.model.base import BaseModel
from libresvip.model.point import PointList
from libresvip.utils.audio import audio_path_validator


class S5pPoint(NamedTuple):
Expand Down Expand Up @@ -144,6 +145,8 @@ class S5pInstrumental(BaseModel):
filename: str = ""
offset: float = 0.0

validate_filename = field_validator("filename", mode="before")(audio_path_validator)


class S5pMixer(BaseModel):
gain_instrumental_decibel: float = Field(0.0, alias="gainInstrumentalDecibel")
Expand Down
4 changes: 3 additions & 1 deletion libresvip/plugins/s5p/synthv_editor_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,9 @@

class SynthVEditorConverter(plugin_base.SVSConverterBase):
def load(self, path: pathlib.Path, options: InputOptions) -> Project:
s5p_project = S5pProject.model_validate_json(path.read_bytes().decode("utf-8"))
s5p_project = S5pProject.model_validate_json(
path.read_bytes().decode("utf-8"), context={"path": path}
)
return SynthVEditorParser(options).parse_project(s5p_project)

def dump(self, path: pathlib.Path, project: Project, options: OutputOptions) -> None:
Expand Down
2 changes: 1 addition & 1 deletion libresvip/plugins/srt/options.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field

from libresvip.model.option_mixins import SelectSingleTrackMixin
from libresvip.utils.translation import gettext_lazy as _


class SplitOption(Enum):
Expand Down
2 changes: 1 addition & 1 deletion libresvip/plugins/svg/options.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field
from pydantic_extra_types.color import Color

from libresvip.model.option_mixins import SelectSingleTrackMixin
from libresvip.utils.translation import gettext_lazy as _


class TextAlignOption(Enum):
Expand Down
2 changes: 1 addition & 1 deletion libresvip/plugins/svip/options.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated

from pydantic import BaseModel, Field
Expand All @@ -12,6 +11,7 @@
EnableStrengthImportationMixin,
EnableVolumeImportationMixin,
)
from libresvip.utils.translation import gettext_lazy as _


class BinarySvipVersion(Enum):
Expand Down
3 changes: 3 additions & 0 deletions libresvip/plugins/svp/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from libresvip.core.time_interval import RangeInterval
from libresvip.model.base import BaseModel, Note
from libresvip.model.point import PointList
from libresvip.utils.audio import audio_path_validator

from . import constants
from .interval_utils import position_to_ticks
Expand Down Expand Up @@ -501,6 +502,8 @@ class SVAudio(BaseModel):
filename: str = ""
duration: float

validate_filename = field_validator("filename", mode="before")(audio_path_validator)


class SVDatabase(BaseModel):
name: str = ""
Expand Down
2 changes: 1 addition & 1 deletion libresvip/plugins/svp/options.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from enum import Enum
from gettext import gettext as _
from typing import Annotated, NamedTuple

from pydantic import BaseModel, Field
Expand All @@ -12,6 +11,7 @@
EnableStrengthImportationMixin,
EnableVolumeImportationMixin,
)
from libresvip.utils.translation import gettext_lazy as _


class SynthVLanguagePreset(NamedTuple):
Expand Down
2 changes: 1 addition & 1 deletion libresvip/plugins/svp/synthv_studio_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def load(self, path: pathlib.Path, options: InputOptions) -> Project:
sv_content = (
path.read_bytes().removesuffix(b"\x00").removeprefix("\ufeff".encode()).decode("utf-8")
)
sv_proj = SVProject.model_validate_json(sv_content)
sv_proj = SVProject.model_validate_json(sv_content, context={"path": path})
options.instant = options.instant and sv_proj.instant_mode_enabled
return SynthVParser(options=options).parse_project(sv_proj)

Expand Down
3 changes: 1 addition & 2 deletions libresvip/plugins/ust/options.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
from gettext import gettext as _

from pydantic import Field

from libresvip.model.base import BaseModel
from libresvip.model.option_mixins import EnablePitchImportationMixin, SelectSingleTrackMixin
from libresvip.utils.translation import gettext_lazy as _


class InputOptions(EnablePitchImportationMixin, BaseModel):
Expand Down
5 changes: 4 additions & 1 deletion libresvip/plugins/ustx/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,11 @@
from types import SimpleNamespace
from typing import Annotated, Literal, Optional, Union

from pydantic import Field
from pydantic import Field, field_validator

from libresvip.core.constants import DEFAULT_BPM, TICKS_IN_BEAT
from libresvip.model.base import BaseModel
from libresvip.utils.audio import audio_path_validator
from libresvip.utils.music_math import linear_interpolation

ParamType = SimpleNamespace(
Expand Down Expand Up @@ -193,6 +194,8 @@ class UWavePart(UPart):
skip_ms: float = 0
trim_ms: float = 0

validate_relative_path = field_validator("relative_path", mode="before")(audio_path_validator)


class USTXProject(BaseModel):
name: str = "New Project"
Expand Down
Loading

0 comments on commit ca35c13

Please sign in to comment.