Skip to content

Commit 6d7303f

Browse files
committed
closes #66 ChainLP: Storage support: DB
1 parent ce7aa47 commit 6d7303f

File tree

17 files changed

+110
-52
lines changed

17 files changed

+110
-52
lines changed

Config.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ chaintest.generator.chainlp.host.url=http://localhost/
2121
chaintest.generator.chainlp.client.request-timeout-s=30
2222
chaintest.generator.chainlp.client.expect-continue=false
2323
chaintest.generator.chainlp.client.max-retries=3
24+
chaintest.generator.chainlp.persist-embeds=true
2425

2526
## simple
2627
chaintest.generator.simple.enabled=true

chainlp/backend/chainlp/src/main/java/com/aventstack/chainlp/ChainApp.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.cache.annotation.EnableCaching;
56

7+
@EnableCaching
68
@SpringBootApplication
79
public class ChainApp {
810

chainlp/backend/chainlp/src/main/java/com/aventstack/chainlp/api/test/Embed.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import jakarta.persistence.GeneratedValue;
77
import jakarta.persistence.GenerationType;
88
import jakarta.persistence.Id;
9+
import jakarta.persistence.Lob;
910
import jakarta.persistence.ManyToOne;
1011
import jakarta.persistence.Table;
1112
import jakarta.persistence.Transient;
@@ -35,7 +36,17 @@ public class Embed {
3536
@Column
3637
private String url;
3738

39+
@Column(columnDefinition = "longblob")
40+
@Lob
41+
private byte[] bytes;
42+
43+
@Column
44+
private String base64;
45+
3846
@Transient
3947
private String presigned;
4048

49+
@Transient
50+
private boolean store;
51+
4152
}

chainlp/backend/chainlp/src/main/java/com/aventstack/chainlp/api/test/Test.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import lombok.ToString;
2323
import org.springframework.data.annotation.CreatedDate;
2424

25+
import java.util.Base64;
2526
import java.util.HashSet;
2627
import java.util.List;
2728
import java.util.Set;
@@ -31,7 +32,7 @@
3132
@Builder
3233
@NoArgsConstructor
3334
@AllArgsConstructor
34-
@ToString(exclude = { "parent" })
35+
@ToString(exclude = { "parent", "embeds" })
3536
@Table(name = "test")
3637
public class Test {
3738

@@ -125,7 +126,19 @@ public void setChildren(List<Test> children) {
125126
public void setEmbeds(final List<Embed> embeds) {
126127
this.embeds = embeds;
127128
if (embeds != null) {
128-
embeds.forEach(x -> x.setTest(this));
129+
for (final Embed embed : embeds) {
130+
embed.setTest(this);
131+
if (embed.isStore()) {
132+
if (null != embed.getBase64() && !embed.getBase64().isEmpty()) {
133+
final byte[] data = Base64.getDecoder().decode(embed.getBase64().getBytes());
134+
embed.setBytes(data);
135+
embed.setBase64(null);
136+
}
137+
} else {
138+
embed.setBase64(null);
139+
embed.setBytes(null);
140+
}
141+
}
129142
}
130143
}
131144

chainlp/backend/chainlp/src/main/java/com/aventstack/chainlp/api/test/TestService.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,10 +63,12 @@ public Page<Test> findAll(final Test test, final String op, final Pageable pagea
6363
}
6464

6565
private Test resolveEmbeds(final Test test) {
66-
for (final Embed embed : test.getEmbeds()) {
67-
final String presigned = embedResolver.getResolver(embed.getUrl())
68-
.resolve(embed.getUrl());
69-
embed.setPresigned(presigned);
66+
if (test.getEmbeds().stream().anyMatch(x -> null != x.getUrl() && !x.getUrl().isBlank())) {
67+
for (final Embed embed : test.getEmbeds()) {
68+
final String presigned = embedResolver.getResolver(embed.getUrl())
69+
.resolve(embed.getUrl());
70+
embed.setPresigned(presigned);
71+
}
7072
}
7173
test.getChildren().forEach(this::resolveEmbeds);
7274
return test;

chainlp/backend/chainlp/src/main/java/com/aventstack/chainlp/embed/AwsS3SignedUrlResolver.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public String createPresignedGetUrl(final String bucket, final String key) {
4040
.key(key)
4141
.build();
4242
final GetObjectPresignRequest presignRequest = GetObjectPresignRequest.builder()
43-
.signatureDuration(Duration.ofMinutes(10))
43+
.signatureDuration(Duration.ofDays(1))
4444
.getObjectRequest(objectRequest)
4545
.build();
4646
final PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(presignRequest);

chainlp/frontend/chainlp/src/app/components/test/test.component.html

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,18 @@ <h5 class="mb-3 testname" [ngClass]="test.result.toLowerCase()">{{test.name}}</h
6060
<pre>{{leaf.error}}</pre>
6161
</div>
6262
<div class="mt-2 screenshots" *ngIf="leaf.embeds && leaf.embeds.length">
63-
<img *ngFor="let s of leaf.embeds" [src]="s.presigned || s.url" class="img-fluid" alt="screenshot" />
63+
<ng-container *ngFor="let s of leaf.embeds">
64+
<img *ngIf="s.presigned || s.url" [src]="s.presigned || s.url" class="img-fluid" alt="screenshot" />
65+
<img *ngIf="s.bytes || s.base64" [src]="'data:image/png;base64,' + s.bytes || s.base64" class="img-fluid" alt="screenshot" />
66+
</ng-container>
6467
</div>
6568
</div>
6669
</div>
6770
<div class="mt-2 screenshots" *ngIf="child.embeds && child.embeds.length">
68-
<img *ngFor="let s of child.embeds" [src]="s.presigned || s.url" class="img-fluid" alt="screenshot" />
71+
<ng-container *ngFor="let s of child.embeds">
72+
<img *ngIf="s.presigned || s.url" [src]="s.presigned || s.url" class="img-fluid" alt="screenshot" />
73+
<img *ngIf="s.bytes || s.base64" [src]="'data:image/png;base64,' + s.bytes || s.base64" class="img-fluid" alt="screenshot" />
74+
</ng-container>
6975
</div>
7076
</div>
7177
</div>
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
export class Embed {
22
presigned: string;
33
url: string;
4+
bytes: any;
5+
base64: string;
46
}

chainlp/frontend/chainlp/src/app/pages/build/build/build.component.html

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,10 @@ <h5 class="mb-3 testname" [ngClass]="test.result.toLowerCase()">{{test.name}}</h
220220
<pre>{{leaf.error}}</pre>
221221
</div>
222222
<div class="mt-2 mb-4 screenshots" *ngIf="leaf.embeds && leaf.embeds.length">
223-
<img *ngFor="let s of leaf.embeds" [src]="s.presigned || s.url" class="img-fluid" alt="screenshot" />
223+
<ng-container *ngFor="let s of leaf.embeds">
224+
<img *ngIf="s.presigned || s.url" [src]="s.presigned || s.url" class="img-fluid" alt="screenshot" />
225+
<img *ngIf="s.bytes || s.base64" [src]="'data:image/png;base64,' + s.bytes || s.base64" class="img-fluid" alt="screenshot" />
226+
</ng-container>
224227
</div>
225228
</div>
226229
</div>
@@ -231,7 +234,10 @@ <h5 class="mb-3 testname" [ngClass]="test.result.toLowerCase()">{{test.name}}</h
231234
<pre>{{child.error}}</pre>
232235
</div>
233236
<div class="mt-2 screenshots" *ngIf="child.embeds && child.embeds.length">
234-
<img *ngFor="let s of child.embeds" [src]="s.presigned || s.url" class="img-fluid" alt="screenshot" />
237+
<ng-container *ngFor="let s of child.embeds">
238+
<img *ngIf="s.presigned || s.url" [src]="s.presigned || s.url" class="img-fluid" alt="screenshot" />
239+
<img *ngIf="s.bytes || s.base64" [src]="'data:image/png;base64,' + s.bytes || s.base64" class="img-fluid" alt="screenshot" />
240+
</ng-container>
235241
</div>
236242
</div>
237243
</div>

core/chaintest-core-java/src/main/java/com/aventstack/chaintest/domain/Embed.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package com.aventstack.chaintest.domain;
22

3-
import lombok.Data;
3+
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
4+
import lombok.Getter;
45
import lombok.NoArgsConstructor;
6+
import lombok.Setter;
57
import org.slf4j.Logger;
68
import org.slf4j.LoggerFactory;
79

@@ -13,8 +15,10 @@
1315
import java.util.List;
1416
import java.util.UUID;
1517

16-
@Data
18+
@Getter
19+
@Setter
1720
@NoArgsConstructor
21+
@JsonIgnoreProperties(ignoreUnknown = true)
1822
public class Embed {
1923

2024
private static final Logger log = LoggerFactory.getLogger(Embed.class);
@@ -30,10 +34,12 @@ public class Embed {
3034
);
3135

3236
private final UUID uuid = UUID.randomUUID();
37+
private String url;
3338
private String base64;
3439
private File file;
3540
private byte[] bytes;
3641
private String mediaType;
42+
private boolean store = true;
3743

3844
public Embed(final String base64, final String mediaType) {
3945
this.base64 = base64;

0 commit comments

Comments
 (0)