Source code for pylas.vlrs.vlr

from abc import ABC, abstractmethod
from typing import BinaryIO


class IVLR(ABC):
    @property
    @abstractmethod
    def user_id(self) -> str:
        ...

    @property
    @abstractmethod
    def record_id(self) -> int:
        ...

    @property
    @abstractmethod
    def description(self) -> str:
        ...

    @abstractmethod
    def record_data_bytes(self) -> bytes:
        ...


class BaseVLR(IVLR, ABC):
    def __init__(self, user_id, record_id, description=""):
        self._user_id = user_id
        self._record_id = record_id
        self._description = description

    @property
    def user_id(self) -> str:
        return self._user_id

    @property
    def record_id(self) -> int:
        return self._record_id

    @property
    def description(self) -> str:
        return self._description


[docs]class VLR(BaseVLR): def __init__(self, user_id, record_id, description="", record_data=b""): super().__init__(user_id, record_id, description=description) #: The record_data as bytes self.record_data = record_data
[docs] def record_data_bytes(self) -> bytes: return self.record_data
@classmethod def read_from(cls, stream: BinaryIO): stream.read(2) user_id = stream.read(16).decode().rstrip("\0") record_id = int.from_bytes(stream.read(2), byteorder="little", signed=False) description = stream.read(16).decode().rstrip("\0") record_length = int.from_bytes(stream.read(2), byteorder="little", signed=False) record_data = stream.read(record_length) vlr = cls(user_id, record_id, description, record_data) return vlr def __eq__(self, other): return ( self.record_id == other.record_id and self.user_id == other.user_id and self.description == other.description and self.record_data == other.record_data ) def __repr__(self): return "<{}(user_id: '{}', record_id: '{}', data len: {})>".format( self.__class__.__name__, self.user_id, self.record_id, len(self.record_data) )