Skip to content

Commit 005ef2c

Browse files
Merge branch 'main' into admin-context
# Conflicts: # api/admin/asset.go
2 parents 826071c + 6b59529 commit 005ef2c

File tree

4 files changed

+293
-91
lines changed

4 files changed

+293
-91
lines changed

api/admin/asset.go

Lines changed: 94 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,27 @@ import (
1414

1515
// AssetParams are the parameters for Asset.
1616
type AssetParams struct {
17-
AssetType api.AssetType `json:"-"`
18-
DeliveryType api.DeliveryType `json:"-"`
19-
PublicID string `json:"-"`
20-
Exif *bool `json:"exif,omitempty"`
21-
Colors *bool `json:"colors,omitempty"`
22-
Faces *bool `json:"faces,omitempty"`
23-
QualityAnalysis *bool `json:"quality_analysis,omitempty"`
24-
ImageMetadata *bool `json:"image_metadata,omitempty"`
25-
MediaMetadata *bool `json:"media_metadata,omitempty"`
26-
Phash *bool `json:"phash,omitempty"`
27-
Pages *bool `json:"pages,omitempty"`
28-
AccessibilityAnalysis *bool `json:"accessibility_analysis,omitempty"`
29-
CinemagraphAnalysis *bool `json:"cinemagraph_analysis,omitempty"`
30-
Coordinates *bool `json:"coordinates,omitempty"`
31-
MaxResults int `json:"max_results,omitempty"`
32-
DerivedNextCursor string `json:"derived_next_cursor,omitempty"`
33-
Related *bool `json:"related,omitempty"`
34-
RelatedNextCursor string `json:"related_next_cursor,omitempty"`
35-
Versions *bool `json:"versions,omitempty"`
17+
AssetType api.AssetType `json:"-"`
18+
DeliveryType api.DeliveryType `json:"-"`
19+
PublicID string `json:"-"`
20+
Exif *bool `json:"exif,omitempty"`
21+
Colors *bool `json:"colors,omitempty"`
22+
Faces *bool `json:"faces,omitempty"`
23+
QualityAnalysis *bool `json:"quality_analysis,omitempty"`
24+
ImageMetadata *bool `json:"image_metadata,omitempty"`
25+
MediaMetadata *bool `json:"media_metadata,omitempty"`
26+
Phash *bool `json:"phash,omitempty"`
27+
Pages *bool `json:"pages,omitempty"`
28+
AccessibilityAnalysis *bool `json:"accessibility_analysis,omitempty"`
29+
CinemagraphAnalysis *bool `json:"cinemagraph_analysis,omitempty"`
30+
Coordinates *bool `json:"coordinates,omitempty"`
31+
MaxResults int `json:"max_results,omitempty"`
32+
DerivedNextCursor string `json:"derived_next_cursor,omitempty"`
33+
Related *bool `json:"related,omitempty"`
34+
RelatedNextCursor string `json:"related_next_cursor,omitempty"`
35+
RelatedComplementary *bool `json:"related_complementary,omitempty"`
36+
RelatedComplementaryNextCursor string `json:"related_complementary_next_cursor,omitempty"`
37+
Versions *bool `json:"versions,omitempty"`
3638
}
3739

3840
// Asset returns the details of the specified asset and all its derived resources.
@@ -52,52 +54,53 @@ func (a *API) Asset(ctx context.Context, params AssetParams) (*AssetResult, erro
5254

5355
// AssetResult is the result of the Asset.
5456
type AssetResult struct {
55-
AssetID string `json:"asset_id"`
56-
PublicID string `json:"public_id"`
57-
Format string `json:"format"`
58-
AssetFolder string `json:"asset_folder"`
59-
DisplayName string `json:"display_name"`
60-
Version int `json:"version"`
61-
ResourceType string `json:"resource_type"`
62-
Type string `json:"type"`
63-
CreatedAt time.Time `json:"created_at"`
64-
Bytes int `json:"bytes"`
65-
Width int `json:"width"`
66-
Height int `json:"height"`
67-
Backup bool `json:"backup"`
68-
AccessMode string `json:"access_mode"`
69-
AccessControl api.AccessControl `json:"access_control,omitempty"`
70-
URL string `json:"url"`
71-
SecureURL string `json:"secure_url"`
72-
Metadata api.Metadata `json:"metadata,omitempty"`
73-
Tags []string `json:"tags"`
74-
LastUpdated api.LastUpdated `json:"last_updated"`
75-
NextCursor string `json:"next_cursor"`
76-
Derived []interface{} `json:"derived"`
77-
Etag string `json:"etag"`
78-
ImageMetadata ImageMetadataResult `json:"image_metadata"`
79-
VideoMetadata MediaMetadataResult `json:"video_metadata"`
80-
Coordinates interface{} `json:"coordinates"`
81-
Info interface{} `json:"info"`
82-
Exif interface{} `json:"exif"`
83-
Faces [][]int `json:"faces"`
84-
IllustrationScore float64 `json:"illustration_score"`
85-
SemiTransparent bool `json:"semi_transparent"`
86-
Grayscale bool `json:"grayscale"`
87-
Colors [][]interface{} `json:"colors"`
88-
Predominant PredominantResult `json:"predominant"`
89-
Phash string `json:"phash"`
90-
QualityAnalysis QualityAnalysisResult `json:"quality_analysis"`
91-
QualityScore float64 `json:"quality_score"`
92-
AccessibilityAnalysis AccessibilityAnalysisResult `json:"accessibility_analysis"`
93-
Pages int `json:"pages"`
94-
CinemagraphAnalysis CinemagraphAnalysisResult `json:"cinemagraph_analysis"`
95-
Usage interface{} `json:"usage"`
96-
OriginalFilename string `json:"original_filename"`
97-
Context AssetContextResult `json:"context"`
57+
AssetID string `json:"asset_id"`
58+
PublicID string `json:"public_id"`
59+
Format string `json:"format"`
60+
AssetFolder string `json:"asset_folder"`
61+
DisplayName string `json:"display_name"`
62+
Version int `json:"version"`
63+
ResourceType string `json:"resource_type"`
64+
Type string `json:"type"`
65+
CreatedAt time.Time `json:"created_at"`
66+
Bytes int `json:"bytes"`
67+
Width int `json:"width"`
68+
Height int `json:"height"`
69+
Backup bool `json:"backup"`
70+
AccessMode string `json:"access_mode"`
71+
AccessControl api.AccessControl `json:"access_control,omitempty"`
72+
URL string `json:"url"`
73+
SecureURL string `json:"secure_url"`
74+
Metadata api.Metadata `json:"metadata,omitempty"`
75+
Tags []string `json:"tags"`
76+
LastUpdated api.LastUpdated `json:"last_updated"`
77+
NextCursor string `json:"next_cursor"`
78+
Derived []interface{} `json:"derived"`
79+
Etag string `json:"etag"`
80+
ImageMetadata ImageMetadataResult `json:"image_metadata"`
81+
VideoMetadata MediaMetadataResult `json:"video_metadata"`
82+
Coordinates interface{} `json:"coordinates"`
83+
Info interface{} `json:"info"`
84+
Exif interface{} `json:"exif"`
85+
Faces [][]int `json:"faces"`
86+
IllustrationScore float64 `json:"illustration_score"`
87+
SemiTransparent bool `json:"semi_transparent"`
88+
Grayscale bool `json:"grayscale"`
89+
Colors [][]interface{} `json:"colors"`
90+
Predominant PredominantResult `json:"predominant"`
91+
Phash string `json:"phash"`
92+
QualityAnalysis QualityAnalysisResult `json:"quality_analysis"`
93+
QualityScore float64 `json:"quality_score"`
94+
RelatedComplementaryAssets []RelatedComplementaryAssetResult `json:"related_complementary_assets"`
95+
AccessibilityAnalysis AccessibilityAnalysisResult `json:"accessibility_analysis"`
96+
Pages int `json:"pages"`
97+
CinemagraphAnalysis CinemagraphAnalysisResult `json:"cinemagraph_analysis"`
98+
Usage interface{} `json:"usage"`
99+
OriginalFilename string `json:"original_filename"`
100+
Context AssetContextResult `json:"context"`
98101
AdminContext []AssetAdminContextResult `json:"admin_context"`
99-
Error api.ErrorResp `json:"error,omitempty"`
100-
Response interface{}
102+
Error api.ErrorResp `json:"error,omitempty"`
103+
Response interface{}
101104
}
102105

103106
// QualityAnalysisResult contains the details about quality analysis.
@@ -118,6 +121,16 @@ type QualityAnalysisResult struct {
118121
Resolution float64 `json:"resolution"`
119122
}
120123

124+
// RelatedComplementaryAssetResult contains the details about a related complementary asset.
125+
type RelatedComplementaryAssetResult struct {
126+
AssetID string `json:"asset_id"`
127+
PublicID string `json:"public_id"`
128+
ResourceType string `json:"resource_type"`
129+
Type string `json:"type"`
130+
Status string `json:"status"`
131+
ComplementaryType string `json:"complementary_type"`
132+
}
133+
121134
// AccessibilityAnalysisResult contains the details about accessibility analysis.
122135
type AccessibilityAnalysisResult struct {
123136
ColorblindAccessibilityAnalysis struct {
@@ -229,21 +242,23 @@ func (a *API) UpdateAsset(ctx context.Context, params UpdateAssetParams) (*Asset
229242

230243
// AssetByAssetIDParams are the parameters for AssetByAssetID.
231244
type AssetByAssetIDParams struct {
232-
AssetID string `json:"-"`
233-
Colors *bool `json:"colors,omitempty"`
234-
Exif *bool `json:"exif,omitempty"`
235-
Faces *bool `json:"faces,omitempty"`
236-
QualityAnalysis *bool `json:"quality_analysis,omitempty"`
237-
ImageMetadata *bool `json:"image_metadata,omitempty"`
238-
MediaMetadata *bool `json:"media_metadata,omitempty"`
239-
Phash *bool `json:"phash,omitempty"`
240-
Pages *bool `json:"pages,omitempty"`
241-
CinemagraphAnalysis *bool `json:"cinemagraph_analysis,omitempty"`
242-
Coordinates *bool `json:"coordinates,omitempty"`
243-
MaxResults int `json:"max_results,omitempty"`
244-
DerivedNextCursor string `json:"derived_next_cursor,omitempty"`
245-
AccessibilityAnalysis *bool `json:"accessibility_analysis,omitempty"`
246-
Versions *bool `json:"versions,omitempty"`
245+
AssetID string `json:"-"`
246+
Colors *bool `json:"colors,omitempty"`
247+
Exif *bool `json:"exif,omitempty"`
248+
Faces *bool `json:"faces,omitempty"`
249+
QualityAnalysis *bool `json:"quality_analysis,omitempty"`
250+
ImageMetadata *bool `json:"image_metadata,omitempty"`
251+
MediaMetadata *bool `json:"media_metadata,omitempty"`
252+
Phash *bool `json:"phash,omitempty"`
253+
Pages *bool `json:"pages,omitempty"`
254+
CinemagraphAnalysis *bool `json:"cinemagraph_analysis,omitempty"`
255+
Coordinates *bool `json:"coordinates,omitempty"`
256+
MaxResults int `json:"max_results,omitempty"`
257+
DerivedNextCursor string `json:"derived_next_cursor,omitempty"`
258+
AccessibilityAnalysis *bool `json:"accessibility_analysis,omitempty"`
259+
Versions *bool `json:"versions,omitempty"`
260+
RelatedComplementary *bool `json:"related_complementary,omitempty"`
261+
RelatedComplementaryNextCursor string `json:"related_complementary_next_cursor,omitempty"`
247262
}
248263

249264
// AssetByAssetID returns the details of the specified asset and all its derived assets by asset id.

api/admin/asset_acceptance_test.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,15 @@ func getAssetTestCases() []AdminAPIAcceptanceTestCase {
6262
"related_next_cursor": []string{"NEXT_CURSOR"},
6363
},
6464
},
65+
{
66+
requestParams: admin.AssetParams{PublicID: cldtest.PublicID,
67+
RelatedComplementary: api.Bool(true), RelatedComplementaryNextCursor: "NEXT_CURSOR"},
68+
uri: "/resources/image/upload/" + cldtest.PublicID,
69+
expectedParams: &url.Values{
70+
"related_complementary": []string{"true"},
71+
"related_complementary_next_cursor": []string{"NEXT_CURSOR"},
72+
},
73+
},
6574
}
6675

6776
for num, testCase := range assetTestCases {

api/admin/assets.go

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,16 @@ import (
1212
)
1313

1414
const (
15-
assets api.EndPoint = "resources"
16-
byAssetFolder api.EndPoint = "by_asset_folder"
17-
visualSearch api.EndPoint = "visual_search"
18-
derivedAssets api.EndPoint = "derived_resources"
19-
relatedAssets api.EndPoint = "related_assets"
20-
tags api.EndPoint = "tags"
21-
cldContext api.EndPoint = "context"
22-
moderations api.EndPoint = "moderations"
23-
restore api.EndPoint = "restore"
15+
assets api.EndPoint = "resources"
16+
byAssetFolder api.EndPoint = "by_asset_folder"
17+
visualSearch api.EndPoint = "visual_search"
18+
derivedAssets api.EndPoint = "derived_resources"
19+
relatedAssets api.EndPoint = "related_assets"
20+
relatedComplementaryAssets api.EndPoint = "related_complementary_assets"
21+
tags api.EndPoint = "tags"
22+
cldContext api.EndPoint = "context"
23+
moderations api.EndPoint = "moderations"
24+
restore api.EndPoint = "restore"
2425
)
2526

2627
// AssetTypes lists available asset types.
@@ -450,3 +451,25 @@ func (a *API) DeleteRelatedAssetsByAssetIDs(ctx context.Context, params DeleteRe
450451

451452
return res, err
452453
}
454+
455+
// RelatedComplementaryAssetsByAssetIDsParams are the parameters for AddRelatedComplementaryAssetsByAssetIDs.
456+
type RelatedComplementaryAssetsByAssetIDsParams struct {
457+
AssetID string `json:"-"`
458+
RelatedAssetIDs []string `json:"related_asset_ids"`
459+
ComplementaryType string `json:"complementary_type"`
460+
}
461+
462+
// AddRelatedComplementaryAssetsByAssetIDs relates an asset to other complementary assets by asset IDs.
463+
func (a *API) AddRelatedComplementaryAssetsByAssetIDs(ctx context.Context, params RelatedComplementaryAssetsByAssetIDsParams) (*AddRelatedAssetsResult, error) {
464+
res := &AddRelatedAssetsResult{}
465+
_, err := a.post(ctx, api.BuildPath(assets, relatedComplementaryAssets, params.AssetID), params, res)
466+
467+
return res, err
468+
}
469+
470+
func (a *API) DeleteRelatedComplementaryAssetsByAssetIDs(ctx context.Context, params RelatedComplementaryAssetsByAssetIDsParams) (*DeleteRelatedAssetsResult, error) {
471+
res := &DeleteRelatedAssetsResult{}
472+
_, err := a.delete(ctx, api.BuildPath(assets, relatedComplementaryAssets, params.AssetID), params, res)
473+
474+
return res, err
475+
}

0 commit comments

Comments
 (0)