Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-09-01 09:34:30

0001 from dataclasses import dataclass
0002 
0003 
0004 @dataclass(frozen=True)
0005 class DatasetDID:
0006     scope: str
0007     name: str
0008 
0009     @classmethod
0010     def parse(cls, value: str) -> "DatasetDID":
0011         if ":" not in value:
0012             raise ValueError(f"dataset DID must be scope:name, got {value!r}")
0013         scope, name = value.split(":", 1)
0014         if not scope or not name:
0015             raise ValueError(f"invalid dataset DID {value!r}")
0016         return cls(scope=scope, name=name)
0017 
0018     def site_dataset(self, site_name: str, template: str | None = None) -> "DatasetDID":
0019         if not template:
0020             return DatasetDID(scope=self.scope, name=f"{self.name}.{site_name}")
0021         return DatasetDID(
0022             scope=self.scope,
0023             name=template.format(
0024                 run_dataset_name=self.name,
0025                 run_number=self.run_number,
0026                 site_name=site_name,
0027                 site=site_name,
0028             ),
0029         )
0030 
0031     @property
0032     def run_number(self) -> str:
0033         parts = self.name.split(".")
0034         if len(parts) >= 3 and parts[0] == "swf" and parts[-1] == "run":
0035             return parts[1]
0036         raise ValueError(f"cannot derive run number from dataset {self.name!r}")
0037 
0038     def __str__(self) -> str:
0039         return f"{self.scope}:{self.name}"