diff --git a/README.md b/README.md index b0f0296208ba..8211b5758ec6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -# Microsoft Azure SDK for .NET +## All PRs should be opened against master branch. This branch is being retired and will be deleted. + +### Microsoft Azure SDK for .NET ---------- The Microsoft Azure SDK for .NET allows you to build applications that take advantage of scalable cloud computing resources. diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestFaceList.json b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestFaceList.json new file mode 100644 index 000000000000..899a124ffa22 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestFaceList.json @@ -0,0 +1,720 @@ +{ + "Entries": [ + { + "RequestUri": "/face/v1.0/facelists/source-face-list-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9mYWNlbGlzdHMvc291cmNlLWZhY2UtbGlzdC1pZA==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"name\": \"namesource-face-list-id\",\r\n \"userData\": \"userdatasource-face-list-id\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "87" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:41 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "63431b24-2325-4e30-ae41-ddc56cafa1dc" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/facelists/source-face-list-id/persistedfaces", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9mYWNlbGlzdHMvc291cmNlLWZhY2UtbGlzdC1pZC9wZXJzaXN0ZWRmYWNlcw==", + "RequestMethod": "POST", + "RequestBody": "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", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/octet-stream" + ], + "Content-Length": [ + "9344" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:42 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "2bf23d45-d7db-45ff-8b02-198ebbf5f7f3" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "58" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"persistedFaceId\": \"60de9ca0-a9ab-4f3c-aac0-b326a0de90d0\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHM=", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"type\": \"FaceList\",\r\n \"objectId\": \"source-face-list-id\",\r\n \"applyScope\": [\r\n \"\"\r\n ],\r\n \"userData\": \"User provided data for the snapshot.\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "177" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:42 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "/operations/fbfd27cd-d7db-479e-957e-9a3897e32745" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "3d4f5167-d869-4ef6-bd21-c9b1563f863a" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/operations/fbfd27cd-d7db-479e-957e-9a3897e32745", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zL2ZiZmQyN2NkLWQ3ZGItNDc5ZS05NTdlLTlhMzg5N2UzMjc0NQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:42 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "454156cd-04e1-47aa-acb4-76e3b38eecf4" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:42.8832101Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:43.0109403Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/fbfd27cd-d7db-479e-957e-9a3897e32745", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zL2ZiZmQyN2NkLWQ3ZGItNDc5ZS05NTdlLTlhMzg5N2UzMjc0NQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:44 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "1469bc1b-6e6c-4e81-9cee-975bb40e9159" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:42.8832101Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:44.2768126Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/fbfd27cd-d7db-479e-957e-9a3897e32745", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zL2ZiZmQyN2NkLWQ3ZGItNDc5ZS05NTdlLTlhMzg5N2UzMjc0NQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:45 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "c9f7211b-75c4-4318-b214-0cdadcc155b9" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "199" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:42.8832101Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:44.5267791Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": \"/snapshots/f0704384-1519-443d-a46c-999dfb3b2059\",\r\n \"Status\": \"succeeded\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots/f0704384-1519-443d-a46c-999dfb3b2059/apply", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHMvZjA3MDQzODQtMTUxOS00NDNkLWE0NmMtOTk5ZGZiM2IyMDU5L2FwcGx5", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"objectId\": \"target-face-list-id\",\r\n \"mode\": \"CreateNew\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "65" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:45 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "/operations/86a6b9f5-86df-47c2-b2d2-412c5990d085" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "70689f4b-25fb-41ea-9622-d66bb7392df3" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/operations/86a6b9f5-86df-47c2-b2d2-412c5990d085", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzg2YTZiOWY1LTg2ZGYtNDdjMi1iMmQyLTQxMmM1OTkwZDA4NQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:45 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "7e5c7aac-b760-41aa-86d8-00ccb6c14f0d" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "151" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:45.8506017Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:45.979911Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/86a6b9f5-86df-47c2-b2d2-412c5990d085", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzg2YTZiOWY1LTg2ZGYtNDdjMi1iMmQyLTQxMmM1OTkwZDA4NQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:47 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "b76975c8-4998-43c2-ae78-567e855e8e78" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "181" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:45.8506017Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:46.3236725Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": \"/facelist/target-face-list-id\",\r\n \"Status\": \"succeeded\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/facelists/target-face-list-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9mYWNlbGlzdHMvdGFyZ2V0LWZhY2UtbGlzdC1pZA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:47 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "4bb4bea8-6486-4938-871c-6887429f9a18" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "204" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"persistedFaces\": [\r\n {\r\n \"persistedFaceId\": \"60de9ca0-a9ab-4f3c-aac0-b326a0de90d0\",\r\n \"userData\": null\r\n }\r\n ],\r\n \"faceListId\": \"target-face-list-id\",\r\n \"name\": \"namesource-face-list-id\",\r\n \"userData\": \"userdatasource-face-list-id\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/facelists/source-face-list-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9mYWNlbGlzdHMvc291cmNlLWZhY2UtbGlzdC1pZA==", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:47 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "6f2e45f3-a681-4564-b218-eee68f0101fb" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/facelists/target-face-list-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9mYWNlbGlzdHMvdGFyZ2V0LWZhY2UtbGlzdC1pZA==", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:47 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "496ceed0-8fbf-450e-9020-8fe568553028" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots/f0704384-1519-443d-a46c-999dfb3b2059", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHMvZjA3MDQzODQtMTUxOS00NDNkLWE0NmMtOTk5ZGZiM2IyMDU5", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:48 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "dc424c46-8251-4766-8b4e-ab0de22f2712" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": {} +} \ No newline at end of file diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestLargeFaceList.json b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestLargeFaceList.json new file mode 100644 index 000000000000..7e4e0b480511 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestLargeFaceList.json @@ -0,0 +1,939 @@ +{ + "Entries": [ + { + "RequestUri": "/face/v1.0/largefacelists/source-large-face-list-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy9zb3VyY2UtbGFyZ2UtZmFjZS1saXN0LWlk", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"name\": \"namesource-large-face-list-id\",\r\n \"userData\": \"userdatasource-large-face-list-id\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "99" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:31 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "877563ab-f129-471c-a25f-a6daffa4c259" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largefacelists/source-large-face-list-id/persistedfaces", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy9zb3VyY2UtbGFyZ2UtZmFjZS1saXN0LWlkL3BlcnNpc3RlZGZhY2Vz", + "RequestMethod": "POST", + "RequestBody": "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", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/octet-stream" + ], + "Content-Length": [ + "9344" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:32 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "3637427e-5bc2-4c3e-8ea1-69b778f07505" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "74" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"persistedFaceId\": \"3e1e0d9b-f5af-4adf-8b26-cf1c6d2a4ec7\",\r\n \"userData\": null\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largefacelists/source-large-face-list-id/train", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy9zb3VyY2UtbGFyZ2UtZmFjZS1saXN0LWlkL3RyYWlu", + "RequestMethod": "POST", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:32 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "http://westus.ppe.facev1.api.cognitive.trafficmanager.net:8080/largefacelists/source-large-face-list-id/training" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "f3d32d97-dfaf-48b8-89c5-643bc50ebd24" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Access-Control-Expose-Headers": [ + "Operation-Location" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/largefacelists/source-large-face-list-id/training", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy9zb3VyY2UtbGFyZ2UtZmFjZS1saXN0LWlkL3RyYWluaW5n", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:32 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "28c3a488-1f95-4fc9-823d-310eba64be53" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "136" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"status\": \"running\",\r\n \"createdDateTime\": \"2019-01-07T10:24:32.7273583Z\",\r\n \"lastActionDateTime\": \"2019-01-07T10:24:32.7273583Z\",\r\n \"message\": null\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largefacelists/source-large-face-list-id/training", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy9zb3VyY2UtbGFyZ2UtZmFjZS1saXN0LWlkL3RyYWluaW5n", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:34 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "f3ba69b9-82f0-409c-a423-f209bcb98171" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "202" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"status\": \"succeeded\",\r\n \"createdDateTime\": \"2019-01-07T10:24:32.7273583Z\",\r\n \"lastActionDateTime\": \"2019-01-07T10:24:33.1344296Z\",\r\n \"message\": null,\r\n \"lastSuccessfulTrainingDateTime\": \"2019-01-07T10:24:33.1344296Z\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHM=", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"type\": \"LargeFaceList\",\r\n \"objectId\": \"source-large-face-list-id\",\r\n \"applyScope\": [\r\n \"\"\r\n ],\r\n \"userData\": \"User provided data for the snapshot.\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "188" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:34 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "/operations/4681f303-19c7-468d-bc32-42cb3753376d" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "79c2124c-b658-463d-b999-453498735d9a" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/operations/4681f303-19c7-468d-bc32-42cb3753376d", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzQ2ODFmMzAzLTE5YzctNDY4ZC1iYzMyLTQyY2IzNzUzMzc2ZA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:34 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "ec79f25d-a234-49bf-8238-5a28365806b3" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "146" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:34.5907115Z\",\r\n \"LastActionTime\": \"0001-01-01T00:00:00\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"notStarted\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/4681f303-19c7-468d-bc32-42cb3753376d", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzQ2ODFmMzAzLTE5YzctNDY4ZC1iYzMyLTQyY2IzNzUzMzc2ZA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:36 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "bcbfc515-459c-46f5-9354-d270041abe1d" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:34.5907115Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:35.0600991Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/4681f303-19c7-468d-bc32-42cb3753376d", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzQ2ODFmMzAzLTE5YzctNDY4ZC1iYzMyLTQyY2IzNzUzMzc2ZA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:37 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "0d379256-0b0e-4bee-afd2-d04797511aed" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "199" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:34.5907115Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:37.0323683Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": \"/snapshots/6e7d2559-1b8a-49e0-b6cf-9fe2278d04b2\",\r\n \"Status\": \"succeeded\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots/6e7d2559-1b8a-49e0-b6cf-9fe2278d04b2/apply", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHMvNmU3ZDI1NTktMWI4YS00OWUwLWI2Y2YtOWZlMjI3OGQwNGIyL2FwcGx5", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"objectId\": \"target-large-face-list-id\",\r\n \"mode\": \"CreateNew\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "71" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:37 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "/operations/423ee8dd-ecb9-4c89-afc4-3450d3960fea" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "91f8cd18-0369-46b1-b014-9331635222e4" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/operations/423ee8dd-ecb9-4c89-afc4-3450d3960fea", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzQyM2VlOGRkLWVjYjktNGM4OS1hZmM0LTM0NTBkMzk2MGZlYQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:37 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "dfaf48c3-5a7c-4974-b4b0-5cbbfc3f1780" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:37.7163805Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:37.8448285Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/423ee8dd-ecb9-4c89-afc4-3450d3960fea", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzQyM2VlOGRkLWVjYjktNGM4OS1hZmM0LTM0NTBkMzk2MGZlYQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:39 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "8d217fc6-ccd1-411f-8a90-9f003d0a7592" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "192" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:37.7163805Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:38.3761463Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": \"/largefacelist/target-large-face-list-id\",\r\n \"Status\": \"succeeded\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largefacelists/target-large-face-list-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy90YXJnZXQtbGFyZ2UtZmFjZS1saXN0LWlk", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:39 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "87a89017-6a1e-4e19-b413-b746290ff939" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "133" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"largeFaceListId\": \"target-large-face-list-id\",\r\n \"name\": \"namesource-large-face-list-id\",\r\n \"userData\": \"userdatasource-large-face-list-id\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largefacelists/target-large-face-list-id/persistedfaces", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy90YXJnZXQtbGFyZ2UtZmFjZS1saXN0LWlkL3BlcnNpc3RlZGZhY2Vz", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:39 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "9c29aa69-49bb-4660-b5dc-a1bfc7214220" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "76" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "[\r\n {\r\n \"persistedFaceId\": \"3e1e0d9b-f5af-4adf-8b26-cf1c6d2a4ec7\",\r\n \"userData\": null\r\n }\r\n]", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largefacelists/source-large-face-list-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy9zb3VyY2UtbGFyZ2UtZmFjZS1saXN0LWlk", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:40 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "d01548ac-b3d5-4268-82d2-6b91f17f4cb4" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largefacelists/target-large-face-list-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZWZhY2VsaXN0cy90YXJnZXQtbGFyZ2UtZmFjZS1saXN0LWlk", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:40 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "f1ec7d8b-2161-4ea6-b064-15422507ed3e" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots/6e7d2559-1b8a-49e0-b6cf-9fe2278d04b2", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHMvNmU3ZDI1NTktMWI4YS00OWUwLWI2Y2YtOWZlMjI3OGQwNGIy", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:40 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "fa444c50-0188-42a8-9522-ba7b44d0aefe" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": {} +} \ No newline at end of file diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestLargePersonGroup.json b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestLargePersonGroup.json new file mode 100644 index 000000000000..e123964ddab3 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestLargePersonGroup.json @@ -0,0 +1,1053 @@ +{ + "Entries": [ + { + "RequestUri": "/face/v1.0/largepersongroups/source-large-person-group-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy9zb3VyY2UtbGFyZ2UtcGVyc29uLWdyb3VwLWlk", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"name\": \"namesource-large-person-group-id\",\r\n \"userData\": \"userdatasource-large-person-group-id\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "105" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:48 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "f470bd86-e1b4-4780-a5eb-c12c6515b2fd" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/source-large-person-group-id/persons", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy9zb3VyY2UtbGFyZ2UtcGVyc29uLWdyb3VwLWlkL3BlcnNvbnM=", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"name\": \"personNamesource-large-person-group-id\",\r\n \"userData\": \"personUserdatasource-large-person-group-id\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "117" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:49 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "e276dd4f-8320-43e8-a04a-fba096b69ef3" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "51" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"personId\": \"bec25e2c-81a2-4762-b5ef-046dee97a280\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/source-large-person-group-id/persons/bec25e2c-81a2-4762-b5ef-046dee97a280/persistedfaces", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy9zb3VyY2UtbGFyZ2UtcGVyc29uLWdyb3VwLWlkL3BlcnNvbnMvYmVjMjVlMmMtODFhMi00NzYyLWI1ZWYtMDQ2ZGVlOTdhMjgwL3BlcnNpc3RlZGZhY2Vz", + "RequestMethod": "POST", + "RequestBody": "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", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/octet-stream" + ], + "Content-Length": [ + "9344" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:49 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "d0b3165d-b70a-49ae-89b1-e5b849e42a3b" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "58" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"persistedFaceId\": \"b82527fa-df32-4fb0-bc3e-a424a710de1a\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/source-large-person-group-id/train", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy9zb3VyY2UtbGFyZ2UtcGVyc29uLWdyb3VwLWlkL3RyYWlu", + "RequestMethod": "POST", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:49 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "http://westus.ppe.facev1.api.cognitive.trafficmanager.net:8080/largepersongroups/source-large-person-group-id/training" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "9545ff95-8cce-40f5-a150-c2079d2f6814" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Access-Control-Expose-Headers": [ + "Operation-Location" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/source-large-person-group-id/training", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy9zb3VyY2UtbGFyZ2UtcGVyc29uLWdyb3VwLWlkL3RyYWluaW5n", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:49 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "e1f63943-149a-4da9-b9d7-c11a0fdffde1" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "136" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"status\": \"running\",\r\n \"createdDateTime\": \"2019-01-07T10:24:50.5516433Z\",\r\n \"lastActionDateTime\": \"2019-01-07T10:24:50.5516433Z\",\r\n \"message\": null\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/source-large-person-group-id/training", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy9zb3VyY2UtbGFyZ2UtcGVyc29uLWdyb3VwLWlkL3RyYWluaW5n", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:52 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "390f8084-adeb-4597-893e-6c9554b0e889" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "202" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"status\": \"succeeded\",\r\n \"createdDateTime\": \"2019-01-07T10:24:50.5516433Z\",\r\n \"lastActionDateTime\": \"2019-01-07T10:24:50.7828356Z\",\r\n \"message\": null,\r\n \"lastSuccessfulTrainingDateTime\": \"2019-01-07T10:24:50.7828356Z\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHM=", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"type\": \"LargePersonGroup\",\r\n \"objectId\": \"source-large-person-group-id\",\r\n \"applyScope\": [\r\n \"\"\r\n ],\r\n \"userData\": \"User provided data for the snapshot.\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "194" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:52 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "/operations/2fc128e3-97e0-401d-bb4a-b72beea46134" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "04f90809-49c0-4122-8411-da2115d0817d" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/operations/2fc128e3-97e0-401d-bb4a-b72beea46134", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzJmYzEyOGUzLTk3ZTAtNDAxZC1iYjRhLWI3MmJlZWE0NjEzNA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:52 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "bb86fac2-63f0-46ae-82a9-b63e7bac61ec" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:52.2704995Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:52.4027112Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/2fc128e3-97e0-401d-bb4a-b72beea46134", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzJmYzEyOGUzLTk3ZTAtNDAxZC1iYjRhLWI3MmJlZWE0NjEzNA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:53 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "95e46071-b2f5-4768-aa81-64f486e64690" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:52.2704995Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:53.7309473Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/2fc128e3-97e0-401d-bb4a-b72beea46134", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzJmYzEyOGUzLTk3ZTAtNDAxZC1iYjRhLWI3MmJlZWE0NjEzNA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:55 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "83b665b2-9b2e-4c7b-8b23-9f4c234d10e4" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "199" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:52.2704995Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:54.2466111Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": \"/snapshots/fdadf3ec-9f41-4388-9658-d8747ac4acde\",\r\n \"Status\": \"succeeded\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots/fdadf3ec-9f41-4388-9658-d8747ac4acde/apply", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHMvZmRhZGYzZWMtOWY0MS00Mzg4LTk2NTgtZDg3NDdhYzRhY2RlL2FwcGx5", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"objectId\": \"17d6fbc7-0b99-4de5-af40-3c48672b6273\",\r\n \"mode\": \"CreateNew\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "82" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:55 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "/operations/094f7267-bc81-4cf7-8c33-deb834279430" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "0b69120b-aba7-414a-9ff0-8e59588fd355" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/operations/094f7267-bc81-4cf7-8c33-deb834279430", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzA5NGY3MjY3LWJjODEtNGNmNy04YzMzLWRlYjgzNDI3OTQzMA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:55 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "ab9948b3-531a-48ac-b14a-ed36cec2ec64" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:55.2344637Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:55.3717802Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/094f7267-bc81-4cf7-8c33-deb834279430", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzA5NGY3MjY3LWJjODEtNGNmNy04YzMzLWRlYjgzNDI3OTQzMA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:56 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "987de4ca-81d2-4b3f-a566-158631056c12" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "206" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:24:55.2344637Z\",\r\n \"LastActionTime\": \"2019-01-07T10:24:55.7780114Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": \"/largepersongroup/17d6fbc7-0b99-4de5-af40-3c48672b6273\",\r\n \"Status\": \"succeeded\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/17d6fbc7-0b99-4de5-af40-3c48672b6273", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy8xN2Q2ZmJjNy0wYjk5LTRkZTUtYWY0MC0zYzQ4NjcyYjYyNzM=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:56 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "44dbb5a6-0837-4497-8168-06ea58d8df96" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "153" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"largePersonGroupId\": \"17d6fbc7-0b99-4de5-af40-3c48672b6273\",\r\n \"name\": \"namesource-large-person-group-id\",\r\n \"userData\": \"userdatasource-large-person-group-id\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/17d6fbc7-0b99-4de5-af40-3c48672b6273/persons/bec25e2c-81a2-4762-b5ef-046dee97a280", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy8xN2Q2ZmJjNy0wYjk5LTRkZTUtYWY0MC0zYzQ4NjcyYjYyNzMvcGVyc29ucy9iZWMyNWUyYy04MWEyLTQ3NjItYjVlZi0wNDZkZWU5N2EyODA=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:56 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "40e83e9d-a874-4d6d-9f46-b9619c6bb1df" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "215" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"personId\": \"bec25e2c-81a2-4762-b5ef-046dee97a280\",\r\n \"persistedFaceIds\": [\r\n \"b82527fa-df32-4fb0-bc3e-a424a710de1a\"\r\n ],\r\n \"name\": \"personNamesource-large-person-group-id\",\r\n \"userData\": \"personUserdatasource-large-person-group-id\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/17d6fbc7-0b99-4de5-af40-3c48672b6273/persons/bec25e2c-81a2-4762-b5ef-046dee97a280/persistedfaces/b82527fa-df32-4fb0-bc3e-a424a710de1a", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy8xN2Q2ZmJjNy0wYjk5LTRkZTUtYWY0MC0zYzQ4NjcyYjYyNzMvcGVyc29ucy9iZWMyNWUyYy04MWEyLTQ3NjItYjVlZi0wNDZkZWU5N2EyODAvcGVyc2lzdGVkZmFjZXMvYjgyNTI3ZmEtZGYzMi00ZmIwLWJjM2UtYTQyNGE3MTBkZTFh", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:57 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "7db44d40-6fff-4143-ac1f-5deec3aebe6d" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "74" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"persistedFaceId\": \"b82527fa-df32-4fb0-bc3e-a424a710de1a\",\r\n \"userData\": null\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/source-large-person-group-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy9zb3VyY2UtbGFyZ2UtcGVyc29uLWdyb3VwLWlk", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:57 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "a3ffbc37-8588-43af-97ef-22e3473514b5" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/largepersongroups/17d6fbc7-0b99-4de5-af40-3c48672b6273", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9sYXJnZXBlcnNvbmdyb3Vwcy8xN2Q2ZmJjNy0wYjk5LTRkZTUtYWY0MC0zYzQ4NjcyYjYyNzM=", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:57 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "27c5f020-7b14-423d-a038-237563fc2e68" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots/fdadf3ec-9f41-4388-9658-d8747ac4acde", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHMvZmRhZGYzZWMtOWY0MS00Mzg4LTk2NTgtZDg3NDdhYzRhY2Rl", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:58 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "2c320730-52ef-4f17-b426-abfc35e32296" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": {} +} \ No newline at end of file diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestPersonGroup.json b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestPersonGroup.json new file mode 100644 index 000000000000..da1c910e4d79 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SessionRecords/FaceSDK.Tests.SnapshotTests/FaceSnapshotTestPersonGroup.json @@ -0,0 +1,999 @@ +{ + "Entries": [ + { + "RequestUri": "/face/v1.0/persongroups/source-person-group-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvc291cmNlLXBlcnNvbi1ncm91cC1pZA==", + "RequestMethod": "PUT", + "RequestBody": "{\r\n \"name\": \"namesource-person-group-id\",\r\n \"userData\": \"userdatasource-person-group-id\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "93" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:58 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "38a3fbfe-a8e7-4e2a-8ca3-a254f0b5c3ff" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/persongroups/source-person-group-id/persons", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvc291cmNlLXBlcnNvbi1ncm91cC1pZC9wZXJzb25z", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"name\": \"personNamesource-person-group-id\",\r\n \"userData\": \"personUserdatasource-person-group-id\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "105" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:59 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "bb9f8191-da27-439c-8614-f4942a453101" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "51" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"personId\": \"728cfa60-6458-43d4-bcce-75e15b267c3d\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/persongroups/source-person-group-id/persons/728cfa60-6458-43d4-bcce-75e15b267c3d/persistedfaces", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvc291cmNlLXBlcnNvbi1ncm91cC1pZC9wZXJzb25zLzcyOGNmYTYwLTY0NTgtNDNkNC1iY2NlLTc1ZTE1YjI2N2MzZC9wZXJzaXN0ZWRmYWNlcw==", + "RequestMethod": "POST", + "RequestBody": "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", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/octet-stream" + ], + "Content-Length": [ + "9344" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:59 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "0384a4f6-4347-4dde-bf4e-cf331d2c8144" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "58" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"persistedFaceId\": \"d1128c15-a246-44d1-b6eb-0e3b0fb69615\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/persongroups/source-person-group-id/train", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvc291cmNlLXBlcnNvbi1ncm91cC1pZC90cmFpbg==", + "RequestMethod": "POST", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:59 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "http://westus.ppe.facev1.api.cognitive.trafficmanager.net:8080/persongroups/source-person-group-id/training" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "b56c845f-9d81-4506-8931-3cf79f3dc515" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Access-Control-Expose-Headers": [ + "Operation-Location" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/persongroups/source-person-group-id/training", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvc291cmNlLXBlcnNvbi1ncm91cC1pZC90cmFpbmluZw==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:24:59 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "88daa4ea-467a-4eb5-8425-8a31babf04cf" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "138" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"status\": \"succeeded\",\r\n \"createdDateTime\": \"2019-01-07T10:25:00.6016979Z\",\r\n \"lastActionDateTime\": \"2019-01-07T10:25:00.8060351Z\",\r\n \"message\": null\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHM=", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"type\": \"PersonGroup\",\r\n \"objectId\": \"source-person-group-id\",\r\n \"applyScope\": [\r\n \"\"\r\n ],\r\n \"userData\": \"User provided data for the snapshot.\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "183" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:01 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "/operations/27ec6693-725d-4445-9cef-4ffbd862e106" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "4a0c2e5b-c433-4898-9de7-6afd6000af9e" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/operations/27ec6693-725d-4445-9cef-4ffbd862e106", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzI3ZWM2NjkzLTcyNWQtNDQ0NS05Y2VmLTRmZmJkODYyZTEwNg==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:01 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "2278e651-bd6b-4c77-afd9-8e79f4db3ac1" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:25:01.1173622Z\",\r\n \"LastActionTime\": \"2019-01-07T10:25:01.2279325Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/27ec6693-725d-4445-9cef-4ffbd862e106", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzI3ZWM2NjkzLTcyNWQtNDQ0NS05Y2VmLTRmZmJkODYyZTEwNg==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:02 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "116059e8-9cac-4112-81ff-230c111ea055" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "152" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:25:01.1173622Z\",\r\n \"LastActionTime\": \"2019-01-07T10:25:02.5405108Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/27ec6693-725d-4445-9cef-4ffbd862e106", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzI3ZWM2NjkzLTcyNWQtNDQ0NS05Y2VmLTRmZmJkODYyZTEwNg==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:03 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "4f85a718-3ae5-41f1-8926-e624fc0c8d4d" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "199" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:25:01.1173622Z\",\r\n \"LastActionTime\": \"2019-01-07T10:25:03.1186324Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": \"/snapshots/2fd742cb-0e02-4297-8238-a00f588fa213\",\r\n \"Status\": \"succeeded\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots/2fd742cb-0e02-4297-8238-a00f588fa213/apply", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHMvMmZkNzQyY2ItMGUwMi00Mjk3LTgyMzgtYTAwZjU4OGZhMjEzL2FwcGx5", + "RequestMethod": "POST", + "RequestBody": "{\r\n \"objectId\": \"target-person-group-id\",\r\n \"mode\": \"CreateNew\"\r\n}", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Content-Length": [ + "68" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:03 GMT" + ], + "Pragma": [ + "no-cache" + ], + "Operation-Location": [ + "/operations/3d81406a-d0d7-4694-a0bd-dfe7131d51f1" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "58ed55fb-b0ea-4a04-9c12-7d80d0644c0a" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 202 + }, + { + "RequestUri": "/face/v1.0/operations/3d81406a-d0d7-4694-a0bd-dfe7131d51f1", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzNkODE0MDZhLWQwZDctNDY5NC1hMGJkLWRmZTcxMzFkNTFmMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:03 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "24a74b31-eb20-4dab-817f-bf8ead7fe374" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "151" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:25:04.1196403Z\",\r\n \"LastActionTime\": \"2019-01-07T10:25:04.368732Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": null,\r\n \"Status\": \"running\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/operations/3d81406a-d0d7-4694-a0bd-dfe7131d51f1", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9vcGVyYXRpb25zLzNkODE0MDZhLWQwZDctNDY5NC1hMGJkLWRmZTcxMzFkNTFmMQ==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:05 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "a78f6877-1062-41ef-affb-e85b07c380f3" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "187" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"CreatedTime\": \"2019-01-07T10:25:04.1196403Z\",\r\n \"LastActionTime\": \"2019-01-07T10:25:04.5093774Z\",\r\n \"Message\": null,\r\n \"ResourceLocation\": \"/persongroup/target-person-group-id\",\r\n \"Status\": \"succeeded\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/persongroups/target-person-group-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvdGFyZ2V0LXBlcnNvbi1ncm91cC1pZA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:05 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "3bf8a57b-fe32-4a9f-b163-d4b661100603" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "122" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"personGroupId\": \"target-person-group-id\",\r\n \"name\": \"namesource-person-group-id\",\r\n \"userData\": \"userdatasource-person-group-id\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/persongroups/target-person-group-id/persons/728cfa60-6458-43d4-bcce-75e15b267c3d", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvdGFyZ2V0LXBlcnNvbi1ncm91cC1pZC9wZXJzb25zLzcyOGNmYTYwLTY0NTgtNDNkNC1iY2NlLTc1ZTE1YjI2N2MzZA==", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:05 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "c7f2dd08-338a-4621-9abb-d157fc9e8036" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "203" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"personId\": \"728cfa60-6458-43d4-bcce-75e15b267c3d\",\r\n \"persistedFaceIds\": [\r\n \"d1128c15-a246-44d1-b6eb-0e3b0fb69615\"\r\n ],\r\n \"name\": \"personNamesource-person-group-id\",\r\n \"userData\": \"personUserdatasource-person-group-id\"\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/persongroups/target-person-group-id/persons/728cfa60-6458-43d4-bcce-75e15b267c3d/persistedfaces/d1128c15-a246-44d1-b6eb-0e3b0fb69615", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvdGFyZ2V0LXBlcnNvbi1ncm91cC1pZC9wZXJzb25zLzcyOGNmYTYwLTY0NTgtNDNkNC1iY2NlLTc1ZTE1YjI2N2MzZC9wZXJzaXN0ZWRmYWNlcy9kMTEyOGMxNS1hMjQ2LTQ0ZDEtYjZlYi0wZTNiMGZiNjk2MTU=", + "RequestMethod": "GET", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:05 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "90885339-2937-4779-9ea3-74f4ca7ccf03" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "74" + ], + "Content-Type": [ + "application/json; charset=utf-8" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "{\r\n \"persistedFaceId\": \"d1128c15-a246-44d1-b6eb-0e3b0fb69615\",\r\n \"userData\": null\r\n}", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/persongroups/source-person-group-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvc291cmNlLXBlcnNvbi1ncm91cC1pZA==", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:06 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "c761cb93-b2b7-4be0-9f6f-69ba6a95d6ad" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/persongroups/target-person-group-id", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9wZXJzb25ncm91cHMvdGFyZ2V0LXBlcnNvbi1ncm91cC1pZA==", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:06 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "b9d8a1c6-706c-45b7-b85f-d39cde89bf5f" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + }, + { + "RequestUri": "/face/v1.0/snapshots/2fd742cb-0e02-4297-8238-a00f588fa213", + "EncodedRequestUri": "L2ZhY2UvdjEuMC9zbmFwc2hvdHMvMmZkNzQyY2ItMGUwMi00Mjk3LTgyMzgtYTAwZjU4OGZhMjEz", + "RequestMethod": "DELETE", + "RequestBody": "", + "RequestHeaders": { + "Ocp-Apim-Subscription-Key": [ + "" + ], + "User-Agent": [ + "FxVersion/4.6.26614.01", + "OSName/Windows", + "OSVersion/Microsoft.Windows.10.0.17763.", + "Microsoft.Azure.CognitiveServices.Vision.Face.FaceClient/2.2.0.0" + ] + }, + "ResponseHeaders": { + "Cache-Control": [ + "no-cache" + ], + "Date": [ + "Mon, 07 Jan 2019 10:25:06 GMT" + ], + "Pragma": [ + "no-cache" + ], + "X-AspNet-Version": [ + "4.0.30319" + ], + "X-Powered-By": [ + "ASP.NET" + ], + "apim-request-id": [ + "5e953945-5f45-4ee6-a700-90da7f423084" + ], + "Strict-Transport-Security": [ + "max-age=31536000; includeSubDomains; preload" + ], + "x-content-type-options": [ + "nosniff" + ], + "Content-Length": [ + "0" + ], + "Expires": [ + "-1" + ] + }, + "ResponseBody": "", + "StatusCode": 200 + } + ], + "Names": {}, + "Variables": {} +} \ No newline at end of file diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SnapshotTests.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SnapshotTests.cs new file mode 100644 index 000000000000..c5f9959ade23 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face.Tests/SnapshotTests.cs @@ -0,0 +1,341 @@ +using Microsoft.Azure.CognitiveServices.Vision.Face; +using Microsoft.Azure.CognitiveServices.Vision.Face.Models; +using Microsoft.Azure.Test.HttpRecorder; +using Microsoft.Rest.ClientRuntime.Azure.TestFramework; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using Xunit; + +namespace FaceSDK.Tests +{ + public class SnapshotTests : BaseTests + { + // Set the apply scope of the snapshot here, which should be a list of Azure subscription ids + // of Cognitive Service Face. We can leave it as `Guid.Empty` in the `playback` test mode. + private static readonly List ApplyScope = new List { Guid.Empty }; + + [Fact] + public void FaceSnapshotTestFaceList() + { + using (MockContext context = MockContext.Start(this.GetType().FullName)) + { + HttpMockServer.Initialize(this.GetType().FullName, "FaceSnapshotTestFaceList"); + + var sourceFaceListId = "source-face-list-id"; + var name = $"name{sourceFaceListId}"; + var userdata = $"userdata{sourceFaceListId}"; + + IFaceClient client = GetFaceClient(HttpMockServer.CreateInstance()); + client.FaceList.CreateAsync(sourceFaceListId, name, userdata).Wait(); + + using (FileStream stream = new FileStream(Path.Combine("TestImages", "Satya4.jpg"), FileMode.Open)) + { + var persistedFace = client.FaceList.AddFaceFromStreamAsync(sourceFaceListId, stream).Result; + Assert.NotNull(persistedFace); + } + + var objectType = SnapshotObjectType.FaceList; + var objectId = sourceFaceListId; + var snapshotUserData = "User provided data for the snapshot."; + + var takeSnapshotResult = client.Snapshot.TakeAsync(objectType, objectId, ApplyScope, snapshotUserData).Result; + Assert.NotNull(takeSnapshotResult.OperationLocation); + + var operationStatus = GetOperationResult(client, takeSnapshotResult.OperationLocation); + Assert.NotNull(operationStatus); + Assert.Equal(OperationStatusType.Succeeded, operationStatus.Status); + + var resourceId = Guid.Parse(operationStatus.ResourceLocation.Split('/').Last()); + + var targetFacelistId = "target-face-list-id"; + var applyMode = SnapshotApplyMode.CreateNew; + var applySnapshotResult = client.Snapshot.ApplyAsync(resourceId, targetFacelistId, applyMode).Result; + Assert.NotNull(applySnapshotResult.OperationLocation); + + operationStatus = GetOperationResult(client, applySnapshotResult.OperationLocation); + Assert.NotNull(operationStatus); + Assert.Equal(operationStatus.Status.ToString(), OperationStatusType.Succeeded.ToString()); + + var targetObjectId = operationStatus.ResourceLocation.Split('/').Last(); + Assert.Equal(targetFacelistId, targetObjectId); + + var targetFacelist = client.FaceList.GetAsync(targetFacelistId).Result; + Assert.NotNull(targetFacelist); + Assert.True(targetFacelist.PersistedFaces.Count == 1); + + client.FaceList.DeleteAsync(sourceFaceListId).Wait(); + client.FaceList.DeleteAsync(targetFacelistId).Wait(); + client.Snapshot.DeleteAsync(resourceId).Wait(); + } + } + + [Fact] + public void FaceSnapshotTestLargeFaceList() + { + using (MockContext context = MockContext.Start(this.GetType().FullName)) + { + HttpMockServer.Initialize(this.GetType().FullName, "FaceSnapshotTestLargeFaceList"); + + var sourceLargeFacelistId = "source-large-face-list-id"; + var name = $"name{sourceLargeFacelistId}"; + var userdata = $"userdata{sourceLargeFacelistId}"; + + IFaceClient client = GetFaceClient(HttpMockServer.CreateInstance()); + client.LargeFaceList.CreateAsync(sourceLargeFacelistId, name, userdata).Wait(); + + using (FileStream stream = new FileStream(Path.Combine("TestImages", "Satya4.jpg"), FileMode.Open)) + { + var persistedFace = client.LargeFaceList.AddFaceFromStreamAsync(sourceLargeFacelistId, stream).Result; + Assert.NotNull(persistedFace); + } + + var trainingResult = GetTrainingResult(client, sourceLargeFacelistId, "LargeFaceList"); + Assert.NotNull(trainingResult); + Assert.Equal(TrainingStatusType.Succeeded, trainingResult.Status); + + var objectType = SnapshotObjectType.LargeFaceList; + var objectId = sourceLargeFacelistId; + var snapshotUserData = "User provided data for the snapshot."; + + var takeSnapshotResult = client.Snapshot.TakeAsync(objectType, objectId, ApplyScope, snapshotUserData).Result; + Assert.NotNull(takeSnapshotResult.OperationLocation); + + var operationStatus = GetOperationResult(client, takeSnapshotResult.OperationLocation); + Assert.NotNull(operationStatus); + Assert.Equal(OperationStatusType.Succeeded, operationStatus.Status); + + var resourceId = Guid.Parse(operationStatus.ResourceLocation.Split('/').Last()); + + var targetLargeFacelistId = "target-large-face-list-id"; + var applyMode = SnapshotApplyMode.CreateNew; + var applySnapshotResult = client.Snapshot.ApplyAsync(resourceId, targetLargeFacelistId, applyMode).Result; + Assert.NotNull(applySnapshotResult.OperationLocation); + + operationStatus = GetOperationResult(client, applySnapshotResult.OperationLocation); + Assert.NotNull(operationStatus); + Assert.Equal(operationStatus.Status.ToString(), OperationStatusType.Succeeded.ToString()); + + var targetObjectId = operationStatus.ResourceLocation.Split('/').Last(); + Assert.Equal(targetLargeFacelistId, targetObjectId); + + var targetLargeFacelist = client.LargeFaceList.GetAsync(targetLargeFacelistId).Result; + Assert.NotNull(targetLargeFacelist); + + var targetLargeFacelistFaces = client.LargeFaceList.ListFacesAsync(targetLargeFacelistId).Result; + Assert.True(targetLargeFacelistFaces.Count == 1); + + client.LargeFaceList.DeleteAsync(sourceLargeFacelistId).Wait(); + client.LargeFaceList.DeleteAsync(targetLargeFacelistId).Wait(); + client.Snapshot.DeleteAsync(resourceId).Wait(); + } + } + + [Fact] + public void FaceSnapshotTestLargePersonGroup() + { + using (MockContext context = MockContext.Start(this.GetType().FullName)) + { + HttpMockServer.Initialize(this.GetType().FullName, "FaceSnapshotTestLargePersonGroup"); + + var sourceLargePersonGroupId = "source-large-person-group-id"; + var name = $"name{sourceLargePersonGroupId}"; + var userdata = $"userdata{sourceLargePersonGroupId}"; + + IFaceClient client = GetFaceClient(HttpMockServer.CreateInstance()); + client.LargePersonGroup.CreateAsync(sourceLargePersonGroupId, name, userdata).Wait(); + + var personName = $"personName{sourceLargePersonGroupId}"; + var personUserdata = $"personUserdata{sourceLargePersonGroupId}"; + var largePersonGroupPersonId = client.LargePersonGroupPerson.CreateAsync(sourceLargePersonGroupId, personName, personUserdata).Result.PersonId; + + Guid largePersonGroupPersonFaceId; + + using (FileStream stream = new FileStream(Path.Combine("TestImages", "Satya4.jpg"), FileMode.Open)) + { + var persistedFace = client.LargePersonGroupPerson.AddFaceFromStreamAsync(sourceLargePersonGroupId, largePersonGroupPersonId, stream).Result; + Assert.NotNull(persistedFace); + largePersonGroupPersonFaceId = persistedFace.PersistedFaceId; + } + + var trainingResult = GetTrainingResult(client, sourceLargePersonGroupId, "LargePersonGroup"); + Assert.NotNull(trainingResult); + Assert.Equal(trainingResult.Status.ToString(), TrainingStatusType.Succeeded.ToString()); + + var objectType = SnapshotObjectType.LargePersonGroup; + var objectId = sourceLargePersonGroupId; + var snapshotUserData = "User provided data for the snapshot."; + + var takeSnapshotResult = client.Snapshot.TakeAsync(objectType, objectId, ApplyScope, snapshotUserData).Result; + Assert.NotNull(takeSnapshotResult.OperationLocation); + + var operationStatus = GetOperationResult(client, takeSnapshotResult.OperationLocation); + Assert.NotNull(operationStatus); + Assert.Equal(OperationStatusType.Succeeded, operationStatus.Status); + + var resourceId = Guid.Parse(operationStatus.ResourceLocation.Split('/').Last()); + + var targetLargePersonGroupId = Guid.NewGuid().ToString(); + var applyMode = SnapshotApplyMode.CreateNew; + var applySnapshotResult = client.Snapshot.ApplyAsync(resourceId, targetLargePersonGroupId, applyMode).Result; + Assert.NotNull(applySnapshotResult.OperationLocation); + + operationStatus = GetOperationResult(client, applySnapshotResult.OperationLocation); + Assert.NotNull(operationStatus); + Assert.Equal(OperationStatusType.Succeeded, operationStatus.Status); + + var targetObjectId = operationStatus.ResourceLocation.Split('/').Last(); + + var targetLargePersonGroup = client.LargePersonGroup.GetAsync(targetObjectId).Result; + Assert.NotNull(targetLargePersonGroup); + + var targetLargePersonGroupPerson = client.LargePersonGroupPerson.GetAsync(targetObjectId, largePersonGroupPersonId).Result; + Assert.NotNull(targetLargePersonGroupPerson); + + var targetLargePersonGroupPersonFace = client.LargePersonGroupPerson.GetFaceAsync(targetObjectId, largePersonGroupPersonId, largePersonGroupPersonFaceId).Result; + Assert.NotNull(targetLargePersonGroupPersonFace); + + client.LargePersonGroup.DeleteAsync(sourceLargePersonGroupId).Wait(); + client.LargePersonGroup.DeleteAsync(targetObjectId).Wait(); + client.Snapshot.DeleteAsync(resourceId).Wait(); + } + } + + [Fact] + public void FaceSnapshotTestPersonGroup() + { + using (MockContext context = MockContext.Start(this.GetType().FullName)) + { + HttpMockServer.Initialize(this.GetType().FullName, "FaceSnapshotTestPersonGroup"); + + var sourcePersonGroupId = "source-person-group-id"; + var name = $"name{sourcePersonGroupId}"; + var userdata = $"userdata{sourcePersonGroupId}"; + + IFaceClient client = GetFaceClient(HttpMockServer.CreateInstance()); + client.PersonGroup.CreateAsync(sourcePersonGroupId, name, userdata).Wait(); + + var personName = $"personName{sourcePersonGroupId}"; + var personUserdata = $"personUserdata{sourcePersonGroupId}"; + var personGroupPersonId = client.PersonGroupPerson.CreateAsync(sourcePersonGroupId, personName, personUserdata).Result.PersonId; + + Guid personGroupPersonFaceId; + + using (FileStream stream = new FileStream(Path.Combine("TestImages", "Satya4.jpg"), FileMode.Open)) + { + var persistedFace = client.PersonGroupPerson.AddFaceFromStreamAsync(sourcePersonGroupId, personGroupPersonId, stream).Result; + Assert.NotNull(persistedFace); + personGroupPersonFaceId = persistedFace.PersistedFaceId; + } + + var trainingResult = GetTrainingResult(client, sourcePersonGroupId, "PersonGroup"); + Assert.NotNull(trainingResult); + Assert.Equal(TrainingStatusType.Succeeded, trainingResult.Status); + + var objectType = SnapshotObjectType.PersonGroup; + var objectId = sourcePersonGroupId; + var snapshotUserData = "User provided data for the snapshot."; + + var takeSnapshotResult = client.Snapshot.TakeAsync(objectType, objectId, ApplyScope, snapshotUserData).Result; + Assert.NotNull(takeSnapshotResult.OperationLocation); + + var operationStatus = GetOperationResult(client, takeSnapshotResult.OperationLocation); + Assert.NotNull(operationStatus); + Assert.Equal(OperationStatusType.Succeeded, operationStatus.Status); + + var resourceId = Guid.Parse(operationStatus.ResourceLocation.Split('/').Last()); + + var targetPersonGroupId = "target-person-group-id"; + var applyMode = SnapshotApplyMode.CreateNew; + var applySnapshotResult = client.Snapshot.ApplyAsync(resourceId, targetPersonGroupId, applyMode).Result; + Assert.NotNull(applySnapshotResult.OperationLocation); + + operationStatus = GetOperationResult(client, applySnapshotResult.OperationLocation); + Assert.NotNull(operationStatus); + Assert.Equal(operationStatus.Status.ToString(), OperationStatusType.Succeeded.ToString()); + + var targetObjectId = operationStatus.ResourceLocation.Split('/').Last(); + Assert.Equal(targetPersonGroupId, targetObjectId); + + var targetPersonGroup = client.PersonGroup.GetAsync(targetPersonGroupId).Result; + Assert.NotNull(targetPersonGroup); + + var targetPersonGroupPerson = client.PersonGroupPerson.GetAsync(targetPersonGroupId, personGroupPersonId).Result; + Assert.NotNull(targetPersonGroupPerson); + + var targetPersonGroupPersonFace = client.PersonGroupPerson.GetFaceAsync(targetPersonGroupId, personGroupPersonId, personGroupPersonFaceId).Result; + Assert.NotNull(targetPersonGroupPersonFace); + + client.PersonGroup.DeleteAsync(sourcePersonGroupId).Wait(); + client.PersonGroup.DeleteAsync(targetPersonGroupId).Wait(); + client.Snapshot.DeleteAsync(resourceId).Wait(); + } + } + + private static OperationStatus GetOperationResult(IFaceClient client, string operationLocation, int timeIntervalInMilliSeconds = 1000) + { + Assert.True(Uri.IsWellFormedUriString(operationLocation, UriKind.RelativeOrAbsolute)); + var operationId = Guid.Parse(operationLocation.Split('/').Last()); + + var operationStatus = client.Snapshot.GetOperationStatusAsync(operationId).Result; + + while (operationStatus != null + && !operationStatus.Status.Equals(OperationStatusType.Succeeded) + && !operationStatus.Status.Equals(OperationStatusType.Failed)) + { + Thread.Sleep(timeIntervalInMilliSeconds); + + operationStatus = client.Snapshot.GetOperationStatusAsync(operationId).Result; + } + + return operationStatus; + } + + private static TrainingStatus GetTrainingResult(IFaceClient client, string resourceId, string resourceType, int timeIntervalInMilliSeconds = 1000) + { + TrainingStatus trainStatus; + + switch (resourceType) + { + case "LargeFaceList": + client.LargeFaceList.TrainAsync(resourceId).Wait(); + trainStatus = client.LargeFaceList.GetTrainingStatusAsync(resourceId).Result; + break; + case "PersonGroup": + client.PersonGroup.TrainAsync(resourceId).Wait(); + trainStatus = client.PersonGroup.GetTrainingStatusAsync(resourceId).Result; + break; + case "LargePersonGroup": + client.LargePersonGroup.TrainAsync(resourceId).Wait(); + trainStatus = client.LargePersonGroup.GetTrainingStatusAsync(resourceId).Result; + break; + default: + return null; + } + + while (trainStatus != null + && !trainStatus.Status.Equals(TrainingStatusType.Succeeded) + && !trainStatus.Status.Equals(TrainingStatusType.Failed)) + { + Thread.Sleep(timeIntervalInMilliSeconds); + + switch (resourceType) + { + case "LargeFaceList": + trainStatus = client.LargeFaceList.GetTrainingStatusAsync(resourceId).Result; + break; + case "PersonGroup": + trainStatus = client.PersonGroup.GetTrainingStatusAsync(resourceId).Result; + break; + case "LargePersonGroup": + trainStatus = client.LargePersonGroup.GetTrainingStatusAsync(resourceId).Result; + break; + } + } + + return trainStatus; + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceClient.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceClient.cs index ca42af3bd53a..95fe7f33e869 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceClient.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceClient.cs @@ -85,6 +85,11 @@ public partial class FaceClient : ServiceClient, IFaceClient /// public virtual ILargeFaceListOperations LargeFaceList { get; private set; } + /// + /// Gets the ISnapshotOperations. + /// + public virtual ISnapshotOperations Snapshot { get; private set; } + /// /// Initializes a new instance of the FaceClient class. /// @@ -179,6 +184,7 @@ private void Initialize() LargePersonGroupPerson = new LargePersonGroupPerson(this); LargePersonGroup = new LargePersonGroupOperations(this); LargeFaceList = new LargeFaceListOperations(this); + Snapshot = new SnapshotOperations(this); BaseUri = "{Endpoint}/face/v1.0"; SerializationSettings = new JsonSerializerSettings { diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceListOperations.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceListOperations.cs index 19040fc0afe5..a39b0a3657c2 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceListOperations.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceListOperations.cs @@ -857,7 +857,7 @@ public FaceListOperations(FaceClient client) } /// - /// Delete an existing face from a face list (given by a persisitedFaceId and a + /// Delete an existing face from a face list (given by a persistedFaceId and a /// faceListId). Persisted image related to the face will also be deleted. /// /// diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceListOperationsExtensions.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceListOperationsExtensions.cs index 903936b3faed..6b29ae8ced98 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceListOperationsExtensions.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/FaceListOperationsExtensions.cs @@ -126,7 +126,7 @@ public static partial class FaceListOperationsExtensions } /// - /// Delete an existing face from a face list (given by a persisitedFaceId and a + /// Delete an existing face from a face list (given by a persistedFaceId and a /// faceListId). Persisted image related to the face will also be deleted. /// /// diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/IFaceClient.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/IFaceClient.cs index c4a93dd061e4..d79b5d45c862 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/IFaceClient.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/IFaceClient.cs @@ -81,5 +81,10 @@ public partial interface IFaceClient : System.IDisposable /// ILargeFaceListOperations LargeFaceList { get; } + /// + /// Gets the ISnapshotOperations. + /// + ISnapshotOperations Snapshot { get; } + } } diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/IFaceListOperations.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/IFaceListOperations.cs index 1ed9a3f60022..2519d4dbccf3 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/IFaceListOperations.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/IFaceListOperations.cs @@ -138,7 +138,7 @@ public partial interface IFaceListOperations Task>> ListWithHttpMessagesAsync(Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); /// /// Delete an existing face from a face list (given by a - /// persisitedFaceId and a faceListId). Persisted image related to the + /// persistedFaceId and a faceListId). Persisted image related to the /// face will also be deleted. /// /// diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/ILargeFaceListOperations.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/ILargeFaceListOperations.cs index 50237ea1d3a3..b3a7fc7b57f8 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/ILargeFaceListOperations.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/ILargeFaceListOperations.cs @@ -181,7 +181,7 @@ public partial interface ILargeFaceListOperations Task TrainWithHttpMessagesAsync(string largeFaceListId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); /// /// Delete an existing face from a large face list (given by a - /// persisitedFaceId and a largeFaceListId). Persisted image related to + /// persistedFaceId and a largeFaceListId). Persisted image related to /// the face will also be deleted. /// /// diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/ISnapshotOperations.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/ISnapshotOperations.cs new file mode 100644 index 000000000000..7ca2ce35a7c6 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/ISnapshotOperations.cs @@ -0,0 +1,290 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face +{ + using Microsoft.Rest; + using Models; + using System.Collections; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + + /// + /// SnapshotOperations operations. + /// + public partial interface ISnapshotOperations + { + /// + /// Submit an operation to take a snapshot of face list, large face + /// list, person group or large person group, with user-specified + /// snapshot type, source object id, apply scope and an optional user + /// data. + /// The snapshot interfaces are for users to backup and restore their + /// face data from one face subscription to another, inside same region + /// or across regions. The workflow contains two phases, user first + /// calls Snapshot - Take to create a copy of the source object and + /// store it as a snapshot, then calls Snapshot - Apply to paste the + /// snapshot to target subscription. The snapshots are stored in a + /// centralized location (per Azure instance), so that they can be + /// applied cross accounts and regions. + /// Taking snapshot is an asynchronous operation. An operation id can + /// be obtained from the "Operation-Location" field in response header, + /// to be used in OperationStatus - Get for tracking the progress of + /// creating the snapshot. The snapshot id will be included in the + /// "resourceLocation" field in OperationStatus - Get response when the + /// operation status is "succeeded". + /// Snapshot taking time depends on the number of person and face + /// entries in the source object. It could be in seconds, or up to + /// several hours for 1,000,000 persons with multiple faces. + /// Snapshots will be automatically expired and cleaned in 48 hours + /// after it is created by Snapshot - Take. User can delete the + /// snapshot using Snapshot - Delete by themselves any time before + /// expiration. + /// Taking snapshot for a certain object will not block any other + /// operations against the object. All read-only operations (Get/List + /// and Identify/FindSimilar/Verify) can be conducted as usual. For all + /// writable operations, including Add/Update/Delete the source object + /// or its persons/faces and Train, they are not blocked but not + /// recommended because writable updates may not be reflected on the + /// snapshot during its taking. After snapshot taking is completed, all + /// readable and writable operations can work as normal. Snapshot will + /// also include the training results of the source object, which means + /// target subscription the snapshot applied to does not need re-train + /// the target object before calling Identify/FindSimilar. + /// + /// + /// User specified type for the source object to take snapshot from. + /// Currently FaceList, PersonGroup, LargeFaceList and LargePersonGroup + /// are supported. Possible values include: 'FaceList', + /// 'LargeFaceList', 'LargePersonGroup', 'PersonGroup' + /// + /// + /// User specified source object id to take snapshot from. + /// + /// + /// User specified array of target Face subscription ids for the + /// snapshot. For each snapshot, only subscriptions included in the + /// applyScope of Snapshot - Take can apply it. + /// + /// + /// User specified data about the snapshot for any purpose. Length + /// should not exceed 16KB. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task> TakeWithHttpMessagesAsync(SnapshotObjectType type, string objectId, IList applyScope, string userData = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// List all accessible snapshots with related information, including + /// snapshots that were taken by the user, or snapshots to be applied + /// to the user (subscription id was included in the applyScope in + /// Snapshot - Take). + /// + /// + /// User specified object type as a search filter. Possible values + /// include: 'FaceList', 'LargeFaceList', 'LargePersonGroup', + /// 'PersonGroup' + /// + /// + /// User specified snapshot apply scopes as a search filter. ApplyScope + /// is an array of the target Azure subscription ids for the snapshot, + /// specified by the user who created the snapshot by Snapshot - Take. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task>> ListWithHttpMessagesAsync(SnapshotObjectType? type = default(SnapshotObjectType?), IList applyScope = default(IList), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Retrieve information about a snapshot. Snapshot is only accessible + /// to the source subscription who took it, and target subscriptions + /// included in the applyScope in Snapshot - Take. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> GetWithHttpMessagesAsync(System.Guid snapshotId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Update the information of a snapshot. Only the source subscription + /// who took the snapshot can update the snapshot. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// Array of the target Face subscription ids for the snapshot, + /// specified by the user who created the snapshot when calling + /// Snapshot - Take. For each snapshot, only subscriptions included in + /// the applyScope of Snapshot - Take can apply it. + /// + /// + /// User specified data about the snapshot for any purpose. Length + /// should not exceed 16KB. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task UpdateWithHttpMessagesAsync(System.Guid snapshotId, IList applyScope = default(IList), string userData = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Delete an existing snapshot according to the snapshotId. All object + /// data and information in the snapshot will also be deleted. Only the + /// source subscription who took the snapshot can delete the snapshot. + /// If the user does not delete a snapshot with this API, the snapshot + /// will still be automatically deleted in 48 hours after creation. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task DeleteWithHttpMessagesAsync(System.Guid snapshotId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Submit an operation to apply a snapshot to current subscription. + /// For each snapshot, only subscriptions included in the applyScope of + /// Snapshot - Take can apply it. + /// The snapshot interfaces are for users to backup and restore their + /// face data from one face subscription to another, inside same region + /// or across regions. The workflow contains two phases, user first + /// calls Snapshot - Take to create a copy of the source object and + /// store it as a snapshot, then calls Snapshot - Apply to paste the + /// snapshot to target subscription. The snapshots are stored in a + /// centralized location (per Azure instance), so that they can be + /// applied cross accounts and regions. + /// Applying snapshot is an asynchronous operation. An operation id can + /// be obtained from the "Operation-Location" field in response header, + /// to be used in OperationStatus - Get for tracking the progress of + /// applying the snapshot. The target object id will be included in the + /// "resourceLocation" field in OperationStatus - Get response when the + /// operation status is "succeeded". + /// Snapshot applying time depends on the number of person and face + /// entries in the snapshot object. It could be in seconds, or up to 1 + /// hour for 1,000,000 persons with multiple faces. + /// Snapshots will be automatically expired and cleaned in 48 hours + /// after it is created by Snapshot - Take. So the target subscription + /// is required to apply the snapshot in 48 hours since its creation. + /// Applying a snapshot will not block any other operations against the + /// target object, however it is not recommended because the + /// correctness cannot be guaranteed during snapshot applying. After + /// snapshot applying is completed, all operations towards the target + /// object can work as normal. Snapshot also includes the training + /// results of the source object, which means target subscription the + /// snapshot applied to does not need re-train the target object before + /// calling Identify/FindSimilar. + /// One snapshot can be applied multiple times in parallel, while + /// currently only CreateNew apply mode is supported, which means the + /// apply operation will fail if target subscription already contains + /// an object of same type and using the same objectId. Users can + /// specify the "objectId" in request body to avoid such conflicts. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// User specified target object id to be created from the snapshot. + /// + /// + /// Snapshot applying mode. Currently only CreateNew is supported, + /// which means the apply operation will fail if target subscription + /// already contains an object of same type and using the same + /// objectId. Users can specify the "objectId" in request body to avoid + /// such conflicts. Possible values include: 'CreateNew' + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + Task> ApplyWithHttpMessagesAsync(System.Guid snapshotId, string objectId, SnapshotApplyMode mode = default(SnapshotApplyMode), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + /// + /// Retrieve the status of a take/apply snapshot operation. + /// + /// + /// Id referencing a particular take/apply snapshot operation. + /// + /// + /// The headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + Task> GetOperationStatusWithHttpMessagesAsync(System.Guid operationId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)); + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/LargeFaceListOperations.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/LargeFaceListOperations.cs index 239606d35cc0..727024226951 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/LargeFaceListOperations.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/LargeFaceListOperations.cs @@ -1165,7 +1165,7 @@ public LargeFaceListOperations(FaceClient client) } /// - /// Delete an existing face from a large face list (given by a persisitedFaceId + /// Delete an existing face from a large face list (given by a persistedFaceId /// and a largeFaceListId). Persisted image related to the face will also be /// deleted. /// diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/LargeFaceListOperationsExtensions.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/LargeFaceListOperationsExtensions.cs index f48952c1f777..9acd9c5398b0 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/LargeFaceListOperationsExtensions.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/LargeFaceListOperationsExtensions.cs @@ -164,7 +164,7 @@ public static partial class LargeFaceListOperationsExtensions } /// - /// Delete an existing face from a large face list (given by a persisitedFaceId + /// Delete an existing face from a large face list (given by a persistedFaceId /// and a largeFaceListId). Persisted image related to the face will also be /// deleted. /// diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/ApplySnapshotRequest.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/ApplySnapshotRequest.cs new file mode 100644 index 000000000000..9a53762b997d --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/ApplySnapshotRequest.cs @@ -0,0 +1,94 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Microsoft.Rest; + using Newtonsoft.Json; + using System.Linq; + + /// + /// Request body for applying snapshot operation. + /// + public partial class ApplySnapshotRequest + { + /// + /// Initializes a new instance of the ApplySnapshotRequest class. + /// + public ApplySnapshotRequest() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the ApplySnapshotRequest class. + /// + /// User specified target object id to be + /// created from the snapshot. + /// Snapshot applying mode. Currently only CreateNew + /// is supported, which means the apply operation will fail if target + /// subscription already contains an object of same type and using the + /// same objectId. Users can specify the "objectId" in request body to + /// avoid such conflicts. Possible values include: 'CreateNew' + public ApplySnapshotRequest(string objectId, SnapshotApplyMode mode = default(SnapshotApplyMode)) + { + ObjectId = objectId; + Mode = mode; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets user specified target object id to be created from the + /// snapshot. + /// + [JsonProperty(PropertyName = "objectId")] + public string ObjectId { get; set; } + + /// + /// Gets or sets snapshot applying mode. Currently only CreateNew is + /// supported, which means the apply operation will fail if target + /// subscription already contains an object of same type and using the + /// same objectId. Users can specify the "objectId" in request body to + /// avoid such conflicts. Possible values include: 'CreateNew' + /// + [JsonProperty(PropertyName = "mode")] + public SnapshotApplyMode Mode { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (ObjectId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "ObjectId"); + } + if (ObjectId != null) + { + if (ObjectId.Length > 64) + { + throw new ValidationException(ValidationRules.MaxLength, "ObjectId", 64); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(ObjectId, "^[a-z0-9-_]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "ObjectId", "^[a-z0-9-_]+$"); + } + } + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/OperationStatus.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/OperationStatus.cs new file mode 100644 index 000000000000..3394b90c05fe --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/OperationStatus.cs @@ -0,0 +1,137 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Operation status object. Operation refers to the asynchronous backend + /// task including taking a snapshot and applying a snapshot. + /// + public partial class OperationStatus + { + /// + /// Initializes a new instance of the OperationStatus class. + /// + public OperationStatus() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the OperationStatus class. + /// + /// Operation status: notstarted, running, + /// succeeded, failed. If the operation is requested and waiting to + /// perform, the status is notstarted. If the operation is ongoing in + /// backend, the status is running. Status succeeded means the + /// operation is completed successfully, specifically for snapshot + /// taking operation, it illustrates the snapshot is well taken and + /// ready to apply, and for snapshot applying operation, it presents + /// the target object has finished creating by the snapshot and ready + /// to be used. Status failed is often caused by editing the source + /// object while taking the snapshot or editing the target object while + /// applying the snapshot before completion, see the field "message" to + /// check the failure reason. Possible values include: 'notstarted', + /// 'running', 'succeeded', 'failed' + /// A combined UTC date and time string that + /// describes the time when the operation (take or apply a snapshot) is + /// requested. E.g. 2018-12-25T11:41:02.2331413Z. + /// A combined UTC date and time string + /// that describes the last time the operation (take or apply a + /// snapshot) is actively migrating data. The lastActionTime will keep + /// increasing until the operation finishes. E.g. + /// 2018-12-25T11:51:27.8705696Z. + /// When the operation succeeds + /// successfully, for snapshot taking operation the snapshot id will be + /// included in this field, and for snapshot applying operation, the + /// path to get the target object will be returned in this + /// field. + /// Show failure message when operation fails + /// (omitted when operation succeeds). + public OperationStatus(OperationStatusType status, System.DateTime createdTime, System.DateTime? lastActionTime = default(System.DateTime?), string resourceLocation = default(string), string message = default(string)) + { + Status = status; + CreatedTime = createdTime; + LastActionTime = lastActionTime; + ResourceLocation = resourceLocation; + Message = message; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets operation status: notstarted, running, succeeded, + /// failed. If the operation is requested and waiting to perform, the + /// status is notstarted. If the operation is ongoing in backend, the + /// status is running. Status succeeded means the operation is + /// completed successfully, specifically for snapshot taking operation, + /// it illustrates the snapshot is well taken and ready to apply, and + /// for snapshot applying operation, it presents the target object has + /// finished creating by the snapshot and ready to be used. Status + /// failed is often caused by editing the source object while taking + /// the snapshot or editing the target object while applying the + /// snapshot before completion, see the field "message" to check the + /// failure reason. Possible values include: 'notstarted', 'running', + /// 'succeeded', 'failed' + /// + [JsonProperty(PropertyName = "status")] + public OperationStatusType Status { get; set; } + + /// + /// Gets or sets a combined UTC date and time string that describes the + /// time when the operation (take or apply a snapshot) is requested. + /// E.g. 2018-12-25T11:41:02.2331413Z. + /// + [JsonProperty(PropertyName = "createdTime")] + public System.DateTime CreatedTime { get; set; } + + /// + /// Gets or sets a combined UTC date and time string that describes the + /// last time the operation (take or apply a snapshot) is actively + /// migrating data. The lastActionTime will keep increasing until the + /// operation finishes. E.g. 2018-12-25T11:51:27.8705696Z. + /// + [JsonProperty(PropertyName = "lastActionTime")] + public System.DateTime? LastActionTime { get; set; } + + /// + /// Gets or sets when the operation succeeds successfully, for snapshot + /// taking operation the snapshot id will be included in this field, + /// and for snapshot applying operation, the path to get the target + /// object will be returned in this field. + /// + [JsonProperty(PropertyName = "resourceLocation")] + public string ResourceLocation { get; set; } + + /// + /// Gets or sets show failure message when operation fails (omitted + /// when operation succeeds). + /// + [JsonProperty(PropertyName = "message")] + public string Message { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/OperationStatusType.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/OperationStatusType.cs new file mode 100644 index 000000000000..696d73f63d1b --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/OperationStatusType.cs @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Newtonsoft.Json; + using Newtonsoft.Json.Converters; + using System.Runtime; + using System.Runtime.Serialization; + + /// + /// Defines values for OperationStatusType. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum OperationStatusType + { + [EnumMember(Value = "notstarted")] + Notstarted, + [EnumMember(Value = "running")] + Running, + [EnumMember(Value = "succeeded")] + Succeeded, + [EnumMember(Value = "failed")] + Failed + } + internal static class OperationStatusTypeEnumExtension + { + internal static string ToSerializedValue(this OperationStatusType? value) + { + return value == null ? null : ((OperationStatusType)value).ToSerializedValue(); + } + + internal static string ToSerializedValue(this OperationStatusType value) + { + switch( value ) + { + case OperationStatusType.Notstarted: + return "notstarted"; + case OperationStatusType.Running: + return "running"; + case OperationStatusType.Succeeded: + return "succeeded"; + case OperationStatusType.Failed: + return "failed"; + } + return null; + } + + internal static OperationStatusType? ParseOperationStatusType(this string value) + { + switch( value ) + { + case "notstarted": + return OperationStatusType.Notstarted; + case "running": + return OperationStatusType.Running; + case "succeeded": + return OperationStatusType.Succeeded; + case "failed": + return OperationStatusType.Failed; + } + return null; + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/Snapshot.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/Snapshot.cs new file mode 100644 index 000000000000..c16b8bff3320 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/Snapshot.cs @@ -0,0 +1,153 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Microsoft.Rest; + using Newtonsoft.Json; + using System.Collections; + using System.Collections.Generic; + using System.Linq; + + /// + /// Snapshot object. + /// + public partial class Snapshot + { + /// + /// Initializes a new instance of the Snapshot class. + /// + public Snapshot() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the Snapshot class. + /// + /// Snapshot id. + /// Azure Cognitive Service Face account id of + /// the subscriber who created the snapshot by Snapshot - Take. + /// Type of the source object in the snapshot, + /// specified by the subscriber who created the snapshot when calling + /// Snapshot - Take. Currently FaceList, PersonGroup, LargeFaceList and + /// LargePersonGroup are supported. Possible values include: + /// 'FaceList', 'LargeFaceList', 'LargePersonGroup', + /// 'PersonGroup' + /// Array of the target Face subscription ids + /// for the snapshot, specified by the user who created the snapshot + /// when calling Snapshot - Take. For each snapshot, only subscriptions + /// included in the applyScope of Snapshot - Take can apply it. + /// A combined UTC date and time string that + /// describes the created time of the snapshot. E.g. + /// 2018-12-25T11:41:02.2331413Z. + /// A combined UTC date and time string + /// that describes the last time when the snapshot was created or + /// updated by Snapshot - Update. E.g. + /// 2018-12-25T11:51:27.8705696Z. + /// User specified data about the snapshot for + /// any purpose. Length should not exceed 16KB. + public Snapshot(System.Guid id, string account, SnapshotObjectType type, IList applyScope, System.DateTime createdTime, System.DateTime lastUpdateTime, string userData = default(string)) + { + Id = id; + Account = account; + Type = type; + ApplyScope = applyScope; + UserData = userData; + CreatedTime = createdTime; + LastUpdateTime = lastUpdateTime; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets snapshot id. + /// + [JsonProperty(PropertyName = "id")] + public System.Guid Id { get; set; } + + /// + /// Gets or sets azure Cognitive Service Face account id of the + /// subscriber who created the snapshot by Snapshot - Take. + /// + [JsonProperty(PropertyName = "account")] + public string Account { get; set; } + + /// + /// Gets or sets type of the source object in the snapshot, specified + /// by the subscriber who created the snapshot when calling Snapshot - + /// Take. Currently FaceList, PersonGroup, LargeFaceList and + /// LargePersonGroup are supported. Possible values include: + /// 'FaceList', 'LargeFaceList', 'LargePersonGroup', 'PersonGroup' + /// + [JsonProperty(PropertyName = "type")] + public SnapshotObjectType Type { get; set; } + + /// + /// Gets or sets array of the target Face subscription ids for the + /// snapshot, specified by the user who created the snapshot when + /// calling Snapshot - Take. For each snapshot, only subscriptions + /// included in the applyScope of Snapshot - Take can apply it. + /// + [JsonProperty(PropertyName = "applyScope")] + public IList ApplyScope { get; set; } + + /// + /// Gets or sets user specified data about the snapshot for any + /// purpose. Length should not exceed 16KB. + /// + [JsonProperty(PropertyName = "userData")] + public string UserData { get; set; } + + /// + /// Gets or sets a combined UTC date and time string that describes the + /// created time of the snapshot. E.g. 2018-12-25T11:41:02.2331413Z. + /// + [JsonProperty(PropertyName = "createdTime")] + public System.DateTime CreatedTime { get; set; } + + /// + /// Gets or sets a combined UTC date and time string that describes the + /// last time when the snapshot was created or updated by Snapshot - + /// Update. E.g. 2018-12-25T11:51:27.8705696Z. + /// + [JsonProperty(PropertyName = "lastUpdateTime")] + public System.DateTime LastUpdateTime { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (Account == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "Account"); + } + if (ApplyScope == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "ApplyScope"); + } + if (UserData != null) + { + if (UserData.Length > 16384) + { + throw new ValidationException(ValidationRules.MaxLength, "UserData", 16384); + } + } + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotApplyHeaders.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotApplyHeaders.cs new file mode 100644 index 000000000000..cd22c31afae1 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotApplyHeaders.cs @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Defines headers for Apply operation. + /// + public partial class SnapshotApplyHeaders + { + /// + /// Initializes a new instance of the SnapshotApplyHeaders class. + /// + public SnapshotApplyHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the SnapshotApplyHeaders class. + /// + /// Operation location with an + /// operation id used to track the progress of applying the snapshot by + /// OperationStatus - Get. + public SnapshotApplyHeaders(string operationLocation = default(string)) + { + OperationLocation = operationLocation; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets operation location with an operation id used to track + /// the progress of applying the snapshot by OperationStatus - Get. + /// + [JsonProperty(PropertyName = "Operation-Location")] + public string OperationLocation { get; set; } + + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotApplyMode.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotApplyMode.cs new file mode 100644 index 000000000000..5775c80c8b32 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotApplyMode.cs @@ -0,0 +1,54 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Newtonsoft.Json; + using Newtonsoft.Json.Converters; + using System.Runtime; + using System.Runtime.Serialization; + + /// + /// Defines values for SnapshotApplyMode. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum SnapshotApplyMode + { + [EnumMember(Value = "CreateNew")] + CreateNew + } + internal static class SnapshotApplyModeEnumExtension + { + internal static string ToSerializedValue(this SnapshotApplyMode? value) + { + return value == null ? null : ((SnapshotApplyMode)value).ToSerializedValue(); + } + + internal static string ToSerializedValue(this SnapshotApplyMode value) + { + switch( value ) + { + case SnapshotApplyMode.CreateNew: + return "CreateNew"; + } + return null; + } + + internal static SnapshotApplyMode? ParseSnapshotApplyMode(this string value) + { + switch( value ) + { + case "CreateNew": + return SnapshotApplyMode.CreateNew; + } + return null; + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotObjectType.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotObjectType.cs new file mode 100644 index 000000000000..52e629598bc2 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotObjectType.cs @@ -0,0 +1,72 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Newtonsoft.Json; + using Newtonsoft.Json.Converters; + using System.Runtime; + using System.Runtime.Serialization; + + /// + /// Defines values for SnapshotObjectType. + /// + [JsonConverter(typeof(StringEnumConverter))] + public enum SnapshotObjectType + { + [EnumMember(Value = "FaceList")] + FaceList, + [EnumMember(Value = "LargeFaceList")] + LargeFaceList, + [EnumMember(Value = "LargePersonGroup")] + LargePersonGroup, + [EnumMember(Value = "PersonGroup")] + PersonGroup + } + internal static class SnapshotObjectTypeEnumExtension + { + internal static string ToSerializedValue(this SnapshotObjectType? value) + { + return value == null ? null : ((SnapshotObjectType)value).ToSerializedValue(); + } + + internal static string ToSerializedValue(this SnapshotObjectType value) + { + switch( value ) + { + case SnapshotObjectType.FaceList: + return "FaceList"; + case SnapshotObjectType.LargeFaceList: + return "LargeFaceList"; + case SnapshotObjectType.LargePersonGroup: + return "LargePersonGroup"; + case SnapshotObjectType.PersonGroup: + return "PersonGroup"; + } + return null; + } + + internal static SnapshotObjectType? ParseSnapshotObjectType(this string value) + { + switch( value ) + { + case "FaceList": + return SnapshotObjectType.FaceList; + case "LargeFaceList": + return SnapshotObjectType.LargeFaceList; + case "LargePersonGroup": + return SnapshotObjectType.LargePersonGroup; + case "PersonGroup": + return SnapshotObjectType.PersonGroup; + } + return null; + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotTakeHeaders.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotTakeHeaders.cs new file mode 100644 index 000000000000..fd39000d6dcf --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/SnapshotTakeHeaders.cs @@ -0,0 +1,58 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Newtonsoft.Json; + using System.Linq; + + /// + /// Defines headers for Take operation. + /// + public partial class SnapshotTakeHeaders + { + /// + /// Initializes a new instance of the SnapshotTakeHeaders class. + /// + public SnapshotTakeHeaders() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the SnapshotTakeHeaders class. + /// + /// Operation location with an + /// operation id used to track the progress of taking snapshot. The + /// returned id is the operation id, rather than snapshot id. Snapshot + /// id can be obtained only when the operation status becomes + /// "succeeded" in OperationStatus - Get. + public SnapshotTakeHeaders(string operationLocation = default(string)) + { + OperationLocation = operationLocation; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets operation location with an operation id used to track + /// the progress of taking snapshot. The returned id is the operation + /// id, rather than snapshot id. Snapshot id can be obtained only when + /// the operation status becomes "succeeded" in OperationStatus - Get. + /// + [JsonProperty(PropertyName = "Operation-Location")] + public string OperationLocation { get; set; } + + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/TakeSnapshotRequest.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/TakeSnapshotRequest.cs new file mode 100644 index 000000000000..728dbcc1d2d0 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/TakeSnapshotRequest.cs @@ -0,0 +1,128 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Microsoft.Rest; + using Newtonsoft.Json; + using System.Collections; + using System.Collections.Generic; + using System.Linq; + + /// + /// Request body for taking snapshot operation. + /// + public partial class TakeSnapshotRequest + { + /// + /// Initializes a new instance of the TakeSnapshotRequest class. + /// + public TakeSnapshotRequest() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the TakeSnapshotRequest class. + /// + /// User specified type for the source object to + /// take snapshot from. Currently FaceList, PersonGroup, LargeFaceList + /// and LargePersonGroup are supported. Possible values include: + /// 'FaceList', 'LargeFaceList', 'LargePersonGroup', + /// 'PersonGroup' + /// User specified source object id to take + /// snapshot from. + /// User specified array of target Face + /// subscription ids for the snapshot. For each snapshot, only + /// subscriptions included in the applyScope of Snapshot - Take can + /// apply it. + /// User specified data about the snapshot for + /// any purpose. Length should not exceed 16KB. + public TakeSnapshotRequest(SnapshotObjectType type, string objectId, IList applyScope, string userData = default(string)) + { + Type = type; + ObjectId = objectId; + ApplyScope = applyScope; + UserData = userData; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets user specified type for the source object to take + /// snapshot from. Currently FaceList, PersonGroup, LargeFaceList and + /// LargePersonGroup are supported. Possible values include: + /// 'FaceList', 'LargeFaceList', 'LargePersonGroup', 'PersonGroup' + /// + [JsonProperty(PropertyName = "type")] + public SnapshotObjectType Type { get; set; } + + /// + /// Gets or sets user specified source object id to take snapshot from. + /// + [JsonProperty(PropertyName = "objectId")] + public string ObjectId { get; set; } + + /// + /// Gets or sets user specified array of target Face subscription ids + /// for the snapshot. For each snapshot, only subscriptions included in + /// the applyScope of Snapshot - Take can apply it. + /// + [JsonProperty(PropertyName = "applyScope")] + public IList ApplyScope { get; set; } + + /// + /// Gets or sets user specified data about the snapshot for any + /// purpose. Length should not exceed 16KB. + /// + [JsonProperty(PropertyName = "userData")] + public string UserData { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (ObjectId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "ObjectId"); + } + if (ApplyScope == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "ApplyScope"); + } + if (ObjectId != null) + { + if (ObjectId.Length > 64) + { + throw new ValidationException(ValidationRules.MaxLength, "ObjectId", 64); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(ObjectId, "^[a-z0-9-_]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "ObjectId", "^[a-z0-9-_]+$"); + } + } + if (UserData != null) + { + if (UserData.Length > 16384) + { + throw new ValidationException(ValidationRules.MaxLength, "UserData", 16384); + } + } + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/UpdateSnapshotRequest.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/UpdateSnapshotRequest.cs new file mode 100644 index 000000000000..3e7818b48cc8 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/Models/UpdateSnapshotRequest.cs @@ -0,0 +1,87 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face.Models +{ + using Microsoft.Rest; + using Newtonsoft.Json; + using System.Collections; + using System.Collections.Generic; + using System.Linq; + + /// + /// Request body for updating a snapshot, with a combination of user + /// defined apply scope and user specified data. + /// + public partial class UpdateSnapshotRequest + { + /// + /// Initializes a new instance of the UpdateSnapshotRequest class. + /// + public UpdateSnapshotRequest() + { + CustomInit(); + } + + /// + /// Initializes a new instance of the UpdateSnapshotRequest class. + /// + /// Array of the target Face subscription ids + /// for the snapshot, specified by the user who created the snapshot + /// when calling Snapshot - Take. For each snapshot, only subscriptions + /// included in the applyScope of Snapshot - Take can apply it. + /// User specified data about the snapshot for + /// any purpose. Length should not exceed 16KB. + public UpdateSnapshotRequest(IList applyScope = default(IList), string userData = default(string)) + { + ApplyScope = applyScope; + UserData = userData; + CustomInit(); + } + + /// + /// An initialization method that performs custom operations like setting defaults + /// + partial void CustomInit(); + + /// + /// Gets or sets array of the target Face subscription ids for the + /// snapshot, specified by the user who created the snapshot when + /// calling Snapshot - Take. For each snapshot, only subscriptions + /// included in the applyScope of Snapshot - Take can apply it. + /// + [JsonProperty(PropertyName = "applyScope")] + public IList ApplyScope { get; set; } + + /// + /// Gets or sets user specified data about the snapshot for any + /// purpose. Length should not exceed 16KB. + /// + [JsonProperty(PropertyName = "userData")] + public string UserData { get; set; } + + /// + /// Validate the object. + /// + /// + /// Thrown if validation fails + /// + public virtual void Validate() + { + if (UserData != null) + { + if (UserData.Length > 16384) + { + throw new ValidationException(ValidationRules.MaxLength, "UserData", 16384); + } + } + } + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SdkInfo_FaceClient.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SdkInfo_FaceClient.cs index 09ae3240997b..4f9e538fbdf9 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SdkInfo_FaceClient.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SdkInfo_FaceClient.cs @@ -26,6 +26,7 @@ public static IEnumerable> ApiInfo_FaceClient new Tuple("FaceClient", "LargePersonGroupPerson", "1.0"), new Tuple("FaceClient", "PersonGroup", "1.0"), new Tuple("FaceClient", "PersonGroupPerson", "1.0"), + new Tuple("FaceClient", "Snapshot", "1.0"), }.AsEnumerable(); } } diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SnapshotOperations.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SnapshotOperations.cs new file mode 100644 index 000000000000..034c3612c6c5 --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SnapshotOperations.cs @@ -0,0 +1,1252 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face +{ + using Microsoft.Rest; + using Models; + using Newtonsoft.Json; + using System.Collections; + using System.Collections.Generic; + using System.IO; + using System.Linq; + using System.Net; + using System.Net.Http; + using System.Threading; + using System.Threading.Tasks; + + /// + /// SnapshotOperations operations. + /// + public partial class SnapshotOperations : IServiceOperations, ISnapshotOperations + { + /// + /// Initializes a new instance of the SnapshotOperations class. + /// + /// + /// Reference to the service client. + /// + /// + /// Thrown when a required parameter is null + /// + public SnapshotOperations(FaceClient client) + { + if (client == null) + { + throw new System.ArgumentNullException("client"); + } + Client = client; + } + + /// + /// Gets a reference to the FaceClient + /// + public FaceClient Client { get; private set; } + + /// + /// Submit an operation to take a snapshot of face list, large face list, + /// person group or large person group, with user-specified snapshot type, + /// source object id, apply scope and an optional user data. + /// The snapshot interfaces are for users to backup and restore their face data + /// from one face subscription to another, inside same region or across + /// regions. The workflow contains two phases, user first calls Snapshot - Take + /// to create a copy of the source object and store it as a snapshot, then + /// calls Snapshot - Apply to paste the snapshot to target subscription. The + /// snapshots are stored in a centralized location (per Azure instance), so + /// that they can be applied cross accounts and regions. + /// Taking snapshot is an asynchronous operation. An operation id can be + /// obtained from the "Operation-Location" field in response header, to be used + /// in OperationStatus - Get for tracking the progress of creating the + /// snapshot. The snapshot id will be included in the "resourceLocation" field + /// in OperationStatus - Get response when the operation status is "succeeded". + /// Snapshot taking time depends on the number of person and face entries in + /// the source object. It could be in seconds, or up to several hours for + /// 1,000,000 persons with multiple faces. + /// Snapshots will be automatically expired and cleaned in 48 hours after it is + /// created by Snapshot - Take. User can delete the snapshot using Snapshot - + /// Delete by themselves any time before expiration. + /// Taking snapshot for a certain object will not block any other operations + /// against the object. All read-only operations (Get/List and + /// Identify/FindSimilar/Verify) can be conducted as usual. For all writable + /// operations, including Add/Update/Delete the source object or its + /// persons/faces and Train, they are not blocked but not recommended because + /// writable updates may not be reflected on the snapshot during its taking. + /// After snapshot taking is completed, all readable and writable operations + /// can work as normal. Snapshot will also include the training results of the + /// source object, which means target subscription the snapshot applied to does + /// not need re-train the target object before calling Identify/FindSimilar. + /// + /// + /// User specified type for the source object to take snapshot from. Currently + /// FaceList, PersonGroup, LargeFaceList and LargePersonGroup are supported. + /// Possible values include: 'FaceList', 'LargeFaceList', 'LargePersonGroup', + /// 'PersonGroup' + /// + /// + /// User specified source object id to take snapshot from. + /// + /// + /// User specified array of target Face subscription ids for the snapshot. For + /// each snapshot, only subscriptions included in the applyScope of Snapshot - + /// Take can apply it. + /// + /// + /// User specified data about the snapshot for any purpose. Length should not + /// exceed 16KB. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> TakeWithHttpMessagesAsync(SnapshotObjectType type, string objectId, IList applyScope, string userData = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (Client.Endpoint == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.Endpoint"); + } + if (objectId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "objectId"); + } + if (objectId != null) + { + if (objectId.Length > 64) + { + throw new ValidationException(ValidationRules.MaxLength, "objectId", 64); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(objectId, "^[a-z0-9-_]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "objectId", "^[a-z0-9-_]+$"); + } + } + if (applyScope == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "applyScope"); + } + if (userData != null) + { + if (userData.Length > 16384) + { + throw new ValidationException(ValidationRules.MaxLength, "userData", 16384); + } + } + TakeSnapshotRequest body = new TakeSnapshotRequest(); + if (objectId != null || applyScope != null || userData != null) + { + body.Type = type; + body.ObjectId = objectId; + body.ApplyScope = applyScope; + body.UserData = userData; + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("body", body); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Take", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri; + var _url = _baseUrl + (_baseUrl.EndsWith("/") ? "" : "/") + "snapshots"; + _url = _url.Replace("{Endpoint}", Client.Endpoint); + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("POST"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + if(body != null) + { + _requestContent = Rest.Serialization.SafeJsonConvert.SerializeObject(body, Client.SerializationSettings); + _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8); + _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + } + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 202) + { + var ex = new APIErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + APIError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new HttpOperationHeaderResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(JsonSerializer.Create(Client.DeserializationSettings)); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// List all accessible snapshots with related information, including snapshots + /// that were taken by the user, or snapshots to be applied to the user + /// (subscription id was included in the applyScope in Snapshot - Take). + /// + /// + /// User specified object type as a search filter. Possible values include: + /// 'FaceList', 'LargeFaceList', 'LargePersonGroup', 'PersonGroup' + /// + /// + /// User specified snapshot apply scopes as a search filter. ApplyScope is an + /// array of the target Azure subscription ids for the snapshot, specified by + /// the user who created the snapshot by Snapshot - Take. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task>> ListWithHttpMessagesAsync(SnapshotObjectType? type = default(SnapshotObjectType?), IList applyScope = default(IList), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (Client.Endpoint == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.Endpoint"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("type", type); + tracingParameters.Add("applyScope", applyScope); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "List", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri; + var _url = _baseUrl + (_baseUrl.EndsWith("/") ? "" : "/") + "snapshots"; + _url = _url.Replace("{Endpoint}", Client.Endpoint); + List _queryParameters = new List(); + if (type != null) + { + _queryParameters.Add(string.Format("type={0}", System.Uri.EscapeDataString(Rest.Serialization.SafeJsonConvert.SerializeObject(type, Client.SerializationSettings).Trim('"')))); + } + if (applyScope != null) + { + _queryParameters.Add(string.Format("applyScope={0}", System.Uri.EscapeDataString(string.Join(",", applyScope)))); + } + if (_queryParameters.Count > 0) + { + _url += "?" + string.Join("&", _queryParameters); + } + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new APIErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + APIError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new HttpOperationResponse>(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject>(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Retrieve information about a snapshot. Snapshot is only accessible to the + /// source subscription who took it, and target subscriptions included in the + /// applyScope in Snapshot - Take. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> GetWithHttpMessagesAsync(System.Guid snapshotId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (Client.Endpoint == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.Endpoint"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("snapshotId", snapshotId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Get", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri; + var _url = _baseUrl + (_baseUrl.EndsWith("/") ? "" : "/") + "snapshots/{snapshotId}"; + _url = _url.Replace("{Endpoint}", Client.Endpoint); + _url = _url.Replace("{snapshotId}", System.Uri.EscapeDataString(Rest.Serialization.SafeJsonConvert.SerializeObject(snapshotId, Client.SerializationSettings).Trim('"'))); + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new APIErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + APIError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new HttpOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Update the information of a snapshot. Only the source subscription who took + /// the snapshot can update the snapshot. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// Array of the target Face subscription ids for the snapshot, specified by + /// the user who created the snapshot when calling Snapshot - Take. For each + /// snapshot, only subscriptions included in the applyScope of Snapshot - Take + /// can apply it. + /// + /// + /// User specified data about the snapshot for any purpose. Length should not + /// exceed 16KB. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task UpdateWithHttpMessagesAsync(System.Guid snapshotId, IList applyScope = default(IList), string userData = default(string), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (Client.Endpoint == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.Endpoint"); + } + if (userData != null) + { + if (userData.Length > 16384) + { + throw new ValidationException(ValidationRules.MaxLength, "userData", 16384); + } + } + UpdateSnapshotRequest body = new UpdateSnapshotRequest(); + if (applyScope != null || userData != null) + { + body.ApplyScope = applyScope; + body.UserData = userData; + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("snapshotId", snapshotId); + tracingParameters.Add("body", body); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Update", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri; + var _url = _baseUrl + (_baseUrl.EndsWith("/") ? "" : "/") + "snapshots/{snapshotId}"; + _url = _url.Replace("{Endpoint}", Client.Endpoint); + _url = _url.Replace("{snapshotId}", System.Uri.EscapeDataString(Rest.Serialization.SafeJsonConvert.SerializeObject(snapshotId, Client.SerializationSettings).Trim('"'))); + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("PATCH"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + if(body != null) + { + _requestContent = Rest.Serialization.SafeJsonConvert.SerializeObject(body, Client.SerializationSettings); + _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8); + _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + } + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new APIErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + APIError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new HttpOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Delete an existing snapshot according to the snapshotId. All object data + /// and information in the snapshot will also be deleted. Only the source + /// subscription who took the snapshot can delete the snapshot. If the user + /// does not delete a snapshot with this API, the snapshot will still be + /// automatically deleted in 48 hours after creation. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task DeleteWithHttpMessagesAsync(System.Guid snapshotId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (Client.Endpoint == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.Endpoint"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("snapshotId", snapshotId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Delete", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri; + var _url = _baseUrl + (_baseUrl.EndsWith("/") ? "" : "/") + "snapshots/{snapshotId}"; + _url = _url.Replace("{Endpoint}", Client.Endpoint); + _url = _url.Replace("{snapshotId}", System.Uri.EscapeDataString(Rest.Serialization.SafeJsonConvert.SerializeObject(snapshotId, Client.SerializationSettings).Trim('"'))); + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("DELETE"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new APIErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + APIError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new HttpOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Submit an operation to apply a snapshot to current subscription. For each + /// snapshot, only subscriptions included in the applyScope of Snapshot - Take + /// can apply it. + /// The snapshot interfaces are for users to backup and restore their face data + /// from one face subscription to another, inside same region or across + /// regions. The workflow contains two phases, user first calls Snapshot - Take + /// to create a copy of the source object and store it as a snapshot, then + /// calls Snapshot - Apply to paste the snapshot to target subscription. The + /// snapshots are stored in a centralized location (per Azure instance), so + /// that they can be applied cross accounts and regions. + /// Applying snapshot is an asynchronous operation. An operation id can be + /// obtained from the "Operation-Location" field in response header, to be used + /// in OperationStatus - Get for tracking the progress of applying the + /// snapshot. The target object id will be included in the "resourceLocation" + /// field in OperationStatus - Get response when the operation status is + /// "succeeded". + /// Snapshot applying time depends on the number of person and face entries in + /// the snapshot object. It could be in seconds, or up to 1 hour for 1,000,000 + /// persons with multiple faces. + /// Snapshots will be automatically expired and cleaned in 48 hours after it is + /// created by Snapshot - Take. So the target subscription is required to apply + /// the snapshot in 48 hours since its creation. + /// Applying a snapshot will not block any other operations against the target + /// object, however it is not recommended because the correctness cannot be + /// guaranteed during snapshot applying. After snapshot applying is completed, + /// all operations towards the target object can work as normal. Snapshot also + /// includes the training results of the source object, which means target + /// subscription the snapshot applied to does not need re-train the target + /// object before calling Identify/FindSimilar. + /// One snapshot can be applied multiple times in parallel, while currently + /// only CreateNew apply mode is supported, which means the apply operation + /// will fail if target subscription already contains an object of same type + /// and using the same objectId. Users can specify the "objectId" in request + /// body to avoid such conflicts. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// User specified target object id to be created from the snapshot. + /// + /// + /// Snapshot applying mode. Currently only CreateNew is supported, which means + /// the apply operation will fail if target subscription already contains an + /// object of same type and using the same objectId. Users can specify the + /// "objectId" in request body to avoid such conflicts. Possible values + /// include: 'CreateNew' + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> ApplyWithHttpMessagesAsync(System.Guid snapshotId, string objectId, SnapshotApplyMode mode = default(SnapshotApplyMode), Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (Client.Endpoint == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.Endpoint"); + } + if (objectId == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "objectId"); + } + if (objectId != null) + { + if (objectId.Length > 64) + { + throw new ValidationException(ValidationRules.MaxLength, "objectId", 64); + } + if (!System.Text.RegularExpressions.Regex.IsMatch(objectId, "^[a-z0-9-_]+$")) + { + throw new ValidationException(ValidationRules.Pattern, "objectId", "^[a-z0-9-_]+$"); + } + } + ApplySnapshotRequest body = new ApplySnapshotRequest(); + if (objectId != null) + { + body.ObjectId = objectId; + body.Mode = mode; + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("snapshotId", snapshotId); + tracingParameters.Add("body", body); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "Apply", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri; + var _url = _baseUrl + (_baseUrl.EndsWith("/") ? "" : "/") + "snapshots/{snapshotId}/apply"; + _url = _url.Replace("{Endpoint}", Client.Endpoint); + _url = _url.Replace("{snapshotId}", System.Uri.EscapeDataString(Rest.Serialization.SafeJsonConvert.SerializeObject(snapshotId, Client.SerializationSettings).Trim('"'))); + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("POST"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + if(body != null) + { + _requestContent = Rest.Serialization.SafeJsonConvert.SerializeObject(body, Client.SerializationSettings); + _httpRequest.Content = new StringContent(_requestContent, System.Text.Encoding.UTF8); + _httpRequest.Content.Headers.ContentType =System.Net.Http.Headers.MediaTypeHeaderValue.Parse("application/json; charset=utf-8"); + } + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 202) + { + var ex = new APIErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + APIError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new HttpOperationHeaderResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + try + { + _result.Headers = _httpResponse.GetHeadersAsJson().ToObject(JsonSerializer.Create(Client.DeserializationSettings)); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the headers.", _httpResponse.GetHeadersAsJson().ToString(), ex); + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + /// + /// Retrieve the status of a take/apply snapshot operation. + /// + /// + /// Id referencing a particular take/apply snapshot operation. + /// + /// + /// Headers that will be added to request. + /// + /// + /// The cancellation token. + /// + /// + /// Thrown when the operation returned an invalid status code + /// + /// + /// Thrown when unable to deserialize the response + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// Thrown when a required parameter is null + /// + /// + /// A response object containing the response body and response headers. + /// + public async Task> GetOperationStatusWithHttpMessagesAsync(System.Guid operationId, Dictionary> customHeaders = null, CancellationToken cancellationToken = default(CancellationToken)) + { + if (Client.Endpoint == null) + { + throw new ValidationException(ValidationRules.CannotBeNull, "this.Client.Endpoint"); + } + // Tracing + bool _shouldTrace = ServiceClientTracing.IsEnabled; + string _invocationId = null; + if (_shouldTrace) + { + _invocationId = ServiceClientTracing.NextInvocationId.ToString(); + Dictionary tracingParameters = new Dictionary(); + tracingParameters.Add("operationId", operationId); + tracingParameters.Add("cancellationToken", cancellationToken); + ServiceClientTracing.Enter(_invocationId, this, "GetOperationStatus", tracingParameters); + } + // Construct URL + var _baseUrl = Client.BaseUri; + var _url = _baseUrl + (_baseUrl.EndsWith("/") ? "" : "/") + "operations/{operationId}"; + _url = _url.Replace("{Endpoint}", Client.Endpoint); + _url = _url.Replace("{operationId}", System.Uri.EscapeDataString(Rest.Serialization.SafeJsonConvert.SerializeObject(operationId, Client.SerializationSettings).Trim('"'))); + // Create HTTP transport objects + var _httpRequest = new HttpRequestMessage(); + HttpResponseMessage _httpResponse = null; + _httpRequest.Method = new HttpMethod("GET"); + _httpRequest.RequestUri = new System.Uri(_url); + // Set Headers + + + if (customHeaders != null) + { + foreach(var _header in customHeaders) + { + if (_httpRequest.Headers.Contains(_header.Key)) + { + _httpRequest.Headers.Remove(_header.Key); + } + _httpRequest.Headers.TryAddWithoutValidation(_header.Key, _header.Value); + } + } + + // Serialize Request + string _requestContent = null; + // Set Credentials + if (Client.Credentials != null) + { + cancellationToken.ThrowIfCancellationRequested(); + await Client.Credentials.ProcessHttpRequestAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + } + // Send Request + if (_shouldTrace) + { + ServiceClientTracing.SendRequest(_invocationId, _httpRequest); + } + cancellationToken.ThrowIfCancellationRequested(); + _httpResponse = await Client.HttpClient.SendAsync(_httpRequest, cancellationToken).ConfigureAwait(false); + if (_shouldTrace) + { + ServiceClientTracing.ReceiveResponse(_invocationId, _httpResponse); + } + HttpStatusCode _statusCode = _httpResponse.StatusCode; + cancellationToken.ThrowIfCancellationRequested(); + string _responseContent = null; + if ((int)_statusCode != 200) + { + var ex = new APIErrorException(string.Format("Operation returned an invalid status code '{0}'", _statusCode)); + try + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + APIError _errorBody = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + if (_errorBody != null) + { + ex.Body = _errorBody; + } + } + catch (JsonException) + { + // Ignore the exception + } + ex.Request = new HttpRequestMessageWrapper(_httpRequest, _requestContent); + ex.Response = new HttpResponseMessageWrapper(_httpResponse, _responseContent); + if (_shouldTrace) + { + ServiceClientTracing.Error(_invocationId, ex); + } + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw ex; + } + // Create Result + var _result = new HttpOperationResponse(); + _result.Request = _httpRequest; + _result.Response = _httpResponse; + // Deserialize Response + if ((int)_statusCode == 200) + { + _responseContent = await _httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false); + try + { + _result.Body = Rest.Serialization.SafeJsonConvert.DeserializeObject(_responseContent, Client.DeserializationSettings); + } + catch (JsonException ex) + { + _httpRequest.Dispose(); + if (_httpResponse != null) + { + _httpResponse.Dispose(); + } + throw new SerializationException("Unable to deserialize the response.", _responseContent, ex); + } + } + if (_shouldTrace) + { + ServiceClientTracing.Exit(_invocationId, _result); + } + return _result; + } + + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SnapshotOperationsExtensions.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SnapshotOperationsExtensions.cs new file mode 100644 index 000000000000..d73c1402871f --- /dev/null +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Generated/SnapshotOperationsExtensions.cs @@ -0,0 +1,272 @@ +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See License.txt in the project root for +// license information. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is +// regenerated. +// + +namespace Microsoft.Azure.CognitiveServices.Vision.Face +{ + using Models; + using System.Collections; + using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + + /// + /// Extension methods for SnapshotOperations. + /// + public static partial class SnapshotOperationsExtensions + { + /// + /// Submit an operation to take a snapshot of face list, large face list, + /// person group or large person group, with user-specified snapshot type, + /// source object id, apply scope and an optional user data. + /// The snapshot interfaces are for users to backup and restore their face data + /// from one face subscription to another, inside same region or across + /// regions. The workflow contains two phases, user first calls Snapshot - Take + /// to create a copy of the source object and store it as a snapshot, then + /// calls Snapshot - Apply to paste the snapshot to target subscription. The + /// snapshots are stored in a centralized location (per Azure instance), so + /// that they can be applied cross accounts and regions. + /// Taking snapshot is an asynchronous operation. An operation id can be + /// obtained from the "Operation-Location" field in response header, to be used + /// in OperationStatus - Get for tracking the progress of creating the + /// snapshot. The snapshot id will be included in the "resourceLocation" field + /// in OperationStatus - Get response when the operation status is "succeeded". + /// Snapshot taking time depends on the number of person and face entries in + /// the source object. It could be in seconds, or up to several hours for + /// 1,000,000 persons with multiple faces. + /// Snapshots will be automatically expired and cleaned in 48 hours after it is + /// created by Snapshot - Take. User can delete the snapshot using Snapshot - + /// Delete by themselves any time before expiration. + /// Taking snapshot for a certain object will not block any other operations + /// against the object. All read-only operations (Get/List and + /// Identify/FindSimilar/Verify) can be conducted as usual. For all writable + /// operations, including Add/Update/Delete the source object or its + /// persons/faces and Train, they are not blocked but not recommended because + /// writable updates may not be reflected on the snapshot during its taking. + /// After snapshot taking is completed, all readable and writable operations + /// can work as normal. Snapshot will also include the training results of the + /// source object, which means target subscription the snapshot applied to does + /// not need re-train the target object before calling Identify/FindSimilar. + /// + /// + /// The operations group for this extension method. + /// + /// + /// User specified type for the source object to take snapshot from. Currently + /// FaceList, PersonGroup, LargeFaceList and LargePersonGroup are supported. + /// Possible values include: 'FaceList', 'LargeFaceList', 'LargePersonGroup', + /// 'PersonGroup' + /// + /// + /// User specified source object id to take snapshot from. + /// + /// + /// User specified array of target Face subscription ids for the snapshot. For + /// each snapshot, only subscriptions included in the applyScope of Snapshot - + /// Take can apply it. + /// + /// + /// User specified data about the snapshot for any purpose. Length should not + /// exceed 16KB. + /// + /// + /// The cancellation token. + /// + public static async Task TakeAsync(this ISnapshotOperations operations, SnapshotObjectType type, string objectId, IList applyScope, string userData = default(string), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.TakeWithHttpMessagesAsync(type, objectId, applyScope, userData, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Headers; + } + } + + /// + /// List all accessible snapshots with related information, including snapshots + /// that were taken by the user, or snapshots to be applied to the user + /// (subscription id was included in the applyScope in Snapshot - Take). + /// + /// + /// The operations group for this extension method. + /// + /// + /// User specified object type as a search filter. Possible values include: + /// 'FaceList', 'LargeFaceList', 'LargePersonGroup', 'PersonGroup' + /// + /// + /// User specified snapshot apply scopes as a search filter. ApplyScope is an + /// array of the target Azure subscription ids for the snapshot, specified by + /// the user who created the snapshot by Snapshot - Take. + /// + /// + /// The cancellation token. + /// + public static async Task> ListAsync(this ISnapshotOperations operations, SnapshotObjectType? type = default(SnapshotObjectType?), IList applyScope = default(IList), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.ListWithHttpMessagesAsync(type, applyScope, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Retrieve information about a snapshot. Snapshot is only accessible to the + /// source subscription who took it, and target subscriptions included in the + /// applyScope in Snapshot - Take. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// The cancellation token. + /// + public static async Task GetAsync(this ISnapshotOperations operations, System.Guid snapshotId, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.GetWithHttpMessagesAsync(snapshotId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + /// + /// Update the information of a snapshot. Only the source subscription who took + /// the snapshot can update the snapshot. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// Array of the target Face subscription ids for the snapshot, specified by + /// the user who created the snapshot when calling Snapshot - Take. For each + /// snapshot, only subscriptions included in the applyScope of Snapshot - Take + /// can apply it. + /// + /// + /// User specified data about the snapshot for any purpose. Length should not + /// exceed 16KB. + /// + /// + /// The cancellation token. + /// + public static async Task UpdateAsync(this ISnapshotOperations operations, System.Guid snapshotId, IList applyScope = default(IList), string userData = default(string), CancellationToken cancellationToken = default(CancellationToken)) + { + (await operations.UpdateWithHttpMessagesAsync(snapshotId, applyScope, userData, null, cancellationToken).ConfigureAwait(false)).Dispose(); + } + + /// + /// Delete an existing snapshot according to the snapshotId. All object data + /// and information in the snapshot will also be deleted. Only the source + /// subscription who took the snapshot can delete the snapshot. If the user + /// does not delete a snapshot with this API, the snapshot will still be + /// automatically deleted in 48 hours after creation. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// The cancellation token. + /// + public static async Task DeleteAsync(this ISnapshotOperations operations, System.Guid snapshotId, CancellationToken cancellationToken = default(CancellationToken)) + { + (await operations.DeleteWithHttpMessagesAsync(snapshotId, null, cancellationToken).ConfigureAwait(false)).Dispose(); + } + + /// + /// Submit an operation to apply a snapshot to current subscription. For each + /// snapshot, only subscriptions included in the applyScope of Snapshot - Take + /// can apply it. + /// The snapshot interfaces are for users to backup and restore their face data + /// from one face subscription to another, inside same region or across + /// regions. The workflow contains two phases, user first calls Snapshot - Take + /// to create a copy of the source object and store it as a snapshot, then + /// calls Snapshot - Apply to paste the snapshot to target subscription. The + /// snapshots are stored in a centralized location (per Azure instance), so + /// that they can be applied cross accounts and regions. + /// Applying snapshot is an asynchronous operation. An operation id can be + /// obtained from the "Operation-Location" field in response header, to be used + /// in OperationStatus - Get for tracking the progress of applying the + /// snapshot. The target object id will be included in the "resourceLocation" + /// field in OperationStatus - Get response when the operation status is + /// "succeeded". + /// Snapshot applying time depends on the number of person and face entries in + /// the snapshot object. It could be in seconds, or up to 1 hour for 1,000,000 + /// persons with multiple faces. + /// Snapshots will be automatically expired and cleaned in 48 hours after it is + /// created by Snapshot - Take. So the target subscription is required to apply + /// the snapshot in 48 hours since its creation. + /// Applying a snapshot will not block any other operations against the target + /// object, however it is not recommended because the correctness cannot be + /// guaranteed during snapshot applying. After snapshot applying is completed, + /// all operations towards the target object can work as normal. Snapshot also + /// includes the training results of the source object, which means target + /// subscription the snapshot applied to does not need re-train the target + /// object before calling Identify/FindSimilar. + /// One snapshot can be applied multiple times in parallel, while currently + /// only CreateNew apply mode is supported, which means the apply operation + /// will fail if target subscription already contains an object of same type + /// and using the same objectId. Users can specify the "objectId" in request + /// body to avoid such conflicts. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id referencing a particular snapshot. + /// + /// + /// User specified target object id to be created from the snapshot. + /// + /// + /// Snapshot applying mode. Currently only CreateNew is supported, which means + /// the apply operation will fail if target subscription already contains an + /// object of same type and using the same objectId. Users can specify the + /// "objectId" in request body to avoid such conflicts. Possible values + /// include: 'CreateNew' + /// + /// + /// The cancellation token. + /// + public static async Task ApplyAsync(this ISnapshotOperations operations, System.Guid snapshotId, string objectId, SnapshotApplyMode mode = default(SnapshotApplyMode), CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.ApplyWithHttpMessagesAsync(snapshotId, objectId, mode, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Headers; + } + } + + /// + /// Retrieve the status of a take/apply snapshot operation. + /// + /// + /// The operations group for this extension method. + /// + /// + /// Id referencing a particular take/apply snapshot operation. + /// + /// + /// The cancellation token. + /// + public static async Task GetOperationStatusAsync(this ISnapshotOperations operations, System.Guid operationId, CancellationToken cancellationToken = default(CancellationToken)) + { + using (var _result = await operations.GetOperationStatusWithHttpMessagesAsync(operationId, null, cancellationToken).ConfigureAwait(false)) + { + return _result.Body; + } + } + + } +} diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Microsoft.Azure.CognitiveServices.Vision.Face.csproj b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Microsoft.Azure.CognitiveServices.Vision.Face.csproj index a57009c2e90b..adc216eff957 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Microsoft.Azure.CognitiveServices.Vision.Face.csproj +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Microsoft.Azure.CognitiveServices.Vision.Face.csproj @@ -6,7 +6,7 @@ Microsoft.Azure.CognitiveServices.Vision.Face This client library provides access to the Microsoft Cognitive Services Face APIs. - 2.2.0-preview + 2.3.0-preview Microsoft.Azure.CognitiveServices.Vision.Face Microsoft Cognitive Services;Cognitive Services;Cognitive Services SDK;REST HTTP client;Face;Face API;Face SDK;Vision;netcore451511 @@ -15,6 +15,7 @@ 2) Supported customizing service endpoints by assigning the endpoint string to FaceClient.Endpoint. The endpoint string can be found on Azure Portal, it should contain only protocol and hostname, for example: https://westus.api.cognitive.microsoft.com. This change ensures better global coverage. 3) Aligned with latest Face API, Million-Scale features (LargePersonGroup and LargeFaceList) were added. 4) Some inconsistencies in naming, parameter order were corrected. + 5) Aligned with latest Face API, Snapshot features for data migration were added. ]]> diff --git a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Properties/AssemblyInfo.cs b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Properties/AssemblyInfo.cs index f240961e768e..cc2958d08586 100644 --- a/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Properties/AssemblyInfo.cs +++ b/src/SDKs/CognitiveServices/dataPlane/Vision/Face/Face/Properties/AssemblyInfo.cs @@ -8,7 +8,7 @@ [assembly: AssemblyDescription("Provides access to the Microsoft Cognitive Services Face APIs.")] [assembly: AssemblyVersion("2.0.0.0")] -[assembly: AssemblyFileVersion("2.2.0.0")] +[assembly: AssemblyFileVersion("2.3.0.0")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Microsoft")] [assembly: AssemblyProduct("Microsoft Azure .NET SDK")] diff --git a/src/SDKs/_metadata/cognitiveservices_data-plane_Face.txt b/src/SDKs/_metadata/cognitiveservices_data-plane_Face.txt index 1afaa9cd8dfb..51ab297d176d 100644 --- a/src/SDKs/_metadata/cognitiveservices_data-plane_Face.txt +++ b/src/SDKs/_metadata/cognitiveservices_data-plane_Face.txt @@ -4,11 +4,11 @@ Commencing code generation Generating CSharp code Executing AutoRest command cmd.exe /c autorest.cmd https://github.com/Azure/azure-rest-api-specs/blob/master/specification/cognitiveservices/data-plane/Face/readme.md --csharp --version=latest --reflect-api-versions --csharp-sdks-folder=D:\FaceTeam\AutoRest\forks\azure-sdk-for-net\src\SDKs -2018-08-03 02:36:07 UTC +2019-01-23 02:59:18 UTC 1) azure-rest-api-specs repository information GitHub fork: Azure Branch: master -Commit: f9e6a10aabe3278244edb0760fbb97ab4a1d96b7 +Commit: 6723860edf22110a0f620c8dc090255e818503c1 2) AutoRest information Requested version: latest