Skip to content

Commit 0e26a92

Browse files
committed
fix: address PR review feedback for resource disposal and docs
- Add defensive guard for non-object JSON root in BuildModelIndex - Sort unparseable indices for deterministic iteration order - Dispose JsonDocument in ModelCreateSingleCommand, TwinUpdateCommand, and ComponentUpdateCommand - Update CLAUDE.md test command from dotnet run to dotnet test - Add missing --tenantId placeholder values in README CLI examples
1 parent 238045b commit 0e26a92

5 files changed

Lines changed: 36 additions & 28 deletions

File tree

README.md

Lines changed: 24 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -159,92 +159,92 @@ The CLI is organized into command groups:
159159
atc-azure-digitaltwin model validate -d <directory-path>
160160

161161
# Create all models (dependency-ordered)
162-
atc-azure-digitaltwin model create all --tenantId -a <adt-instance-url> -d <directory-path>
162+
atc-azure-digitaltwin model create all --tenantId <tenant-id> -a <adt-instance-url> -d <directory-path>
163163

164164
# Create single model
165-
atc-azure-digitaltwin model create single --tenantId -a <adt-instance-url> -d <directory-path> -m <model-id>
165+
atc-azure-digitaltwin model create single --tenantId <tenant-id> -a <adt-instance-url> -d <directory-path> -m <model-id>
166166

167167
# Get all models
168-
atc-azure-digitaltwin model get all --tenantId -a <adt-instance-url>
168+
atc-azure-digitaltwin model get all --tenantId <tenant-id> -a <adt-instance-url>
169169

170170
# Decommission a model
171-
atc-azure-digitaltwin model decommission --tenantId -a <adt-instance-url> -m <model-id>
171+
atc-azure-digitaltwin model decommission --tenantId <tenant-id> -a <adt-instance-url> -m <model-id>
172172

173173
# Delete all models
174-
atc-azure-digitaltwin model delete all --tenantId -a <adt-instance-url>
174+
atc-azure-digitaltwin model delete all --tenantId <tenant-id> -a <adt-instance-url>
175175
```
176176

177177
#### Twin Commands
178178

179179
```bash
180180
# Count twins by model
181-
atc-azure-digitaltwin twin count --tenantId -a <adt-instance-url>
181+
atc-azure-digitaltwin twin count --tenantId <tenant-id> -a <adt-instance-url>
182182

183183
# Create a twin
184-
atc-azure-digitaltwin twin create --tenantId -a <adt-instance-url> -t <twin-id> -m <model-id> -modelVersion <version> --jsonPayload <json>
184+
atc-azure-digitaltwin twin create --tenantId <tenant-id> -a <adt-instance-url> -t <twin-id> -m <model-id> -modelVersion <version> --jsonPayload <json>
185185

186186
# Get a twin
187-
atc-azure-digitaltwin twin get --tenantId -a <adt-instance-url> -t <twin-id>
187+
atc-azure-digitaltwin twin get --tenantId <tenant-id> -a <adt-instance-url> -t <twin-id>
188188

189189
# Update a twin with JSON Patch
190-
atc-azure-digitaltwin twin update --tenantId -a <adt-instance-url> -t <twin-id> --jsonPatch <json-patch>
190+
atc-azure-digitaltwin twin update --tenantId <tenant-id> -a <adt-instance-url> -t <twin-id> --jsonPatch <json-patch>
191191

192192
# Delete all twins
193-
atc-azure-digitaltwin twin delete all --tenantId -a <adt-instance-url>
193+
atc-azure-digitaltwin twin delete all --tenantId <tenant-id> -a <adt-instance-url>
194194

195195
# Manage relationships
196-
atc-azure-digitaltwin twin relationship create --tenantId -a <adt-instance-url> --source-twinId <src> --target-twinId <tgt> --relationshipName <name>
197-
atc-azure-digitaltwin twin relationship get all --tenantId -a <adt-instance-url> -t <twin-id>
196+
atc-azure-digitaltwin twin relationship create --tenantId <tenant-id> -a <adt-instance-url> --source-twinId <src> --target-twinId <tgt> --relationshipName <name>
197+
atc-azure-digitaltwin twin relationship get all --tenantId <tenant-id> -a <adt-instance-url> -t <twin-id>
198198

199199
# Get/update twin components
200-
atc-azure-digitaltwin twin component get --tenantId -a <adt-instance-url> -t <twin-id> -c <component-name>
201-
atc-azure-digitaltwin twin component update --tenantId -a <adt-instance-url> -t <twin-id> -c <component-name> --jsonPatch <json-patch>
200+
atc-azure-digitaltwin twin component get --tenantId <tenant-id> -a <adt-instance-url> -t <twin-id> -c <component-name>
201+
atc-azure-digitaltwin twin component update --tenantId <tenant-id> -a <adt-instance-url> -t <twin-id> -c <component-name> --jsonPatch <json-patch>
202202
```
203203

204204
#### Event Route Commands
205205

206206
```bash
207207
# Create an event route
208-
atc-azure-digitaltwin route create --tenantId -a <adt-instance-url> -e <route-id> --endpointName <endpoint>
208+
atc-azure-digitaltwin route create --tenantId <tenant-id> -a <adt-instance-url> -e <route-id> --endpointName <endpoint>
209209

210210
# Get all event routes
211-
atc-azure-digitaltwin route get all --tenantId -a <adt-instance-url>
211+
atc-azure-digitaltwin route get all --tenantId <tenant-id> -a <adt-instance-url>
212212

