40 lines
1013 B
Python
40 lines
1013 B
Python
from typing import List
|
|
|
|
from m3u8 import protocol
|
|
from m3u8.version_matching_rules import VersionMatchingError, available_rules
|
|
|
|
|
|
def get_version(file_lines: List[str]):
|
|
for line in file_lines:
|
|
if line.startswith(protocol.ext_x_version):
|
|
version = line.split(":")[1]
|
|
return float(version)
|
|
|
|
return None
|
|
|
|
|
|
def valid_in_all_rules(
|
|
line_number: int, line: str, version: float
|
|
) -> List[VersionMatchingError]:
|
|
errors = []
|
|
for rule in available_rules:
|
|
validator = rule(version, line_number, line)
|
|
|
|
if not validator.validate():
|
|
errors.append(validator.get_error())
|
|
|
|
return errors
|
|
|
|
|
|
def validate(file_lines: List[str]) -> List[VersionMatchingError]:
|
|
found_version = get_version(file_lines)
|
|
if found_version is None:
|
|
return []
|
|
|
|
errors = []
|
|
for number, line in enumerate(file_lines):
|
|
errors_in_line = valid_in_all_rules(number, line, found_version)
|
|
errors.extend(errors_in_line)
|
|
|
|
return errors
|