Exemple #1
0
        private void LoadProject(Project project, string outDir = null)
        {
            _config = new DocConfiguration(project);

            outputPath = outDir ?? project.DirectoryPath;
            var pathProperty = project.AllEvaluatedProperties.FirstOrDefault(o => o.Name.Equals("OutputPath", StringComparison.InvariantCulture));

            if (outDir == null && pathProperty != null)
            {
                outputPath = Path.Combine(project.DirectoryPath, pathProperty.EvaluatedValue);
            }

            // Try get path from config
            var userPath        = _config.Get("OutputPath");
            var docPathProperty = project.AllEvaluatedProperties.FirstOrDefault(o => o.Name.Equals("DocOutputPath", StringComparison.InvariantCulture));

            if (userPath != null)
            {
                outputPath = Path.Combine(outputPath, userPath);
            }
            else if (docPathProperty != null)
            {
                outputPath = Path.Combine(outputPath, docPathProperty.EvaluatedValue);
            }
            else
            {
                outputPath = Path.Combine(outputPath, "Doc");
            }

            // Ensure path exists
            if (!Directory.Exists(outputPath))
            {
                Directory.CreateDirectory(outputPath);
            }
        }
Exemple #2
0
        public void StoreDocConfiguration(DocConfiguration config)
        {
            if (config == null)
            {
                throw new ArgumentNullException(nameof(config));
            }
            var json = JsonConvert.SerializeObject(config);

            File.WriteAllText(AbsolutePath("config.json"), json);
        }
        public void testJsonSerializingConfiguration()
        {
            Configuration config = new Configuration();
            config.ConfigId = null;
            config.Name = "test";
            config.IsPrimary = true;
            config.OneSentence = false;
            config.AutoResponse = true;
            config.Language = "English";
            config.CharsThreshold = 80;
            config.Callback = "https://anyapi.anydomain.com/processed/docs.json";

            DocConfiguration doc = new DocConfiguration();
            doc.ConceptTopicsLimit = 5;
            doc.QueryTopicsLimit = 5;
            doc.NamedEntitiesLimit = 5;
            doc.UserEntitiesLimit = 5;
            doc.ThemesLimit = 0;
            doc.EntityThemesLimit = 5;
            doc.PhrasesLimit = 0;
            doc.SummaryLimit = 0;
            config.Document = doc;

            CollConfiguration coll = new CollConfiguration();
            coll.FacetsLimit = 15;
            coll.FacetAttsLimit = 20;
            coll.ConceptTopicsLimit = 5;
            coll.QueryTopicsLimit = 5;
            coll.NamedEntitiesLimit = 5;
            coll.ThemesLimit = 0;
            config.Collection = coll;

            Configuration removedConfig = new Configuration();
            removedConfig.ConfigId = "45699836";

            Configuration clonedConfig = new Configuration();
            clonedConfig.ConfigId = "45699836";
            clonedConfig.Name = "Cloned Config";
            clonedConfig.IsPrimary = false;
            clonedConfig.OneSentence = true;

            String expectedResult =
                    "{\"added\":[{\"auto_response\":true,\"callback\":\"https:\\/\\/anyapi.anydomain.com\\/processed\\/docs.json\",\"chars_threshold\":80,\"collection\":{\"concept_topics_limit\":5," +
                    "\"facet_atts_limit\":20,\"facets_limit\":15,\"named_entities_limit\":5,\"query_topics_limit\":5,\"themes_limit\":0},\"document\":" +
                    "{\"concept_topics_limit\":5,\"entity_themes_limit\":5,\"named_entities_limit\":5,\"phrases_limit\":0,\"query_topics_limit\":5,\"summary_limit\":0,\"themes_limit\":0," +
                    "\"user_entities_limit\":5},\"is_primary\":true,\"language\":\"English\",\"name\":\"test\",\"one_sentence\":false},{\"auto_response\":false,\"callback\":null,\"collection\":null,\"document\":null" +
                    ",\"is_primary\":false,\"language\":null,\"name\":\"Cloned Config\",\"one_sentence\":true,\"template\":\"45699836\"}],\"removed\":[\"45699836\"]}";

            ISerializer serializer = new JsonSerializer();
            IUpdateProxy<Configuration> proxy = Session.CreateSession("", "", serializer).CreateConfigurationsUpdateProxy();
            proxy.Add(config);
            proxy.Remove(removedConfig);
            proxy.Clone(clonedConfig);

            ConfigurationManagable cm = (ConfigurationManagable)proxy.Stub;
            Regex rgx = new Regex("\\s{2,}");
            Assert.AreEqual(expectedResult, rgx.Replace(serializer.Serialize(cm), ""));
        }
        public void testXmlSerializingConfiguration()
        {
            Configuration config = new Configuration();
            config.Name = "test";
            config.OneSentence = false;
            config.IsPrimary = true;
            config.AutoResponse = true;
            config.Language = "English";
            config.CharsThreshold = 80;
            config.Callback = "https://anyapi.anydomain.com/processed/docs.json";

            DocConfiguration doc = new DocConfiguration();
            doc.ConceptTopicsLimit = 5;
            doc.QueryTopicsLimit = 5;
            doc.NamedEntitiesLimit = 5;
            doc.UserEntitiesLimit = 5;
            doc.ThemesLimit = 0;
            doc.EntityThemesLimit = 5;
            doc.PhrasesLimit = 0;
            doc.SummaryLimit = 0;
            config.Document = doc;

            CollConfiguration coll = new CollConfiguration();
            coll.FacetsLimit = 15;
            coll.FacetAttsLimit = 20;
            coll.ConceptTopicsLimit = 5;
            coll.QueryTopicsLimit = 5;
            coll.NamedEntitiesLimit = 5;
            coll.ThemesLimit = 0;
            config.Collection = coll;

            Configuration removedConfig = new Configuration();
            removedConfig.ConfigId = "45699836";

            Configuration clonedConfig = new Configuration();
            clonedConfig.ConfigId = "45699836";
            clonedConfig.Name = "Cloned Config";
            clonedConfig.IsPrimary = false;
            clonedConfig.OneSentence = true;
            clonedConfig.Language = "French";

            String expectedResult =
                    "<?xml version=\"1.0\"?>" +
                    "<configurations xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">" +
                        "<added>" +
                            "<configuration>" +
                              "<name>" + config.Name + "</name>" +
                              "<one_sentence>" + config.OneSentence.ToString().ToLower() + "</one_sentence>" +
                              "<is_primary>" + config.IsPrimary.ToString().ToLower() + "</is_primary>" +
                              "<auto_response>" + config.AutoResponse.ToString().ToLower() + "</auto_response>" +
                              "<language>" + config.Language + "</language>" +
                              "<chars_threshold>" + config.CharsThreshold + "</chars_threshold>" +
                              "<callback>" + config.Callback + "</callback>" +
                              "<document>" +
                                "<concept_topics_limit>" + config.Document.ConceptTopicsLimit + "</concept_topics_limit>" +
                                "<query_topics_limit>" + config.Document.QueryTopicsLimit + "</query_topics_limit>" +
                                "<named_entities_limit>" + config.Document.NamedEntitiesLimit + "</named_entities_limit>" +
                                "<user_entities_limit>" + config.Document.UserEntitiesLimit + "</user_entities_limit>" +
                                "<entity_themes_limit>" + config.Document.EntityThemesLimit + "</entity_themes_limit>" +
                                "<themes_limit>" + config.Document.ThemesLimit + "</themes_limit>" +
                                "<phrases_limit>" + config.Document.PhrasesLimit + "</phrases_limit>" +
                                "<summary_limit>" + config.Document.SummaryLimit + "</summary_limit>" +
                              "</document>" +
                              "<collection>" +
                                "<facets_limit>" + config.Collection.FacetsLimit+ "</facets_limit>" +
                                "<facet_atts_limit>" + config.Collection.FacetAttsLimit + "</facet_atts_limit>" +
                                "<concept_topics_limit>" + config.Collection.ConceptTopicsLimit + "</concept_topics_limit>" +
                                "<query_topics_limit>" + config.Collection.ConceptTopicsLimit + "</query_topics_limit>" +
                                "<named_entities_limit>" + config.Collection.NamedEntitiesLimit + "</named_entities_limit>" +
                                "<themes_limit>" + config.Collection.ThemesLimit + "</themes_limit>" +
                              "</collection>" +
                            "</configuration>" +
                            "<configuration>" +
                              "<template>" + clonedConfig.ConfigId + "</template>" +
                              "<name>" + clonedConfig.Name + "</name>" +
                              "<one_sentence>" + clonedConfig.OneSentence.ToString().ToLower() + "</one_sentence>" +
                              "<is_primary>" + clonedConfig.IsPrimary.ToString().ToLower() + "</is_primary>" +
                              "<auto_response>" + clonedConfig.AutoResponse.ToString().ToLower() + "</auto_response>" +
                              "<language>" + clonedConfig.Language + "</language>" +
                              "<chars_threshold>" + clonedConfig.CharsThreshold + "</chars_threshold>" +
                            "</configuration>" +
                        "</added>" +
                        "<removed>" +
                            "<configuration>" + removedConfig.ConfigId + "</configuration>" +
                        "</removed>" +
                    "</configurations>";

            ISerializer serializer = new XmlSerializer();
            IUpdateProxy<Configuration> proxy = Session.CreateSession("", "", serializer).CreateConfigurationsUpdateProxy();
            proxy.Add(config);
            proxy.Remove(removedConfig);
            proxy.Clone(clonedConfig);

            ConfigurationManagable cm = (ConfigurationManagable)proxy.Stub;
            Regex rgx = new Regex("\\s{2,}");
            Assert.AreEqual(expectedResult, rgx.Replace(serializer.Serialize(cm), ""));
        }
