ServiceAttributeModel
dcmspec.service_attribute_model.ServiceAttributeModel
Bases: SpecModel
A model for DICOM Services with mixed DIMSE and role requirements.
ServiceAttributeModel extends SpecModel to support selection and filtering of attributes and columns based on DIMSE service and role, using a provided mapping. It enables extraction of service- and role-specific attribute sets from tables where multiple DIMSE Services and Roles are combined.
Source code in src/dcmspec/service_attribute_model.py
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 |
|
__init__(metadata, content, dimse_mapping, logger=None)
Initialize the ServiceAttributeModel.
Sets up the model with metadata, content, and a DIMSE mapping for filtering. Initializes the DIMSE and role selection to None.
The dimse_mapping
argument should be a dictionary with the following structure:
{
"ALL_DIMSE": {
"attributes": [<attribute_name>, ...]
},
"<DIMSE>": {
"attributes": [<attribute_name>, ...],
"req_attributes": [<attribute_name>, ...], # optional, for role-based requirements
"req_separator": "<separator>", # optional, e.g. "/"
},
...
}
PARAMETER | DESCRIPTION |
---|---|
metadata
|
Node holding table and document metadata.
TYPE:
|
content
|
Node holding the hierarchical content tree of the DICOM specification.
TYPE:
|
dimse_mapping
|
Dictionary defining DIMSE and role-based attribute requirements.
TYPE:
|
logger
|
Logger instance to use. If None, a default logger is created.
TYPE:
|
Example
UPS_DIMSE_MAPPING = {
"ALL_DIMSE": {
"attributes": [
"dimse_ncreate", "dimse_nset", "dimse_final", "dimse_nget",
"key_matching", "key_return", "type_remark"
]
},
"N-CREATE": {
"attributes": ["dimse_ncreate", "type_remark"],
"req_attributes": ["dimse_ncreate"],
"req_separator": "/"
},
"N-SET": {
"attributes": ["dimse_nset", "type_remark"],
"req_attributes": ["dimse_nset"],
"req_separator": "/"
},
"N-GET": {
"attributes": ["dimse_nget", "type_remark"],
"req_attributes": ["dimse_nget"],
"req_separator": "/"
},
"C-FIND": {
"attributes": ["key_matching", "key_return", "type_remark"],
"req_attributes": ["key_matching", "key_return"]
},
"FINAL": {
"attributes": ["dimse_final", "type_remark"],
"req_attributes": ["dimse_final"]
},
}
model = ServiceAttributeModel(metadata, content, UPS_DIMSE_MAPPING)
Source code in src/dcmspec/service_attribute_model.py
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
|
select_dimse(dimse)
Filter the model to only retain attributes relevant to the specified DIMSE SOP Class.
This method updates the model so that only the attributes required for the selected DIMSE are kept. All other DIMSE-specific attributes are removed from the model, while other attributes not listed in ALL_DIMSE are retained. This enables extraction of a DIMSE-specific attribute set from a combined table. The model's metadata is also updated to reflect the retained attributes.
PARAMETER | DESCRIPTION |
---|---|
dimse
|
The key of DIMSE_MAPPING to select.
TYPE:
|
Source code in src/dcmspec/service_attribute_model.py
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
|
select_role(role)
Filter the model to only retain requirements for a specific role (SCU or SCP) of the selected DIMSE.
This method updates the model so that, for attributes with role-specific requirements (e.g., "SCU/SCP"), only the requirements relevant to the selected role are retained. For example, if a attribute contains "1/2", selecting "SCU" will keep "1" and selecting "SCP" will keep "2". Any additional comments after a newline are preserved in a separate "comment" attribute. The model's metadata is also updated to reflect the changes in attributes.
PARAMETER | DESCRIPTION |
---|---|
role
|
The role to filter for ("SCU" or "SCP").
TYPE:
|
Note
You must call select_dimse() before calling select_role(), or a RuntimeError will be raised.
Note
For DIMSEs that do not have explicit SCU and SCP requirements (i.e., no "req_separator" specified in the mapping), this function may have no effect and will not modify the model.
RAISES | DESCRIPTION |
---|---|
RuntimeError
|
If select_dimse was not called before select_role. |
Source code in src/dcmspec/service_attribute_model.py
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 |
|