beets/test
Šarūnas Nejus 65e935bee5
Perform a regex substitution in the substitute plugin (#5357)
This utilises regex substitution in the substitute plugin. The previous
approach only used regex to match the pattern, then replaced it with a
static string. This change allows more complex substitutions, where the
output depends on the input.

### Example use case
Say we want to keep only the first artist of a multi-artist credit, as
in the following list:
```
Neil Young & Crazy Horse -> Neil Young
Michael Hurley, The Holy Modal Rounders, Jeffrey Frederick & The Clamtones -> Michael Hurley
James Yorkston and the Athletes -> James Yorkston
````
This would previously have required three separate rules, one for each
resulting artist. By using a regex substitution, we can get the desired
behaviour in a single rule:
```yaml
substitute:
  ^(.*?)(,| &| and).*: \1
```
(Capture the text until the first `,` ` &` or ` and`, then use that
capture group as the output)

### Notes
I've kept the previous behaviour of only applying the first matching
rule, but I'm not 100% sure it's the ideal approach.
I can imagine both cases where you want to apply several rules in
sequence and cases where you want to stop after the first match.
2024-11-22 05:02:50 +00:00
..
plugins Perform a regex substitution in the substitute plugin (#5357) 2024-11-22 05:02:50 +00:00
rsrc Update Tekstowo backend to fetch lyrics directly 2024-10-12 02:14:18 +01:00
__init__.py Remove unused imports 2021-08-26 20:59:48 +10:00
conftest.py Introduce integration_test marker and update testing docs 2024-09-21 13:26:05 +01:00
test_art_resize.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_autotag.py Replace OrderedEnum with a builtin IntEnum 2024-09-21 11:59:19 +01:00
test_config_command.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_datequery.py Remove some lint exclusions and fix the issues 2024-09-21 11:59:19 +01:00
test_dbcore.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_files.py Clarify test_unsuccessful_reflink error message 2024-09-05 04:32:13 +01:00
test_hidden.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_importer.py fix #4840 and add to test case 2024-11-06 23:14:47 -05:00
test_library.py Remove _common.album and use Album instead 2024-10-16 12:37:22 +01:00
test_logging.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_m3ufile.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_mb.py Make this test ignore my local beets config 2024-08-12 08:49:30 +01:00
test_metasync.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_pipeline.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_plugins.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_query.py Remove some lint exclusions and fix the issues 2024-09-21 11:59:19 +01:00
test_sort.py Remove _common.album and use Album instead 2024-10-16 12:37:22 +01:00
test_template.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_ui.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_ui_commands.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_ui_importer.py Fix lint issues 2024-09-21 11:59:18 +01:00
test_ui_init.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_util.py Reformat the codebase 2024-09-21 11:57:48 +01:00
test_vfs.py Reformat the codebase 2024-09-21 11:57:48 +01:00
testall.py Remove def suite TestLoader definitions 2024-07-28 18:58:51 +01:00