Exemple #5
0
        public async Task ImportAllBranches()
        {
            var branches = await _githubDataRepository.GetBranches();

            var        versions       = new List <DocVersion>();
            DocVersion defaultVersion = null;

            foreach (var branch in branches)
            {
                _dataRepository.DeleteBranch(branch.Name);

                var version = new DocVersion(BranchNameToPathString(branch.Name), branch.Name);

                versions.Add(version);
                if (branch.IsDefault)
                {
                    defaultVersion = version;
                }

                var archive = await _githubDataRepository.GetArchive(branch);

                using (var memoryStream = new MemoryStream(archive))
                    using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
                        using (var tarReader = new TarReader(gzipStream))
                        {
                            string rootDirectory = null;
                            while (tarReader.Next() is var entry && entry != null)
                            {
                                if (entry.Header.Flag == TarHeaderFlag.Directory && rootDirectory == null)
                                {
                                    rootDirectory = entry.Header.Name;
                                }
                                if (entry.Header.Flag == TarHeaderFlag.NormalFile)
                                {
                                    if (Path.GetExtension(entry.Header.Name) == ".md")
                                    {
                                        using (var streamReader = new StreamReader(entry))
                                        {
                                            var markdown = streamReader.ReadToEnd();

                                            var meta = ParseMeta(ref markdown);

                                            // Parse markdown
                                            var document = Markdig.Markdown.Parse(markdown,
                                                                                  new MarkdownPipelineBuilder()
                                                                                  .UseAdvancedExtensions()
                                                                                  .UsePipeTables()
                                                                                  .Build());

                                            var sw       = new StringWriter();
                                            var renderer = new CustomHtmlRenderer(sw);
                                            renderer.Render(document);
                                            sw.Flush();
                                            var html = sw.ToString();

                                            var file = new DocFile
                                            {
                                                Content = html,
                                                Meta    = meta
                                            };

                                            var docPath = entry.Header.Name;

                                            if (rootDirectory != null && docPath.StartsWith(rootDirectory))
                                            {
                                                docPath = docPath.Substring(rootDirectory.Length).TrimStart('/', '\\');
                                            }

                                            var fileName = Path.GetFileNameWithoutExtension(docPath);
                                            docPath = Path.Combine(Path.GetDirectoryName(docPath), fileName);

                                            if (fileName == "index")
                                            {
                                                version.DefaultPage = meta.RedirectPage;
                                            }

                                            meta.LastModification = entry.Header.LastModification ?? DateTime.UtcNow;
                                            meta.EditUrl          = $"{_githubDataRepository.PublicUrl}/blob/{branch.Name}/{docPath}.md";
                                            meta.Title            = meta.Title ?? fileName.Replace('-', ' ');

                                            _dataRepository.StoreDocFile(branch.Name, docPath, file);
                                        }
                                    }
                                    else
                                    {
                                        var assetPath = entry.Header.Name;

                                        if (rootDirectory != null && assetPath.StartsWith(rootDirectory))
                                        {
                                            assetPath = assetPath.Substring(rootDirectory.Length).TrimStart('/', '\\');
                                        }

                                        assetPath = assetPath.ToLower();

                                        // Skip unaccepted asset types
                                        if (_options.Value.AcceptedAssets.Contains(Path.GetExtension(assetPath)))
                                        {
                                            _dataRepository.StoreAsset(branch.Name, assetPath, entry);
                                        }
                                    }
                                }
                            }
                        }
            }

            var docConfig = new DocConfiguration
            {
                Versions       = versions.ToArray(),
                DefaultVersion = defaultVersion
            };

            _dataRepository.StoreDocConfiguration(docConfig);
        }