dp3.api.routers.entity ¶
check_etype
async
¶
Middleware to check entity type existence
parse_eid
async
¶
Middleware to parse EID
Source code in dp3/api/routers/entity.py
get_eid_master_record_handler ¶
get_eid_master_record_handler(e: EntityId, date_from: Optional[datetime] = None, date_to: Optional[datetime] = None)
Handler for getting master record of EID
Source code in dp3/api/routers/entity.py
get_eid_snapshots_handler ¶
get_eid_snapshots_handler(e: EntityId, date_from: Optional[datetime] = None, date_to: Optional[datetime] = None) -> list[dict[str, Any]]
Handler for getting snapshots of EID
Source code in dp3/api/routers/entity.py
list_entity_type_eids
async
¶
list_entity_type_eids(etype: str, fulltext_filters: Json = None, generic_filter: Json = None, skip: NonNegativeInt = 0, limit: NonNegativeInt = 20) -> EntityEidList
List latest snapshots of all id
s present in database under etype
.
Deprecated in favor of /entity/{etype}/get
and /entity/{etype}/count
endpoints,
which provide more flexibility and better performance.
See /entity/{etype}/get
for more information.
Source code in dp3/api/routers/entity.py
get_entity_type_eids
async
¶
get_entity_type_eids(etype: str, fulltext_filters: Json = None, generic_filter: Json = None, skip: NonNegativeInt = 0, limit: NonNegativeInt = 20) -> EntityEidList
List latest snapshots of all id
s present in database under etype
.
Contains only latest snapshot.
The total_count
returned is always 0, use /entity/{etype}/count
to get total count.
Uses pagination.
Setting limit
to 0 is interpreted as no limit (return all results).
Returns only documents matching generic_filter
and fulltext_filters
(JSON object in format: attribute - fulltext filter).
Fulltext filters are interpreted as regular expressions.
Only string values may be filtered this way. There's no validation that queried attribute
can be fulltext filtered.
Only plain and observation attributes with string-based data types can be queried.
Array and set data types are supported as well as long as they are not multi value
at the same time.
If you need to filter EIDs, use attribute fulltext_filters["eid"].
Generic filter allows filtering using generic MongoDB query (including $and
, $or
,
$lt
, etc.).
For querying non-JSON-native types, you can use the following magic strings:
"$$IPv4{<ip address>}"
- converts to IPv4Address object"$$IPv6{<ip address>}"
- converts to IPv6Address object"$$int{<value>}"
- may be necessary for filtering wheneid
data type is int"$$Date{<YYYY-mm-ddTHH:MM:ssZ>}"
- converts specified UTC date to UTC datetime object"$$DateTs{<POSIX timestamp>}"
- converts POSIX timestamp (int/float) to UTC datetime object"$$MAC{<mac address>}"
- converts to MACAddress object
To query an IP prefix, use the following magic strings:
"$$IPv4Prefix{<ip address>/<prefix length>}"
- matches prefix"$$IPv6Prefix{<ip address>/<prefix length>}"
- matches prefix
To query a binary _id
s of non-string snapshot buckets,
use the following magic string:
-
"$$Binary_ID{<EID object | Valid magic string>}"
- converts to filter the exact EID object snapshots, only EID valid types are supported
There are no attribute name checks (may be added in the future).
Generic filter examples:
{"attr1": {"$gt": 10}, "attr2": {"$lt": 20}}
{"ip_attr": "$$IPv4{127.0.0.1}"}
- converts to IPv4Address object, exact match-
{"ip_attr": "$$IPv4Prefix{127.0.0.0/24}"}
- converts to
{"ip_attr": {"$gte": "$$IPv4{127.0.0.0}", "$lte": "$$IPv4{127.0.0.255}"}}
- converts to
-
{"ip_attr": "$$IPv6{::1}"}
- converts to IPv6Address object, exact match -
{"ip_attr": "$$IPv6Prefix{::1/64}"}
- converts to
{"ip_attr": {"$gte": "$$IPv6{::1}", "$lte": "$$IPv6{::1:ffff:ffff:ffff:ffff}"}}
- converts to
-
{"_id": "$$Binary_ID{$$IPv4{127.0.0.1}}"}
- converts to
{"_id": {"$gte": Binary(<IP bytes + min timestamp>), "$lt": Binary(<IP bytes + max timestamp>)}}
- converts to
-
{"id": "$$Binary_ID{$$IPv4Prefix{127.0.0.0/24}}"}
- converts to
{"_id": {"$gte": Binary(<IP 127.0.0.0 bytes + min timestamp>), "$lte": Binary(<IP 127.0.0.255 bytes + max timestamp>)}}
- converts to
-
{"_time_created": {"$gte": "$$Date{2024-11-07T00:00:00Z}"}}
- converts to
{"_time_created": datetime(2024, 11, 7, 0, 0, 0, tzinfo=timezone.utc)}
- converts to
-
{"_time_created": {"$gte": "$$DateTs{1609459200}"}}
- converts to
{"_time_created": datetime(2021, 1, 1, 0, 0, 0, tzinfo=timezone.utc)}
- converts to
-
{"attr": "$$MAC{00:11:22:33:44:55}"}
- converts to MACAddress object, exact match {"_id": "$$Binary_ID{$$MAC{Ab-cD-Ef-12-34-56}}"}
- converts to
{"_id": {"$gte": Binary(<MAC bytes + min timestamp>), "$lt": Binary(<MAC bytes + max timestamp>)}}
- converts to
There are no attribute name checks (may be added in the future).
Generic and fulltext filters are merged - fulltext overrides conflicting keys.
Source code in dp3/api/routers/entity.py
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 233 234 235 236 237 238 239 240 241 242 243 244 245 |
|
count_entity_type_eids
async
¶
count_entity_type_eids(etype: str, fulltext_filters: Json = None, generic_filter: Json = None) -> EntityEidCount
Count latest snapshots of all id
s present in database under etype
.
Returns only count of documents matching generic_filter
and fulltext_filters
,
see /entity/{etype}/get
documentation for details.
Note that responses from this endpoint may take much longer than /entity/{etype}/get
for large datasets.
Source code in dp3/api/routers/entity.py
get_eid_data
async
¶
get_eid_data(e: ParsedEid, date_from: Optional[datetime] = None, date_to: Optional[datetime] = None) -> EntityEidData
Get data of etype
's eid
.
Contains all snapshots and master record. Snapshots are ordered by ascending creation time.
Combines function of /{etype}/{eid}/master
and /{etype}/{eid}/snapshots
.
Source code in dp3/api/routers/entity.py
get_eid_master_record
async
¶
get_eid_master_record(e: ParsedEid, date_from: Optional[datetime] = None, date_to: Optional[datetime] = None) -> EntityEidMasterRecord
Get master record of etype
's eid
.
Source code in dp3/api/routers/entity.py
get_eid_snapshots
async
¶
get_eid_snapshots(e: ParsedEid, date_from: Optional[datetime] = None, date_to: Optional[datetime] = None) -> EntityEidSnapshots
Get snapshots of etype
's eid
.
Source code in dp3/api/routers/entity.py
get_eid_attr_value
async
¶
get_eid_attr_value(e: ParsedEid, attr: str, date_from: Optional[datetime] = None, date_to: Optional[datetime] = None) -> EntityEidAttrValueOrHistory
Get attribute value
Value is either of: - current value: in case of plain attribute - current value and history: in case of observation attribute - history: in case of timeseries attribute
Source code in dp3/api/routers/entity.py
set_eid_attr_value
async
¶
set_eid_attr_value(etype: str, eid: str, attr: str, body: EntityEidAttrValue, request: Request) -> SuccessResponse
Set current value of attribute
Internally just creates datapoint for specified attribute and value.
This endpoint is meant for editable
plain attributes -- for direct user edit on DP3 web UI.
Source code in dp3/api/routers/entity.py
get_distinct_attribute_values
async
¶
Gets distinct attribute values and their counts based on latest snapshots
Useful for displaying <select>
enumeration fields.
Works for all plain and observation data types except dict
and json
.
Source code in dp3/api/routers/entity.py
extend_eid_ttls
async
¶
Extend TTLs of the specified entity
Source code in dp3/api/routers/entity.py
delete_eid_record
async
¶
Delete the master record and snapshots of the specified entity.
Notice that this does not delete any raw datapoints, or block the re-creation of the entity if new datapoints are received.