public async Task Create(CreateTranslationRequest request)
        {
            var exists = await Exists(request.ArticleId, request.Translation.Language);

            if (exists)
            {
                throw new DuplicateKeyException(ExceptionCodes.TRANSLATION_ALREADY_EXISTS, $"Translation with language '{request.Translation.Language}' already exists");
            }

            var matchConditions = new FilterDefinition <BsonDocument>[]
            {
                new BsonDocument(
                    "_id",
                    new ObjectId(request.ArticleId)
                    ),
            };

            request.Translation.HasText = !string.IsNullOrEmpty(request.Text);

            await _dbContext.GetGenericArticlesCollection().UpdateOneAsync(
                Builders <BsonDocument> .Filter.And(matchConditions),
                Builders <BsonDocument> .Update.Push(
                    BsonPropertyHelper.GetPropertyName <ArticleEntity>(f => f.Translations),
                    _mapper.Map <TranslationEntity>(request.Translation)
                    ),
                new UpdateOptions {
                IsUpsert = false
            }
                );

            if (request.Translation.HasText)
            {
                var s3Client = _s3Client.GetClient();

                var result = await s3Client.PutObjectAsync(new Amazon.S3.Model.PutObjectRequest
                {
                    BucketName  = _settings.AWSBucket,
                    Key         = GetTranslationTextFilename(request.ArticleId, request.Translation),
                    ContentBody = request.Text,
                    ContentType = "text/html; charset=utf-8"
                });

                if (result.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    // Rollback
                    await Delete(request.ArticleId, request.Translation.Language);

                    throw new InternalException(ExceptionCodes.TRANSLATION_ERROR_UPLOADING_TEXT, $"Error uploading translation with language '{request.Translation.Language}'");
                }
            }
        }
Beispiel #2
0
        public void CreateArticles()
        {
            RestClient client = new RestClient();

            client.BaseUrl = new Uri("https://ig24hiba4k.execute-api.eu-west-1.amazonaws.com/Prod/api/v1/");
            // client.BaseUrl = new Uri("http://localhost:5000/api/v1/");

            List <DesiringGodArticlesCrawler.Models.Article> articles = JsonConvert.DeserializeObject <List <DesiringGodArticlesCrawler.Models.Article> >(File.ReadAllText("C:/temp/pxe/articles/john-piper_articles.json"));

            for (int index = 0; index < articles.Count; index++)
            {
                if (articles[index] == null)
                {
                    continue;
                }

                Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss")} Creating article {index} ... {articles[index].Link}");

                // Load text english
                //Console.WriteLine("Load text ...");
                var textEnglish = LoadText(index, "en", articles[index]);
                if (textEnglish == null)
                {
                    Console.WriteLine($">>> Not found content for {index} at {articles[index].Link}");
                    continue;
                }

                var image = LoadImageBase64(index, articles[index]);
                if (image == null)
                {
                    Console.WriteLine("Image is null...");
                }

                // Create article
                //Console.WriteLine("Call API...");
                RestRequest requestArticle = new RestRequest();
                requestArticle.Resource = "article";
                var bodyArticle = new CreateArticleRequest
                {
                    Article = new Article
                    {
                        Author = new List <string> {
                            "John Piper"
                        },
                        Category   = "Article",
                        Date       = articles[index].Date,
                        HasText    = textEnglish != null,
                        SourceLink = articles[index].Link,
                        Language   = "en",
                        Owner      = "Desiring God",
                        Title      = articles[index].Title,
                        Subtitle   = articles[index].Subtitle,
                        Summary    = articles[index].Summary,
                        Reference  = articles[index].Scripture
                    },
                    Text = textEnglish?.Text,
                };
                requestArticle.AddJsonBody(bodyArticle);

                var responseArticle = client.Post <CreateArticleResponse>(requestArticle);

                //Console.WriteLine(JsonConvert.SerializeObject(bodyArticle));

                //Console.WriteLine("Response from API ...");
                if (responseArticle.StatusCode != System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine($">>> Error {responseArticle.StatusCode} creating article for article {articles[index].Link}");
                    continue;
                }

                // Create translation
                //Console.WriteLine($"{DateTime.Now.ToString("HH:mm:ss")} Creating translation...");

                // Load text spanish
                //Console.WriteLine("Load translation text...");
                var textSpanish = LoadText(index, "es", articles[index]);

                //Console.WriteLine("Call translation API...");
                RestRequest requestTranslation = new RestRequest();
                requestTranslation.Resource = "translation";
                var bodyTranslation = new CreateTranslationRequest
                {
                    ArticleId   = responseArticle.Data.Article.Id,
                    Translation = new Translation
                    {
                        Date         = new DateTime(2020, 3, 21),
                        HasText      = true,
                        Language     = "es",
                        Status       = "Pending review",
                        Title        = textSpanish.Title,
                        Subtitle     = textSpanish.Subtitle,
                        Summary      = textSpanish.Summary,
                        TranslatedBy = "Google Cloud Translation"
                    },
                    Text = textSpanish.Text,
                };
                requestTranslation.AddJsonBody(bodyTranslation);

                var responseTranslation = client.Post(requestTranslation);

                //bodyTranslation.Text = null;
                //Console.WriteLine(JsonConvert.SerializeObject(bodyTranslation));

                //Console.WriteLine("Response from translation API...");
                if (responseTranslation.StatusCode != System.Net.HttpStatusCode.OK)
                {
                    Console.WriteLine($">>> Error {responseTranslation.StatusCode} creating translation for article {articles[index].Link}");
                }

                //Console.WriteLine("Press any key to process next item...");
                //Console.ReadKey();
            }
        }
