datanommer.models 1.3.0__tar.gz → 1.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/NEWS.rst +17 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/PKG-INFO +1 -1
- datanommer_models-1.4.0/coverage.xml +266 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/datanommer/models/__init__.py +38 -11
- datanommer_models-1.4.0/datanommer/models/alembic/versions/429e6f2cba6f_message_agent_name.py +24 -0
- datanommer_models-1.4.0/datanommer/models/alembic/versions/f6918385051f_messages_headers_index.py +29 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/pyproject.toml +2 -2
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/tests/test_model.py +59 -1
- datanommer_models-1.3.0/coverage.xml +0 -255
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/LICENSE +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/README.rst +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/alembic.ini +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/datanommer/models/alembic/env.py +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/datanommer/models/alembic/script.py.mako +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/datanommer/models/alembic/versions/5db25abc63be_init.py +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/datanommer/models/alembic/versions/951c40020acc_unique.py +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/datanommer/models/testing/__init__.py +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/tests/conftest.py +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/tests/test_jsonencodeddict.py +0 -0
- {datanommer_models-1.3.0 → datanommer_models-1.4.0}/tox.ini +0 -0
@@ -6,6 +6,23 @@ For ``datanommer.models``
|
|
6
6
|
|
7
7
|
.. towncrier release notes start
|
8
8
|
|
9
|
+
v1.4.0
|
10
|
+
======
|
11
|
+
|
12
|
+
Released on 2024-06-12.
|
13
|
+
|
14
|
+
Features
|
15
|
+
^^^^^^^^
|
16
|
+
|
17
|
+
* Rename the unused `username` column to `agent_name` and use it to store the agent name (`#1309 <https://github.com/fedora-infra/datanommer/issues/1309>`_)
|
18
|
+
* Add a JSON index on the message headers
|
19
|
+
|
20
|
+
Bug Fixes
|
21
|
+
^^^^^^^^^
|
22
|
+
|
23
|
+
* Fix the `get_first()` query to actually return only one message
|
24
|
+
|
25
|
+
|
9
26
|
v1.3.0
|
10
27
|
======
|
11
28
|
|
@@ -0,0 +1,266 @@
|
|
1
|
+
<?xml version="1.0" ?>
|
2
|
+
<coverage version="7.5.3" timestamp="1717783023237" lines-valid="247" lines-covered="247" line-rate="1" branches-valid="118" branches-covered="118" branch-rate="1" complexity="0">
|
3
|
+
<!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.5.3 -->
|
4
|
+
<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
|
5
|
+
<sources>
|
6
|
+
<source>/home/abompard/Fedora/apps/datanommer/datanommer.models/datanommer</source>
|
7
|
+
</sources>
|
8
|
+
<packages>
|
9
|
+
<package name="models" line-rate="1" branch-rate="1" complexity="0">
|
10
|
+
<classes>
|
11
|
+
<class name="__init__.py" filename="models/__init__.py" complexity="0" line-rate="1" branch-rate="1">
|
12
|
+
<methods/>
|
13
|
+
<lines>
|
14
|
+
<line number="16" hits="1"/>
|
15
|
+
<line number="17" hits="1"/>
|
16
|
+
<line number="18" hits="1"/>
|
17
|
+
<line number="19" hits="1"/>
|
18
|
+
<line number="20" hits="1"/>
|
19
|
+
<line number="21" hits="1"/>
|
20
|
+
<line number="22" hits="1"/>
|
21
|
+
<line number="23" hits="1"/>
|
22
|
+
<line number="25" hits="1"/>
|
23
|
+
<line number="48" hits="1"/>
|
24
|
+
<line number="49" hits="1"/>
|
25
|
+
<line number="50" hits="1"/>
|
26
|
+
<line number="57" hits="1"/>
|
27
|
+
<line number="60" hits="1"/>
|
28
|
+
<line number="61" hits="1"/>
|
29
|
+
<line number="68" hits="1"/>
|
30
|
+
<line number="71" hits="1"/>
|
31
|
+
<line number="73" hits="1"/>
|
32
|
+
<line number="74" hits="1"/>
|
33
|
+
<line number="76" hits="1"/>
|
34
|
+
<line number="77" hits="1"/>
|
35
|
+
<line number="80" hits="1"/>
|
36
|
+
<line number="83" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
37
|
+
<line number="84" hits="1"/>
|
38
|
+
<line number="86" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
39
|
+
<line number="87" hits="1"/>
|
40
|
+
<line number="89" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
41
|
+
<line number="90" hits="1"/>
|
42
|
+
<line number="95" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
43
|
+
<line number="96" hits="1"/>
|
44
|
+
<line number="97" hits="1"/>
|
45
|
+
<line number="98" hits="1"/>
|
46
|
+
<line number="100" hits="1"/>
|
47
|
+
<line number="101" hits="1"/>
|
48
|
+
<line number="103" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
49
|
+
<line number="104" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
50
|
+
<line number="105" hits="1"/>
|
51
|
+
<line number="106" hits="1"/>
|
52
|
+
<line number="117" hits="1"/>
|
53
|
+
<line number="121" hits="1"/>
|
54
|
+
<line number="122" hits="1"/>
|
55
|
+
<line number="124" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
56
|
+
<line number="127" hits="1"/>
|
57
|
+
<line number="128" hits="1"/>
|
58
|
+
<line number="129" hits="1"/>
|
59
|
+
<line number="130" hits="1"/>
|
60
|
+
<line number="131" hits="1"/>
|
61
|
+
<line number="133" hits="1"/>
|
62
|
+
<line number="136" hits="1"/>
|
63
|
+
<line number="137" hits="1"/>
|
64
|
+
<line number="138" hits="1"/>
|
65
|
+
<line number="139" hits="1"/>
|
66
|
+
<line number="144" hits="1"/>
|
67
|
+
<line number="145" hits="1"/>
|
68
|
+
<line number="146" hits="1"/>
|
69
|
+
<line number="147" hits="1"/>
|
70
|
+
<line number="148" hits="1"/>
|
71
|
+
<line number="153" hits="1"/>
|
72
|
+
<line number="155" hits="1"/>
|
73
|
+
<line number="167" hits="1"/>
|
74
|
+
<line number="173" hits="1"/>
|
75
|
+
<line number="176" hits="1"/>
|
76
|
+
<line number="178" hits="1"/>
|
77
|
+
<line number="180" hits="1"/>
|
78
|
+
<line number="181" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
79
|
+
<line number="182" hits="1"/>
|
80
|
+
<line number="184" hits="1"/>
|
81
|
+
<line number="186" hits="1"/>
|
82
|
+
<line number="187" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
83
|
+
<line number="188" hits="1"/>
|
84
|
+
<line number="189" hits="1"/>
|
85
|
+
<line number="191" hits="1"/>
|
86
|
+
<line number="193" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
87
|
+
<line number="194" hits="1"/>
|
88
|
+
<line number="196" hits="1"/>
|
89
|
+
<line number="199" hits="1"/>
|
90
|
+
<line number="207" hits="1"/>
|
91
|
+
<line number="216" hits="1"/>
|
92
|
+
<line number="217" hits="1"/>
|
93
|
+
<line number="218" hits="1"/>
|
94
|
+
<line number="228" hits="1"/>
|
95
|
+
<line number="229" hits="1"/>
|
96
|
+
<line number="230" hits="1"/>
|
97
|
+
<line number="231" hits="1"/>
|
98
|
+
<line number="232" hits="1"/>
|
99
|
+
<line number="233" hits="1"/>
|
100
|
+
<line number="234" hits="1"/>
|
101
|
+
<line number="235" hits="1"/>
|
102
|
+
<line number="236" hits="1"/>
|
103
|
+
<line number="237" hits="1"/>
|
104
|
+
<line number="238" hits="1"/>
|
105
|
+
<line number="239" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
106
|
+
<line number="240" hits="1"/>
|
107
|
+
<line number="241" hits="1"/>
|
108
|
+
<line number="242" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
109
|
+
<line number="251" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
110
|
+
<line number="261" hits="1"/>
|
111
|
+
<line number="262" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
112
|
+
<line number="268" hits="1"/>
|
113
|
+
<line number="269" hits="1"/>
|
114
|
+
<line number="270" hits="1"/>
|
115
|
+
<line number="271" hits="1"/>
|
116
|
+
<line number="272" hits="1"/>
|
117
|
+
<line number="273" hits="1"/>
|
118
|
+
<line number="274" hits="1"/>
|
119
|
+
<line number="276" hits="1"/>
|
120
|
+
<line number="277" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
121
|
+
<line number="278" hits="1"/>
|
122
|
+
<line number="279" hits="1"/>
|
123
|
+
<line number="280" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
124
|
+
<line number="281" hits="1"/>
|
125
|
+
<line number="282" hits="1"/>
|
126
|
+
<line number="283" hits="1"/>
|
127
|
+
<line number="285" hits="1"/>
|
128
|
+
<line number="286" hits="1"/>
|
129
|
+
<line number="287" hits="1"/>
|
130
|
+
<line number="288" hits="1"/>
|
131
|
+
<line number="289" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
132
|
+
<line number="290" hits="1"/>
|
133
|
+
<line number="296" hits="1"/>
|
134
|
+
<line number="301" hits="1"/>
|
135
|
+
<line number="302" hits="1"/>
|
136
|
+
<line number="304" hits="1"/>
|
137
|
+
<line number="305" hits="1"/>
|
138
|
+
<line number="307" hits="1"/>
|
139
|
+
<line number="308" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
140
|
+
<line number="309" hits="1"/>
|
141
|
+
<line number="310" hits="1"/>
|
142
|
+
<line number="311" hits="1"/>
|
143
|
+
<line number="312" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
144
|
+
<line number="313" hits="1"/>
|
145
|
+
<line number="317" hits="1"/>
|
146
|
+
<line number="324" hits="1"/>
|
147
|
+
<line number="325" hits="1"/>
|
148
|
+
<line number="327" hits="1"/>
|
149
|
+
<line number="328" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
150
|
+
<line number="329" hits="1"/>
|
151
|
+
<line number="331" hits="1"/>
|
152
|
+
<line number="332" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
153
|
+
<line number="350" hits="1"/>
|
154
|
+
<line number="351" hits="1"/>
|
155
|
+
<line number="352" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
156
|
+
<line number="353" hits="1"/>
|
157
|
+
<line number="354" hits="1"/>
|
158
|
+
<line number="363" hits="1"/>
|
159
|
+
<line number="364" hits="1"/>
|
160
|
+
<line number="370" hits="1"/>
|
161
|
+
<line number="372" hits="1"/>
|
162
|
+
<line number="373" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
163
|
+
<line number="374" hits="1"/>
|
164
|
+
<line number="380" hits="1"/>
|
165
|
+
<line number="382" hits="1"/>
|
166
|
+
<line number="383" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
167
|
+
<line number="429" hits="1"/>
|
168
|
+
<line number="430" hits="1"/>
|
169
|
+
<line number="431" hits="1"/>
|
170
|
+
<line number="432" hits="1"/>
|
171
|
+
<line number="433" hits="1"/>
|
172
|
+
<line number="434" hits="1"/>
|
173
|
+
<line number="435" hits="1"/>
|
174
|
+
<line number="436" hits="1"/>
|
175
|
+
<line number="437" hits="1"/>
|
176
|
+
<line number="438" hits="1"/>
|
177
|
+
<line number="439" hits="1"/>
|
178
|
+
<line number="441" hits="1"/>
|
179
|
+
<line number="442" hits="1"/>
|
180
|
+
<line number="446" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
181
|
+
<line number="447" hits="1"/>
|
182
|
+
<line number="451" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
183
|
+
<line number="452" hits="1"/>
|
184
|
+
<line number="454" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
185
|
+
<line number="455" hits="1"/>
|
186
|
+
<line number="458" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
187
|
+
<line number="459" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
188
|
+
<line number="461" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
189
|
+
<line number="462" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
190
|
+
<line number="464" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
191
|
+
<line number="465" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
192
|
+
<line number="467" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
193
|
+
<line number="468" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
194
|
+
<line number="470" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
195
|
+
<line number="471" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
196
|
+
<line number="473" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
197
|
+
<line number="474" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
198
|
+
<line number="477" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
199
|
+
<line number="478" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
200
|
+
<line number="480" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
201
|
+
<line number="481" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
202
|
+
<line number="485" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
203
|
+
<line number="486" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
204
|
+
<line number="488" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
205
|
+
<line number="489" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
206
|
+
<line number="491" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
207
|
+
<line number="492" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
208
|
+
<line number="494" hits="1"/>
|
209
|
+
<line number="495" hits="1"/>
|
210
|
+
<line number="497" hits="1"/>
|
211
|
+
<line number="498" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
212
|
+
<line number="539" hits="1"/>
|
213
|
+
<line number="541" hits="1"/>
|
214
|
+
<line number="543" hits="1"/>
|
215
|
+
<line number="544" hits="1"/>
|
216
|
+
<line number="545" hits="1"/>
|
217
|
+
<line number="547" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
218
|
+
<line number="548" hits="1"/>
|
219
|
+
<line number="550" hits="1"/>
|
220
|
+
<line number="551" hits="1"/>
|
221
|
+
<line number="552" hits="1"/>
|
222
|
+
<line number="554" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
223
|
+
<line number="555" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
224
|
+
<line number="556" hits="1"/>
|
225
|
+
<line number="557" hits="1"/>
|
226
|
+
<line number="560" hits="1"/>
|
227
|
+
<line number="561" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
228
|
+
<line number="562" hits="1"/>
|
229
|
+
<line number="563" hits="1"/>
|
230
|
+
<line number="565" hits="1"/>
|
231
|
+
<line number="566" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
232
|
+
<line number="568" hits="1"/>
|
233
|
+
<line number="569" hits="1"/>
|
234
|
+
<line number="570" hits="1"/>
|
235
|
+
<line number="573" hits="1"/>
|
236
|
+
<line number="574" hits="1"/>
|
237
|
+
<line number="575" hits="1"/>
|
238
|
+
<line number="577" hits="1"/>
|
239
|
+
<line number="578" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
240
|
+
<line number="584" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
241
|
+
<line number="587" hits="1"/>
|
242
|
+
<line number="588" hits="1"/>
|
243
|
+
<line number="589" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
244
|
+
<line number="590" hits="1"/>
|
245
|
+
<line number="591" hits="1"/>
|
246
|
+
<line number="592" hits="1"/>
|
247
|
+
<line number="593" hits="1"/>
|
248
|
+
<line number="594" hits="1"/>
|
249
|
+
<line number="596" hits="1"/>
|
250
|
+
<line number="597" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
251
|
+
<line number="598" hits="1"/>
|
252
|
+
<line number="601" hits="1"/>
|
253
|
+
<line number="602" hits="1"/>
|
254
|
+
<line number="603" hits="1"/>
|
255
|
+
<line number="606" hits="1"/>
|
256
|
+
<line number="607" hits="1"/>
|
257
|
+
<line number="608" hits="1"/>
|
258
|
+
<line number="611" hits="1"/>
|
259
|
+
<line number="612" hits="1"/>
|
260
|
+
<line number="619" hits="1"/>
|
261
|
+
</lines>
|
262
|
+
</class>
|
263
|
+
</classes>
|
264
|
+
</package>
|
265
|
+
</packages>
|
266
|
+
</coverage>
|
@@ -32,6 +32,7 @@ from sqlalchemy import (
|
|
32
32
|
event,
|
33
33
|
ForeignKey,
|
34
34
|
func,
|
35
|
+
Index,
|
35
36
|
Integer,
|
36
37
|
not_,
|
37
38
|
or_,
|
@@ -158,6 +159,7 @@ def add(message):
|
|
158
159
|
timestamp=sent_at,
|
159
160
|
msg=message.body,
|
160
161
|
headers=headers,
|
162
|
+
agent_name=getattr(message, "agent_name", None),
|
161
163
|
users=usernames,
|
162
164
|
packages=packages,
|
163
165
|
)
|
@@ -213,7 +215,15 @@ packages_assoc_table = Table(
|
|
213
215
|
|
214
216
|
class Message(DeclarativeBase):
|
215
217
|
__tablename__ = "messages"
|
216
|
-
__table_args__ = (
|
218
|
+
__table_args__ = (
|
219
|
+
UniqueConstraint("msg_id", "timestamp"),
|
220
|
+
Index(
|
221
|
+
"ix_messages_headers",
|
222
|
+
"headers",
|
223
|
+
postgresql_using="gin",
|
224
|
+
postgresql_ops={"headers": "jsonb_path_ops"},
|
225
|
+
),
|
226
|
+
)
|
217
227
|
|
218
228
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
219
229
|
msg_id = Column(Unicode, nullable=True, default=None, index=True)
|
@@ -223,7 +233,7 @@ class Message(DeclarativeBase):
|
|
223
233
|
certificate = Column(UnicodeText)
|
224
234
|
signature = Column(UnicodeText)
|
225
235
|
category = Column(Unicode, nullable=False, index=True)
|
226
|
-
|
236
|
+
agent_name = Column(Unicode, index=True)
|
227
237
|
crypto = Column(UnicodeText)
|
228
238
|
source_name = Column(Unicode, default="datanommer")
|
229
239
|
source_version = Column(Unicode, default=lambda context: __version__)
|
@@ -326,7 +336,8 @@ class Message(DeclarativeBase):
|
|
326
336
|
timestamp=self.timestamp,
|
327
337
|
certificate=self.certificate,
|
328
338
|
signature=self.signature,
|
329
|
-
|
339
|
+
agent_name=self.agent_name,
|
340
|
+
username=self.agent_name, # DEPRECATED
|
330
341
|
crypto=self.crypto,
|
331
342
|
msg=self.msg,
|
332
343
|
headers=self.headers,
|
@@ -358,6 +369,16 @@ class Message(DeclarativeBase):
|
|
358
369
|
)
|
359
370
|
return self.as_dict(request)
|
360
371
|
|
372
|
+
@property
|
373
|
+
def username(self):
|
374
|
+
warn(
|
375
|
+
"The username attribute has been renamed to agent_name, and will be removed "
|
376
|
+
"in the next major version",
|
377
|
+
DeprecationWarning,
|
378
|
+
stacklevel=2,
|
379
|
+
)
|
380
|
+
return self.agent_name
|
381
|
+
|
361
382
|
@classmethod
|
362
383
|
def make_query(
|
363
384
|
cls,
|
@@ -372,6 +393,8 @@ class Message(DeclarativeBase):
|
|
372
393
|
not_categories=None,
|
373
394
|
topics=None,
|
374
395
|
not_topics=None,
|
396
|
+
agents=None,
|
397
|
+
not_agents=None,
|
375
398
|
contains=None,
|
376
399
|
):
|
377
400
|
"""Flexible query interface for messages.
|
@@ -400,6 +423,7 @@ class Message(DeclarativeBase):
|
|
400
423
|
|
401
424
|
(user == 'ralph') AND
|
402
425
|
NOT (category == 'bodhi' OR category == 'wiki')
|
426
|
+
|
403
427
|
"""
|
404
428
|
|
405
429
|
users = users or []
|
@@ -410,6 +434,8 @@ class Message(DeclarativeBase):
|
|
410
434
|
not_cats = not_categories or []
|
411
435
|
topics = topics or []
|
412
436
|
not_topics = not_topics or []
|
437
|
+
agents = agents or []
|
438
|
+
not_agents = not_agents or []
|
413
439
|
contains = contains or []
|
414
440
|
|
415
441
|
Message = cls
|
@@ -441,6 +467,9 @@ class Message(DeclarativeBase):
|
|
441
467
|
if topics:
|
442
468
|
query = query.where(or_(*(Message.topic == topic for topic in topics)))
|
443
469
|
|
470
|
+
if agents:
|
471
|
+
query = query.where(or_(*(Message.agent_name == agent for agent in agents)))
|
472
|
+
|
444
473
|
if contains:
|
445
474
|
query = query.where(or_(*(Message.msg.like(f"%{contain}%") for contain in contains)))
|
446
475
|
|
@@ -459,6 +488,9 @@ class Message(DeclarativeBase):
|
|
459
488
|
if not_topics:
|
460
489
|
query = query.where(not_(or_(*(Message.topic == topic for topic in not_topics))))
|
461
490
|
|
491
|
+
if not_agents:
|
492
|
+
query = query.where(not_(or_(*(Message.agent_name == agent for agent in not_agents))))
|
493
|
+
|
462
494
|
return query
|
463
495
|
|
464
496
|
@classmethod
|
@@ -500,13 +532,8 @@ class Message(DeclarativeBase):
|
|
500
532
|
|
501
533
|
----
|
502
534
|
|
503
|
-
|
504
|
-
|
505
|
-
<https://www.postgresql.org/docs/current/functions-json.html#FUNCTIONS-SQLJSON-PATH>`_
|
506
|
-
on the matter to learn how to build the jsonpath expression.
|
507
|
-
|
508
|
-
The ``jsons_and`` argument is similar to the ``jsons`` argument, but all
|
509
|
-
the values must match for a message to be returned.
|
535
|
+
If the `defer` argument evaluates to True, the query won't actually
|
536
|
+
be executed, but a SQLAlchemy query object returned instead.
|
510
537
|
"""
|
511
538
|
query = cls.make_query(**kwargs)
|
512
539
|
# Finally, tag on our pagination arguments
|
@@ -538,7 +565,7 @@ class Message(DeclarativeBase):
|
|
538
565
|
def get_first(cls, *, order="asc", **kwargs):
|
539
566
|
"""Get the first message matching the regular grep filters."""
|
540
567
|
query = cls.make_query(**kwargs)
|
541
|
-
query = query.order_by(getattr(Message.timestamp, order)())
|
568
|
+
query = query.order_by(getattr(Message.timestamp, order)()).limit(1)
|
542
569
|
return session.scalars(query).first()
|
543
570
|
|
544
571
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"""Message.username → Message.agent_name
|
2
|
+
|
3
|
+
Revision ID: 429e6f2cba6f
|
4
|
+
Revises: 951c40020acc
|
5
|
+
Create Date: 2024-06-07 09:12:33.393757
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
from alembic import op
|
10
|
+
|
11
|
+
|
12
|
+
# revision identifiers, used by Alembic.
|
13
|
+
revision = "429e6f2cba6f"
|
14
|
+
down_revision = "f6918385051f"
|
15
|
+
|
16
|
+
|
17
|
+
def upgrade():
|
18
|
+
op.alter_column("messages", "username", new_column_name="agent_name")
|
19
|
+
op.create_index(op.f("ix_messages_agent_name"), "messages", ["agent_name"], unique=False)
|
20
|
+
|
21
|
+
|
22
|
+
def downgrade():
|
23
|
+
op.drop_index(op.f("ix_messages_agent_name"), table_name="messages")
|
24
|
+
op.alter_column("messages", "agent_name", new_column_name="username")
|
datanommer_models-1.4.0/datanommer/models/alembic/versions/f6918385051f_messages_headers_index.py
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
"""Messages.headers index
|
2
|
+
|
3
|
+
Revision ID: f6918385051f
|
4
|
+
Revises: 951c40020acc
|
5
|
+
Create Date: 2024-05-07 16:05:05.344863
|
6
|
+
|
7
|
+
"""
|
8
|
+
|
9
|
+
from alembic import op
|
10
|
+
|
11
|
+
|
12
|
+
# revision identifiers, used by Alembic.
|
13
|
+
revision = "f6918385051f"
|
14
|
+
down_revision = "951c40020acc"
|
15
|
+
|
16
|
+
|
17
|
+
def upgrade():
|
18
|
+
op.create_index(
|
19
|
+
"ix_messages_headers",
|
20
|
+
"messages",
|
21
|
+
["headers"],
|
22
|
+
unique=False,
|
23
|
+
postgresql_using="gin",
|
24
|
+
postgresql_ops={"headers": "jsonb_path_ops"},
|
25
|
+
)
|
26
|
+
|
27
|
+
|
28
|
+
def downgrade():
|
29
|
+
op.drop_index("ix_messages_headers", table_name="messages", postgresql_using="gin")
|
@@ -1,6 +1,6 @@
|
|
1
1
|
[tool.poetry]
|
2
2
|
name = "datanommer.models"
|
3
|
-
version = "1.
|
3
|
+
version = "1.4.0"
|
4
4
|
description = "SQLAlchemy models for datanommer"
|
5
5
|
authors = [
|
6
6
|
"Fedora Infrastructure <admin@fedoraproject.org>"
|
@@ -110,7 +110,7 @@ title_format = "v{version}"
|
|
110
110
|
issue_format = "{issue}"
|
111
111
|
template = "../tools/towncrier/template.rst.j2"
|
112
112
|
underlines = "=^-"
|
113
|
-
wrap =
|
113
|
+
wrap = false
|
114
114
|
all_bullets = true
|
115
115
|
|
116
116
|
[[tool.towncrier.type]]
|
@@ -345,6 +345,55 @@ def test_grep_msg_id(datanommer_models):
|
|
345
345
|
assert len(messages) == 0
|
346
346
|
|
347
347
|
|
348
|
+
def test_grep_agents(datanommer_models):
|
349
|
+
example_message = generate_message()
|
350
|
+
dm.add(example_message)
|
351
|
+
|
352
|
+
bodhi_example_message = generate_bodhi_update_complete_message()
|
353
|
+
dm.add(bodhi_example_message)
|
354
|
+
|
355
|
+
dm.session.flush()
|
356
|
+
|
357
|
+
total, pages, messages = dm.Message.grep(agents=["dudemcpants"])
|
358
|
+
|
359
|
+
assert total == 1
|
360
|
+
assert pages == 1
|
361
|
+
assert len(messages) == 1
|
362
|
+
|
363
|
+
assert messages[0].msg == bodhi_example_message.body
|
364
|
+
|
365
|
+
|
366
|
+
def test_grep_not_agents(datanommer_models, mocker):
|
367
|
+
example_message = generate_message() # has agent_name == None
|
368
|
+
dm.add(example_message)
|
369
|
+
|
370
|
+
bodhi_example_message = generate_bodhi_update_complete_message()
|
371
|
+
dm.add(bodhi_example_message) # has agent_name == "dudemcpants"
|
372
|
+
|
373
|
+
class MessageWithAgent(fedora_message.Message):
|
374
|
+
topic = "org.fedoraproject.test.a.message.with.agent"
|
375
|
+
agent_name = "dummy-agent-name"
|
376
|
+
|
377
|
+
fedora_message._schema_name_to_class["MessageWithAgent"] = MessageWithAgent
|
378
|
+
fedora_message._class_to_schema_name[MessageWithAgent] = "MessageWithAgent"
|
379
|
+
|
380
|
+
example_message_with_agent = MessageWithAgent(
|
381
|
+
body={"subject": "this is a message with an agent"}
|
382
|
+
)
|
383
|
+
dm.add(example_message_with_agent)
|
384
|
+
|
385
|
+
dm.session.flush()
|
386
|
+
|
387
|
+
total, pages, messages = dm.Message.grep(not_agents=["dudemcpants"])
|
388
|
+
|
389
|
+
# Messages with agent_name == None are not returned
|
390
|
+
assert total == 1
|
391
|
+
assert pages == 1
|
392
|
+
assert len(messages) == 1
|
393
|
+
|
394
|
+
assert messages[0].msg == example_message_with_agent.body
|
395
|
+
|
396
|
+
|
348
397
|
def test_grep_users(datanommer_models):
|
349
398
|
example_message = generate_message()
|
350
399
|
dm.add(example_message)
|
@@ -617,7 +666,7 @@ def test_as_dict(datanommer_models):
|
|
617
666
|
message_dict = dbmsg.as_dict()
|
618
667
|
|
619
668
|
# we should have 14 keys in this dict
|
620
|
-
assert len(message_dict) ==
|
669
|
+
assert len(message_dict) == 15
|
621
670
|
assert message_dict["msg"] == {"encouragement": "You're doing great!"}
|
622
671
|
assert message_dict["topic"] == "org.fedoraproject.test.a.nice.message"
|
623
672
|
|
@@ -643,6 +692,15 @@ def test___json__deprecated(datanommer_models, caplog, mocker):
|
|
643
692
|
mock_as_dict.assert_called_once()
|
644
693
|
|
645
694
|
|
695
|
+
def test_username_deprecated(datanommer_models, caplog, mocker):
|
696
|
+
dm.add(generate_message())
|
697
|
+
dbmsg = dm.session.scalar(select(dm.Message))
|
698
|
+
dbmsg.agent_name = "dummy"
|
699
|
+
|
700
|
+
with pytest.warns(DeprecationWarning):
|
701
|
+
assert dbmsg.username == "dummy"
|
702
|
+
|
703
|
+
|
646
704
|
def test_singleton_create(datanommer_models):
|
647
705
|
dm.Package.get_or_create("foobar")
|
648
706
|
assert [p.name for p in dm.session.scalars(select(dm.Package))] == ["foobar"]
|
@@ -1,255 +0,0 @@
|
|
1
|
-
<?xml version="1.0" ?>
|
2
|
-
<coverage version="7.5.1" timestamp="1716382532447" lines-valid="236" lines-covered="236" line-rate="1" branches-valid="108" branches-covered="108" branch-rate="1" complexity="0">
|
3
|
-
<!-- Generated by coverage.py: https://coverage.readthedocs.io/en/7.5.1 -->
|
4
|
-
<!-- Based on https://raw.githubusercontent.com/cobertura/web/master/htdocs/xml/coverage-04.dtd -->
|
5
|
-
<sources>
|
6
|
-
<source>/home/abompard/Fedora/apps/datanommer/datanommer.models/datanommer</source>
|
7
|
-
</sources>
|
8
|
-
<packages>
|
9
|
-
<package name="models" line-rate="1" branch-rate="1" complexity="0">
|
10
|
-
<classes>
|
11
|
-
<class name="__init__.py" filename="models/__init__.py" complexity="0" line-rate="1" branch-rate="1">
|
12
|
-
<methods/>
|
13
|
-
<lines>
|
14
|
-
<line number="16" hits="1"/>
|
15
|
-
<line number="17" hits="1"/>
|
16
|
-
<line number="18" hits="1"/>
|
17
|
-
<line number="19" hits="1"/>
|
18
|
-
<line number="20" hits="1"/>
|
19
|
-
<line number="21" hits="1"/>
|
20
|
-
<line number="22" hits="1"/>
|
21
|
-
<line number="23" hits="1"/>
|
22
|
-
<line number="25" hits="1"/>
|
23
|
-
<line number="47" hits="1"/>
|
24
|
-
<line number="48" hits="1"/>
|
25
|
-
<line number="49" hits="1"/>
|
26
|
-
<line number="56" hits="1"/>
|
27
|
-
<line number="59" hits="1"/>
|
28
|
-
<line number="60" hits="1"/>
|
29
|
-
<line number="67" hits="1"/>
|
30
|
-
<line number="70" hits="1"/>
|
31
|
-
<line number="72" hits="1"/>
|
32
|
-
<line number="73" hits="1"/>
|
33
|
-
<line number="75" hits="1"/>
|
34
|
-
<line number="76" hits="1"/>
|
35
|
-
<line number="79" hits="1"/>
|
36
|
-
<line number="82" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
37
|
-
<line number="83" hits="1"/>
|
38
|
-
<line number="85" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
39
|
-
<line number="86" hits="1"/>
|
40
|
-
<line number="88" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
41
|
-
<line number="89" hits="1"/>
|
42
|
-
<line number="94" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
43
|
-
<line number="95" hits="1"/>
|
44
|
-
<line number="96" hits="1"/>
|
45
|
-
<line number="97" hits="1"/>
|
46
|
-
<line number="99" hits="1"/>
|
47
|
-
<line number="100" hits="1"/>
|
48
|
-
<line number="102" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
49
|
-
<line number="103" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
50
|
-
<line number="104" hits="1"/>
|
51
|
-
<line number="105" hits="1"/>
|
52
|
-
<line number="116" hits="1"/>
|
53
|
-
<line number="120" hits="1"/>
|
54
|
-
<line number="121" hits="1"/>
|
55
|
-
<line number="123" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
56
|
-
<line number="126" hits="1"/>
|
57
|
-
<line number="127" hits="1"/>
|
58
|
-
<line number="128" hits="1"/>
|
59
|
-
<line number="129" hits="1"/>
|
60
|
-
<line number="130" hits="1"/>
|
61
|
-
<line number="132" hits="1"/>
|
62
|
-
<line number="135" hits="1"/>
|
63
|
-
<line number="136" hits="1"/>
|
64
|
-
<line number="137" hits="1"/>
|
65
|
-
<line number="138" hits="1"/>
|
66
|
-
<line number="143" hits="1"/>
|
67
|
-
<line number="144" hits="1"/>
|
68
|
-
<line number="145" hits="1"/>
|
69
|
-
<line number="146" hits="1"/>
|
70
|
-
<line number="147" hits="1"/>
|
71
|
-
<line number="152" hits="1"/>
|
72
|
-
<line number="154" hits="1"/>
|
73
|
-
<line number="165" hits="1"/>
|
74
|
-
<line number="171" hits="1"/>
|
75
|
-
<line number="174" hits="1"/>
|
76
|
-
<line number="176" hits="1"/>
|
77
|
-
<line number="178" hits="1"/>
|
78
|
-
<line number="179" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
79
|
-
<line number="180" hits="1"/>
|
80
|
-
<line number="182" hits="1"/>
|
81
|
-
<line number="184" hits="1"/>
|
82
|
-
<line number="185" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
83
|
-
<line number="186" hits="1"/>
|
84
|
-
<line number="187" hits="1"/>
|
85
|
-
<line number="189" hits="1"/>
|
86
|
-
<line number="191" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
87
|
-
<line number="192" hits="1"/>
|
88
|
-
<line number="194" hits="1"/>
|
89
|
-
<line number="197" hits="1"/>
|
90
|
-
<line number="205" hits="1"/>
|
91
|
-
<line number="214" hits="1"/>
|
92
|
-
<line number="215" hits="1"/>
|
93
|
-
<line number="216" hits="1"/>
|
94
|
-
<line number="218" hits="1"/>
|
95
|
-
<line number="219" hits="1"/>
|
96
|
-
<line number="220" hits="1"/>
|
97
|
-
<line number="221" hits="1"/>
|
98
|
-
<line number="222" hits="1"/>
|
99
|
-
<line number="223" hits="1"/>
|
100
|
-
<line number="224" hits="1"/>
|
101
|
-
<line number="225" hits="1"/>
|
102
|
-
<line number="226" hits="1"/>
|
103
|
-
<line number="227" hits="1"/>
|
104
|
-
<line number="228" hits="1"/>
|
105
|
-
<line number="229" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
106
|
-
<line number="230" hits="1"/>
|
107
|
-
<line number="231" hits="1"/>
|
108
|
-
<line number="232" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
109
|
-
<line number="241" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
110
|
-
<line number="251" hits="1"/>
|
111
|
-
<line number="252" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
112
|
-
<line number="258" hits="1"/>
|
113
|
-
<line number="259" hits="1"/>
|
114
|
-
<line number="260" hits="1"/>
|
115
|
-
<line number="261" hits="1"/>
|
116
|
-
<line number="262" hits="1"/>
|
117
|
-
<line number="263" hits="1"/>
|
118
|
-
<line number="264" hits="1"/>
|
119
|
-
<line number="266" hits="1"/>
|
120
|
-
<line number="267" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
121
|
-
<line number="268" hits="1"/>
|
122
|
-
<line number="269" hits="1"/>
|
123
|
-
<line number="270" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
124
|
-
<line number="271" hits="1"/>
|
125
|
-
<line number="272" hits="1"/>
|
126
|
-
<line number="273" hits="1"/>
|
127
|
-
<line number="275" hits="1"/>
|
128
|
-
<line number="276" hits="1"/>
|
129
|
-
<line number="277" hits="1"/>
|
130
|
-
<line number="278" hits="1"/>
|
131
|
-
<line number="279" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
132
|
-
<line number="280" hits="1"/>
|
133
|
-
<line number="286" hits="1"/>
|
134
|
-
<line number="291" hits="1"/>
|
135
|
-
<line number="292" hits="1"/>
|
136
|
-
<line number="294" hits="1"/>
|
137
|
-
<line number="295" hits="1"/>
|
138
|
-
<line number="297" hits="1"/>
|
139
|
-
<line number="298" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
140
|
-
<line number="299" hits="1"/>
|
141
|
-
<line number="300" hits="1"/>
|
142
|
-
<line number="301" hits="1"/>
|
143
|
-
<line number="302" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
144
|
-
<line number="303" hits="1"/>
|
145
|
-
<line number="307" hits="1"/>
|
146
|
-
<line number="314" hits="1"/>
|
147
|
-
<line number="315" hits="1"/>
|
148
|
-
<line number="317" hits="1"/>
|
149
|
-
<line number="318" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
150
|
-
<line number="319" hits="1"/>
|
151
|
-
<line number="321" hits="1"/>
|
152
|
-
<line number="322" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
153
|
-
<line number="339" hits="1"/>
|
154
|
-
<line number="340" hits="1"/>
|
155
|
-
<line number="341" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
156
|
-
<line number="342" hits="1"/>
|
157
|
-
<line number="343" hits="1"/>
|
158
|
-
<line number="352" hits="1"/>
|
159
|
-
<line number="353" hits="1"/>
|
160
|
-
<line number="359" hits="1"/>
|
161
|
-
<line number="361" hits="1"/>
|
162
|
-
<line number="362" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
163
|
-
<line number="405" hits="1"/>
|
164
|
-
<line number="406" hits="1"/>
|
165
|
-
<line number="407" hits="1"/>
|
166
|
-
<line number="408" hits="1"/>
|
167
|
-
<line number="409" hits="1"/>
|
168
|
-
<line number="410" hits="1"/>
|
169
|
-
<line number="411" hits="1"/>
|
170
|
-
<line number="412" hits="1"/>
|
171
|
-
<line number="413" hits="1"/>
|
172
|
-
<line number="415" hits="1"/>
|
173
|
-
<line number="416" hits="1"/>
|
174
|
-
<line number="420" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
175
|
-
<line number="421" hits="1"/>
|
176
|
-
<line number="425" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
177
|
-
<line number="426" hits="1"/>
|
178
|
-
<line number="428" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
179
|
-
<line number="429" hits="1"/>
|
180
|
-
<line number="432" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
181
|
-
<line number="433" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
182
|
-
<line number="435" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
183
|
-
<line number="436" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
184
|
-
<line number="438" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
185
|
-
<line number="439" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
186
|
-
<line number="441" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
187
|
-
<line number="442" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
188
|
-
<line number="444" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
189
|
-
<line number="445" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
190
|
-
<line number="448" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
191
|
-
<line number="449" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
192
|
-
<line number="451" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
193
|
-
<line number="452" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
194
|
-
<line number="456" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
195
|
-
<line number="457" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
196
|
-
<line number="459" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
197
|
-
<line number="460" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
198
|
-
<line number="462" hits="1"/>
|
199
|
-
<line number="464" hits="1"/>
|
200
|
-
<line number="465" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
201
|
-
<line number="511" hits="1"/>
|
202
|
-
<line number="513" hits="1"/>
|
203
|
-
<line number="515" hits="1"/>
|
204
|
-
<line number="516" hits="1"/>
|
205
|
-
<line number="517" hits="1"/>
|
206
|
-
<line number="519" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
207
|
-
<line number="520" hits="1"/>
|
208
|
-
<line number="522" hits="1"/>
|
209
|
-
<line number="523" hits="1"/>
|
210
|
-
<line number="524" hits="1"/>
|
211
|
-
<line number="526" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
212
|
-
<line number="527" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
213
|
-
<line number="528" hits="1"/>
|
214
|
-
<line number="529" hits="1"/>
|
215
|
-
<line number="532" hits="1"/>
|
216
|
-
<line number="533" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
217
|
-
<line number="534" hits="1"/>
|
218
|
-
<line number="535" hits="1"/>
|
219
|
-
<line number="537" hits="1"/>
|
220
|
-
<line number="538" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
221
|
-
<line number="540" hits="1"/>
|
222
|
-
<line number="541" hits="1"/>
|
223
|
-
<line number="542" hits="1"/>
|
224
|
-
<line number="545" hits="1"/>
|
225
|
-
<line number="546" hits="1"/>
|
226
|
-
<line number="547" hits="1"/>
|
227
|
-
<line number="549" hits="1"/>
|
228
|
-
<line number="550" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
229
|
-
<line number="556" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
230
|
-
<line number="559" hits="1"/>
|
231
|
-
<line number="560" hits="1"/>
|
232
|
-
<line number="561" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
233
|
-
<line number="562" hits="1"/>
|
234
|
-
<line number="563" hits="1"/>
|
235
|
-
<line number="564" hits="1"/>
|
236
|
-
<line number="565" hits="1"/>
|
237
|
-
<line number="566" hits="1"/>
|
238
|
-
<line number="568" hits="1"/>
|
239
|
-
<line number="569" hits="1" branch="true" condition-coverage="100% (2/2)"/>
|
240
|
-
<line number="570" hits="1"/>
|
241
|
-
<line number="573" hits="1"/>
|
242
|
-
<line number="574" hits="1"/>
|
243
|
-
<line number="575" hits="1"/>
|
244
|
-
<line number="578" hits="1"/>
|
245
|
-
<line number="579" hits="1"/>
|
246
|
-
<line number="580" hits="1"/>
|
247
|
-
<line number="583" hits="1"/>
|
248
|
-
<line number="584" hits="1"/>
|
249
|
-
<line number="591" hits="1"/>
|
250
|
-
</lines>
|
251
|
-
</class>
|
252
|
-
</classes>
|
253
|
-
</package>
|
254
|
-
</packages>
|
255
|
-
</coverage>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{datanommer_models-1.3.0 → datanommer_models-1.4.0}/datanommer/models/alembic/script.py.mako
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|