{"record":{"id":"d43917d7724960fc","repo":"microsoft/qlib","slug":"subclass-of-calendarstorage-must-implement-data","errorCode":null,"errorMessage":"Subclass of CalendarStorage must implement `data` method","messagePattern":"Subclass of CalendarStorage must implement `data` method","errorType":"exception","errorClass":"NotImplementedError","httpStatus":null,"severity":"error","filePath":"qlib/data/storage/storage.py","lineNumber":35,"sourceCode":"InstKT = Text\n\nlogger = get_module_logger(\"storage\")\n\n\"\"\"\nIf the user is only using it in `qlib`, you can customize Storage to implement only the following methods:\n\nclass UserCalendarStorage(CalendarStorage):\n\n    @property\n    def data(self) -> Iterable[CalVT]:\n        '''get all data\n\n        Raises\n        ------\n        ValueError\n            If the data(storage) does not exist, raise ValueError\n        '''\n        raise NotImplementedError(\"Subclass of CalendarStorage must implement `data` method\")\n\n\nclass UserInstrumentStorage(InstrumentStorage):\n\n    @property\n    def data(self) -> Dict[InstKT, InstVT]:\n        '''get all data\n\n        Raises\n        ------\n        ValueError\n            If the data(storage) does not exist, raise ValueError\n        '''\n        raise NotImplementedError(\"Subclass of InstrumentStorage must implement `data` method\")\n\n\nclass UserFeatureStorage(FeatureStorage):\n","sourceCodeStart":17,"sourceCodeEnd":53,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/data/storage/storage.py#L17-L53","documentation":"Error \"Subclass of CalendarStorage must implement `data` method\" thrown in microsoft/qlib.","triggerScenarios":"This error is raised at qlib/data/storage/storage.py:35 when the guard condition fails: \"Subclass of CalendarStorage must implement `data` method\". It triggers when the code path receives input or a state that violates the precondition checked at this point — e.g. an unimplemented abstract method being called, an unsupported argument type/value, or an invalid configuration. To avoid it, satisfy the documented precondition before this call: implement the required method in your subclass, or pass a supported value of the expected type as described by the message.","commonSituations":"See trigger scenarios.","solutions":["Implement the `data` method in your CalendarStorage subclass.","Use the built-in FileCalendarStorage which implements `data`."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}