Beispiel #3
0
        private static void Submissions(OAuthAuthenticationStrategy auth)
        {
            var client = new SubmissionApiClient <SampleOriginalAssetKey, SampleCustomTranslationRequestData, SampleTargetAssetKey, SampleCustomSubmissionData>(auth, projectId, "1e65ee5c-2555-4fd4-8305-56228ee3a0dd");

            var itemId = Guid.NewGuid().ToString();

            // List translation requests
            var query = new Dictionary <string, string>();

            query.Add("state", "In Progress|Translated|Completed");
            foreach (var s in client.GetPage(query, 100, 0).items)
            {
                Console.WriteLine(s.translationRequestUid + " " + s.translationSubmissions.Count() + " " + s.fileUri);
                foreach (var sub in s.translationSubmissions)
                {
                    Console.WriteLine("  " + sub.state + sub.targetLocaleId);
                }
            }

            // Sample code to process items in bulk
            foreach (var item in client.GetAll(string.Empty, string.Empty))
            {
                var r = new UpdateTranslationRequest <SampleOriginalAssetKey, SampleCustomTranslationRequestData, SampleTargetAssetKey, SampleCustomSubmissionData>();
                if (item.translationSubmissions == null || item.translationSubmissions.Where(x => x.state != "Deleted").Count() == 0)
                {
                    continue;
                }

                r.translationSubmissions = new List <UpdateSubmissionRequest <SampleTargetAssetKey, SampleCustomSubmissionData> >();
                foreach (TranslationSubmission <SampleTargetAssetKey, SampleCustomSubmissionData> s in item.translationSubmissions)
                {
                    r.translationSubmissions.Add(new UpdateSubmissionRequest <SampleTargetAssetKey, SampleCustomSubmissionData>
                    {
                        translationSubmissionUid = s.translationSubmissionUid,
                        state = "Deleted"
                    });
                }

                var ur = client.UpdateTranslationRequest(r, item.translationRequestUid);
            }

            var singleRequest = client.Get("27c4b81d8d52");

            // Create translation request
            var createTranslationRequest = new CreateTranslationRequest <SampleOriginalAssetKey, SampleCustomTranslationRequestData>();

            createTranslationRequest.contentHash      = Guid.NewGuid().ToString().Substring(0, 32);
            createTranslationRequest.fileUri          = Guid.NewGuid().ToString();
            createTranslationRequest.originalAssetKey = new SampleOriginalAssetKey()
            {
                Key = itemId
            };
            createTranslationRequest.originalLocaleId   = "en";
            createTranslationRequest.title              = "test";
            createTranslationRequest.customOriginalData = new SampleCustomTranslationRequestData()
            {
                ItemId = itemId, Path = "content/home"
            };

            var request = client.CreateTranslationRequest(createTranslationRequest);

            // Search submissions
            var searchResult = client.GetPage("originalAssetKey.Key", itemId, 100, 0);

            searchResult = client.GetPage("translationRequestUid", "2e3b50ec4de3", 100, 0);

            query = new Dictionary <string, string>();
            query.Add("state", "Translated|Completed");
            query.Add("customTranslationData", "{\"MediaContent\": false }");
            // query.Add("customOriginalData", "{\"Path\": \"/sitecore/content/Home/Team/Chris-Castle\" }");
            searchResult = client.GetPage(query, 100, 0);

            // Create subsmission
            var submission = new CreateSubmissionRequest <SampleTargetAssetKey, SampleCustomSubmissionData>();

            submission.state          = "Deleted";
            submission.submitterName  = "test";
            submission.targetLocaleId = "ru-RU";
            submission.targetAssetKey = new SampleTargetAssetKey()
            {
                Key = Guid.NewGuid().ToString()
            };
            submission.customTranslationData = new SampleCustomSubmissionData()
            {
                Revision = Guid.NewGuid().ToString(), Locked = false, MediaContent = false
            };

            request = client.CreateSubmission(request.translationRequestUid, new List <CreateSubmissionRequest <SampleTargetAssetKey, SampleCustomSubmissionData> >()
            {
                submission
            });

            // Update submission
            var updateRequest = new UpdateTranslationRequest <SampleOriginalAssetKey, SampleCustomTranslationRequestData, SampleTargetAssetKey, SampleCustomSubmissionData>();

            updateRequest.customOriginalData      = request.customOriginalData;
            updateRequest.customOriginalData.Path = "newpath";
            updateRequest.translationSubmissions  = new List <UpdateSubmissionRequest <SampleTargetAssetKey, SampleCustomSubmissionData> > {
                new UpdateSubmissionRequest <SampleTargetAssetKey, SampleCustomSubmissionData> {
                    translationSubmissionUid = request.translationSubmissions[0].translationSubmissionUid,
                    state            = "In Progress",
                    lastExportedDate = DateTime.UtcNow
                }
            };

            var updatedRequest = client.UpdateTranslationRequest(updateRequest, request.translationRequestUid);

            // List translation requests
            foreach (var s in client.GetAll("state", "In Progress"))
            {
                Console.WriteLine(s.translationRequestUid + " " + s.translationSubmissions.Count() + " " + s.fileUri);
            }
        }
        public virtual TranslationRequest <TOriginalKey, TCustomRequest, TTargetKey, TCustomSubmission> CreateTranslationRequest(CreateTranslationRequest <TOriginalKey, TCustomRequest> submission)
        {
            var uriBuilder = this.GetRequestStringBuilder(string.Format(CreateSubmissionUrl, projectId, bucketName));
            var response   = ExecutePostRequest(uriBuilder, submission, auth);

            return(JsonConvert.DeserializeObject <TranslationRequest <TOriginalKey, TCustomRequest, TTargetKey, TCustomSubmission> >(response["response"]["data"].ToString()));
        }
        public async Task Create(CreateTranslationRequest request)
        {
            request.ValidateAndThrow();

            await _translationService.Create(request);
        }