Skip to content

Commit 4684533

Browse files
Add Secrets and SecretsGroup as versioned models, fix user/email handling (#154) (#156)
1 parent 6217317 commit 4684533

File tree

4 files changed

+40
-14
lines changed

4 files changed

+40
-14
lines changed

dolt/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,8 @@ def query_registry(model, registry):
123123
"objectchange": True,
124124
"relationship": True,
125125
"relationshipassociation": True,
126+
"secret": True,
127+
"secretsgroup": True,
126128
"status": True,
127129
"tag": True,
128130
"taggeditem": True,

dolt/diffs.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
from django.db import models
66
from django.db.models.expressions import RawSQL
77

8-
from nautobot.dcim.tables import cables, devices, devicetypes, power, racks, sites
98
from nautobot.circuits import tables as circuits_tables
9+
from nautobot.dcim.tables import cables, devices, devicetypes, power, racks, sites
10+
from nautobot.extras import tables as extras_tables
1011
from nautobot.ipam import tables as ipam_tables
1112
from nautobot.tenancy import tables as tenancy_tables
1213
from nautobot.virtualization import tables as virtualization_tables
@@ -140,6 +141,12 @@ def json_diff_fields(tbl_name):
140141

141142
register_diff_tables(
142143
{
144+
"circuits": {
145+
"circuit": circuits_tables.CircuitTable,
146+
# "circuittermination": None,
147+
"circuittype": circuits_tables.CircuitTypeTable,
148+
"provider": circuits_tables.ProviderTable,
149+
},
143150
"dcim": {
144151
# "baseinterface": devices.BaseInterfaceTable,
145152
"cable": cables.CableTable,
@@ -190,11 +197,9 @@ def json_diff_fields(tbl_name):
190197
"site": sites.SiteTable,
191198
"virtualchassis": devices.VirtualChassisTable,
192199
},
193-
"circuits": {
194-
"circuit": circuits_tables.CircuitTable,
195-
# "circuittermination": None,
196-
"circuittype": circuits_tables.CircuitTypeTable,
197-
"provider": circuits_tables.ProviderTable,
200+
"extras": {
201+
"secret": extras_tables.SecretTable,
202+
"secretsgroup": extras_tables.SecretsGroupTable,
198203
},
199204
"ipam": {
200205
"aggregate": ipam_tables.AggregateTable,

dolt/tests.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,10 @@ class TestBranches(DoltTestCase):
2929

3030
def setUp(self):
3131
"""setUp is ran before every testcase."""
32-
self.user = User.objects.get_or_create(username="branch-test", is_superuser=True)[0]
32+
self.user, _ = User.objects.get_or_create(
33+
username="branch-test", email="branch-test@example.com", is_superuser=True
34+
)
35+
self.user_no_email, _ = User.objects.get_or_create(username="branch-test-no-email", is_superuser=True)
3336

3437
def tearDown(self):
3538
"""tearDown is ran after every testcase."""
@@ -77,11 +80,21 @@ def test_merge_ff(self):
7780

7881
Commit(message="commit any changes").save(user=self.user)
7982

83+
# Commit().save() doesn't update the PK correctly, it appears - .refresh_from_db() fails with
84+
# "Commit matching query does not exist". So we need to load it fresh from the DB instead:
85+
commit = Commit.objects.order_by("date").last()
86+
self.assertEqual(commit.committer, self.user.username)
87+
self.assertEqual(commit.email, self.user.email)
88+
8089
# Checkout to the other branch and make a change
8190
other.checkout()
8291
Manufacturer.objects.all().delete()
8392
Manufacturer.objects.create(name="m1", slug="m-1")
84-
Commit(message="added a manufacturer").save(user=self.user)
93+
Commit(message="added a manufacturer").save(user=self.user_no_email)
94+
95+
commit = Commit.objects.order_by("date").last()
96+
self.assertEqual(commit.committer, self.user_no_email.username)
97+
self.assertEqual(commit.email, f"{self.user_no_email.username}@nautobot.invalid")
8598

8699
# Now do a merge
87100
main.checkout()
@@ -106,7 +119,7 @@ def test_merge_no_ff(self):
106119
# Checkout to the other branch and make a change
107120
other.checkout()
108121
Manufacturer.objects.create(name="m3", slug="m-3")
109-
Commit(message="commit m3").save(user=self.user)
122+
Commit(message="commit m3").save(user=self.user_no_email)
110123

111124
# Now do a merge
112125
main.checkout()

dolt/utils.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,18 @@ class DoltError(Exception):
1515
pass # pylint: disable=W0107
1616

1717

18-
def author_from_user(usr):
19-
"""author_from_user returns an author string from a user object."""
20-
if usr and usr.username and usr.email:
21-
return f"{usr.username} <{usr.email}>"
18+
def author_from_user(user):
19+
"""author_from_user returns an author string from a user object.
20+
21+
Note that while user.email is optional in Django, it's mandatory for Dolt.
22+
"""
23+
if user:
24+
if user.email:
25+
return f"{user.username} <{user.email}>"
26+
# RFC 6761 defines .invalid as a reserved TLD that will never be used for real-world domains
27+
return f"{user.username} <{user.username}@nautobot.invalid>"
2228
# default to generic user
23-
return "nautobot <nautobot@ntc.com>"
29+
return "unknown <unknown@nautobot.invalid>"
2430

2531

2632
def is_dolt_model(model):

0 commit comments

Comments
 (0)