Move seeders outside of database context.

This commit is contained in:
2020-05-23 18:28:56 +01:00
parent dd1df010d7
commit 87d200b715
12 changed files with 10546 additions and 4948 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1463,9 +1463,6 @@ namespace Marechai.Database.Models
entity.HasIndex(e => e.FsfApproved);
entity.HasIndex(e => e.OsiApproved);
});
Seeders.License.Seed(modelBuilder);
Seeders.DocumentRoles.Seed(modelBuilder);
}
}
}

View File

@@ -0,0 +1,56 @@
using System;
using Marechai.Database.Models;
namespace Marechai.Database.Seeders
{
public static class All
{
public static void Seed(MarechaiContext context)
{
DateTime start, end;
start = DateTime.Now;
Console.WriteLine("\u001b[31;1mImporting ISO-639 codes...\u001b[0m");
try
{
Iso639.Seed(context);
}
catch(Exception e)
{
Console.WriteLine("Exception {0} importing ISO-639 codes, saving changes and continuing...", e);
}
context.SaveChanges();
end = DateTime.Now;
Console.WriteLine("\u001b[31;1mTook \u001b[32;1m{0} seconds\u001b[31;1m...\u001b[0m",
(end - start).TotalSeconds);
start = DateTime.Now;
Console.WriteLine("\u001b[31;1mSeeding document roles...\u001b[0m");
DocumentRoles.Seed(context);
end = DateTime.Now;
Console.WriteLine("\u001b[31;1mTook \u001b[32;1m{0} seconds\u001b[31;1m...\u001b[0m",
(end - start).TotalSeconds);
start = DateTime.Now;
Console.WriteLine("\u001b[31;1mSeeding licenses...\u001b[0m");
License.Seed(context);
end = DateTime.Now;
Console.WriteLine("\u001b[31;1mTook \u001b[32;1m{0} seconds\u001b[31;1m...\u001b[0m",
(end - start).TotalSeconds);
start = DateTime.Now;
Console.WriteLine("\u001b[31;1mSaving changes...\u001b[0m");
context.SaveChanges();
end = DateTime.Now;
Console.WriteLine("\u001b[31;1mTook \u001b[32;1m{0} seconds\u001b[31;1m...\u001b[0m",
(end - start).TotalSeconds);
}
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,158 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Marechai.Database.Models;
namespace Marechai.Database.Seeders
{
public static class Iso639
{
// Data files can be found in https://iso639-3.sil.org/code_tables/download_tables
public static void Seed(MarechaiContext context)
{
if(!Directory.Exists("iso639"))
return;
IEnumerable<string> files = Directory.EnumerateFiles("iso639", "iso-639-3_*.tab");
long modified = 0;
List<Models.Iso639> codes = new List<Models.Iso639>();
foreach(string file in files)
{
Console.WriteLine("Importing ISO-639 codes from {0}", file);
using var fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.None);
using var sr = new StreamReader(fs, Encoding.UTF8);
string line = sr.ReadLine();
if(line is null)
{
Console.WriteLine("Invalid data, not proceeding");
continue;
}
string[] pieces = line.Split('\t');
if(pieces.Length != 8 ||
pieces[0] != "Id" ||
pieces[1] != "Part2B" ||
pieces[2] != "Part2T" ||
pieces[3] != "Part1" ||
pieces[4] != "Scope" ||
pieces[5] != "Language_Type" ||
pieces[6] != "Ref_Name" ||
pieces[7] != "Comment")
{
Console.WriteLine("Invalid data, not proceeding");
continue;
}
line = sr.ReadLine();
while(line != null)
{
pieces = line.Split('\t');
if(pieces.Length != 8)
{
Console.WriteLine("Invalid data, continuing with next line");
line = sr.ReadLine();
continue;
}
for(int p = 1; p < 8; p++)
if(pieces[p] == "")
pieces[p] = null;
codes.Add(new Models.Iso639
{
Id = pieces[0], Part2B = pieces[1], Part2T = pieces[2], Part1 = pieces[3],
Scope = pieces[4], Type = pieces[5], ReferenceName = pieces[6], Comment = pieces[7]
});
line = sr.ReadLine();
}
}
if(codes.Count == 0)
{
Console.WriteLine("No codes found");
return;
}
List<Models.Iso639> existingCodes = context.Iso639.ToList();
List<Models.Iso639> newCodes = new List<Models.Iso639>();
foreach(Models.Iso639 code in codes)
{
Models.Iso639 existingCode = existingCodes.FirstOrDefault(c => c.Id == code.Id);
if(existingCode is null)
newCodes.Add(code);
else
{
bool changed = false;
if(code.Part2B != existingCode.Part2B)
{
existingCode.Part2B = code.Part2B;
changed = true;
}
if(code.Part2T != existingCode.Part2T)
{
existingCode.Part2T = code.Part2T;
changed = true;
}
if(code.Part1 != existingCode.Part1)
{
existingCode.Part1 = code.Part1;
changed = true;
}
if(code.Scope != existingCode.Scope)
{
existingCode.Scope = code.Scope;
changed = true;
}
if(code.Type != existingCode.Type)
{
existingCode.Type = code.Type;
changed = true;
}
if(code.ReferenceName != existingCode.ReferenceName)
{
existingCode.ReferenceName = code.ReferenceName;
changed = true;
}
if(code.Comment != existingCode.Comment)
{
existingCode.Comment = code.Comment;
changed = true;
}
if(changed)
modified++;
}
}
context.Iso639.AddRange(newCodes);
Console.WriteLine("{0} language codes added", newCodes.Count);
Console.WriteLine("{0} language codes modified", modified);
}
}
}

File diff suppressed because it is too large Load Diff