213213
# Delete an event route
214-
atc-azure-digitaltwin route delete --tenantId -a <adt-instance-url> -e <route-id>
214+
atc-azure-digitaltwin route delete --tenantId <tenant-id> -a <adt-instance-url> -e <route-id>
215215
```
216216

217217
#### Query Command
218218

219219
```bash
220220
# Run an ADT query
221-
atc-azure-digitaltwin query --tenantId -a <adt-instance-url> -q "SELECT * FROM DIGITALTWINS"
221+
atc-azure-digitaltwin query --tenantId <tenant-id> -a <adt-instance-url> -q "SELECT * FROM DIGITALTWINS"
222222
```
223223

224224
#### Telemetry Command
225225

226226
```bash
227227
# Publish telemetry for a twin
228-
atc-azure-digitaltwin telemetry publish --tenantId -a <adt-instance-url> -t <twin-id> -p '{"temperature": 25.0}'
228+
atc-azure-digitaltwin telemetry publish --tenantId <tenant-id> -a <adt-instance-url> -t <twin-id> -p '{"temperature": 25.0}'
229229
```
230230

231231
#### Import Commands
232232

233233
```bash
234234
# Create a bulk import job
235-
atc-azure-digitaltwin import create --tenantId -a <adt-instance-url> --jobId <job-id> --inputBlobUri <input-uri> --outputBlobUri <output-uri>
235+
atc-azure-digitaltwin import create --tenantId <tenant-id> -a <adt-instance-url> --jobId <job-id> --inputBlobUri <input-uri> --outputBlobUri <output-uri>
236236

237237
# Get import job status
238-
atc-azure-digitaltwin import get single --tenantId -a <adt-instance-url> --jobId <job-id>
238+
atc-azure-digitaltwin import get single --tenantId <tenant-id> -a <adt-instance-url> --jobId <job-id>
239239

240240
# List all import jobs
241-
atc-azure-digitaltwin import get all --tenantId -a <adt-instance-url>
241+
atc-azure-digitaltwin import get all --tenantId <tenant-id> -a <adt-instance-url>
242242

243243
# Cancel a running import job
244-
atc-azure-digitaltwin import cancel --tenantId -a <adt-instance-url> --jobId <job-id>
244+
atc-azure-digitaltwin import cancel --tenantId <tenant-id> -a <adt-instance-url> --jobId <job-id>
245245

246246
# Delete an import job
247-
atc-azure-digitaltwin import delete --tenantId -a <adt-instance-url> --jobId <job-id>
247+
atc-azure-digitaltwin import delete --tenantId <tenant-id> -a <adt-instance-url> --jobId <job-id>
248248
```
249249

250250
Use `--help` on any command for detailed options:

src/Atc.Azure.DigitalTwin.CLI/Commands/ComponentUpdateCommand.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,8 @@ private static (JsonPatchDocument? Document, string? ErrorMessage) BuildPatchDoc
8282
string jsonPatch)
8383
{
8484
var patchDocument = new JsonPatchDocument();
85-
var patchArray = JsonDocument.Parse(jsonPatch).RootElement;
85+
using var patchDoc = JsonDocument.Parse(jsonPatch);
86+
var patchArray = patchDoc.RootElement;
8687

8788
foreach (var operation in patchArray.EnumerateArray())
8889
{

src/Atc.Azure.DigitalTwin.CLI/Commands/ModelCreateSingleCommand.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ private async Task<int> ExecuteInternalAsync(
8787
{
8888
try
8989
{
90-
var doc = JsonDocument.Parse(x);
90+
using var doc = JsonDocument.Parse(x);
9191
return doc.RootElement.TryGetProperty("@id", out var idProp) &&
9292
string.Equals(idProp.GetString(), modelId, StringComparison.Ordinal);
9393
}

src/Atc.Azure.DigitalTwin.CLI/Commands/TwinUpdateCommand.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,8 @@ private static (JsonPatchDocument? Document, string? ErrorMessage) BuildPatchDoc
8181
string jsonPatch)
8282
{
8383
var patchDocument = new JsonPatchDocument();
84-
var patchArray = JsonDocument.Parse(jsonPatch).RootElement;
84+
using var patchDoc = JsonDocument.Parse(jsonPatch);
85+
var patchArray = patchDoc.RootElement;
8586

8687
foreach (var operation in patchArray.EnumerateArray())
8788
{

src/Atc.Azure.DigitalTwin/Services/ModelRepositoryService.cs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,12 @@ private static (Dictionary<string, int> ModelIndex, HashSet<int> Unparseable) Bu
183183
using var doc = JsonDocument.Parse(models[i]);
184184
var root = doc.RootElement;
185185

186+
if (root.ValueKind != JsonValueKind.Object)
187+
{
188+
unparseable.Add(i);
189+
continue;
190+
}
191+
186192
if (root.TryGetProperty("@id", out var idProp))
187193
{
188194
var id = idProp.GetString();
@@ -316,7 +322,7 @@ private static List<string> ExecuteKahnSort(
316322
throw new InvalidOperationException("Circular dependency detected among DTDL models.");
317323
}
318324

319-
foreach (var idx in unparseable)
325+
foreach (var idx in unparseable.OrderBy(x => x))
320326
{
321327
sorted.Add(models[idx]);
322328
}

0 commit comments

Comments
 (0)