Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
5945056
Update .gitignore
invalid-email-address Aug 14, 2023
d5f17c5
Update RankingUrl.cs
invalid-email-address Aug 14, 2023
d9b4a9a
Update RankingUrl.cs
invalid-email-address Aug 14, 2023
7ff4df1
Update RankingUrl.cs
invalid-email-address Aug 14, 2023
f286819
Revert "Update .gitignore"
invalid-email-address Aug 14, 2023
3f0c271
Update IndexJsonBase.cs
invalid-email-address Aug 14, 2023
f84d9b9
Update IndexJsonBase.cs
invalid-email-address Aug 14, 2023
4e45a77
Merge remote-tracking branch 'refs/remotes/origin/main'
invalid-email-address Aug 14, 2023
fd9700f
Update IndexJsonBase.cs
invalid-email-address Aug 14, 2023
bba2635
Update IndexJsonBase.cs and Ranking.cs
invalid-email-address Aug 14, 2023
66c20b7
Update IndexJsonBase.cs and Ranking.cs
invalid-email-address Aug 14, 2023
f04eb61
Update ScraperOutput.cs
invalid-email-address Aug 14, 2023
16de3a4
Update ScraperOutput.cs
invalid-email-address Aug 14, 2023
a831b0f
Update IndexJsonBase.cs, Ranking.cs, and ScraperOutput.cs
invalid-email-address Aug 14, 2023
546893f
Update IndexJsonBase.cs, Ranking.cs, and MeritTable.cs
invalid-email-address Aug 14, 2023
3da57c3
Update Ranking.cs, StudentResult.cs, and MeritTable.cs
invalid-email-address Aug 14, 2023
e1d19e3
Update IndexJsonBase.cs and StudentResult.cs
invalid-email-address Aug 14, 2023
f059292
Update IndexJsonBase.cs, Ranking.cs, StudentResult.cs, and 1 more file
invalid-email-address Aug 14, 2023
689a5cb
Update IndexJsonBase.cs
invalid-email-address Aug 14, 2023
37704fe
Update IndexJsonBase.cs, Ranking.cs, MeritTable.cs, and 1 more file
invalid-email-address Aug 14, 2023
042604a
Update IndexJsonBase.cs and Ranking.cs
invalid-email-address Aug 14, 2023
3cd0cd5
Update IndexJsonBase.cs, Ranking.cs, StudentResult.cs, and 3 more files
invalid-email-address Aug 14, 2023
7224f04
Update StudentResult.cs and ScraperOutput.cs
invalid-email-address Aug 14, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
using PoliNetwork.Graduatorie.Common.Objects;
using PoliNetwork.Graduatorie.Parser.Objects.Json.Indexes.Specific;
using PoliNetwork.Graduatorie.Parser.Objects.RankingNS;
using PoliNetwork.Graduatorie.Parser.Objects.Tables.Course;
using PoliNetwork.Graduatorie.Parser.Objects.Tables.Merit;
using PoliNetwork.Graduatorie.Parser.Utils;

#endregion

Expand Down Expand Up @@ -62,16 +65,73 @@ private static void WriteSingleJsonRanking(string folder, Ranking ranking, ArgsC
File.WriteAllText(path, rankingJsonString);
}

private static bool ExitIfAlreadyExistsAndNotUpdated(Ranking ranking, string path)
private static bool ExitIfAlreadyExistsAndNotUpdated(Ranking a, string path)
{
if (!File.Exists(path)) return false;
var b = GetRankingFromFile(path);
return b != null && SameHash(a, b);
}

private static bool SameHash(Ranking a, Ranking b)
{
var ai = a.GetHashWithoutLastUpdate();
var bi = b.GetHashWithoutLastUpdate();
return ai == bi;
}

private static bool SameHashCourse(IReadOnlyCollection<CourseTable>? aTableCourse,
IReadOnlyCollection<CourseTable>? bTableCourse)
{
if (aTableCourse == null && bTableCourse == null)
return true;
if (aTableCourse == null || bTableCourse == null)
return false;

;

if (aTableCourse.Count != bTableCourse.Count)
return false;
;

var aHash = aTableCourse.Select(variable =>
{
var hashWithoutLastUpdate = Hashing.GetHashFromListHash(variable.GetHashWithoutLastUpdate());
return hashWithoutLastUpdate;
}).ToList();

var bHash = bTableCourse.Select(variable =>
{
var hashWithoutLastUpdate = Hashing.GetHashFromListHash(variable.GetHashWithoutLastUpdate());
return hashWithoutLastUpdate;
}).ToList();

var ai = Hashing.GetHashFromListHash(aHash);
var bi = Hashing.GetHashFromListHash(bHash);

return (ai ?? 0) == (bi ?? 0);
}

private static bool SameHashMerit(MeritTable? aTableMerit, MeritTable? bTableMerit)
{
if (aTableMerit == null && bTableMerit == null)
return true;
if (aTableMerit == null || bTableMerit == null)
return false;

;
var ai = aTableMerit.GetHashWithoutLastUpdate();
var bi = bTableMerit.GetHashWithoutLastUpdate();
var aii = Hashing.GetHashFromListHash(ai) ?? 0;
var bii = Hashing.GetHashFromListHash(bi) ?? 0;
return aii == bii;
}

private static Ranking? GetRankingFromFile(string path)
{
var x = File.ReadAllText(path);

var j = JsonConvert.DeserializeObject<Ranking>(x, Culture.JsonSerializerSettings);
var hashThis = ranking.GetHashWithoutLastUpdate();
var hashJ = j?.GetHashWithoutLastUpdate();
return hashThis == hashJ;
return j;
}

public static void IndexesWrite(RankingsSet? rankingsSet, string outFolder, ArgsConfig argsConfig)
Expand Down
22 changes: 20 additions & 2 deletions PoliNetwork.Graduatorie.Parser/Objects/RankingNS/Ranking.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
using PoliNetwork.Graduatorie.Parser.Objects.Json.Stats;
using PoliNetwork.Graduatorie.Parser.Objects.Tables.Course;
using PoliNetwork.Graduatorie.Parser.Objects.Tables.Merit;
using PoliNetwork.Graduatorie.Parser.Utils;
using PoliNetwork.Graduatorie.Parser.Utils.Output;

#endregion
Expand Down Expand Up @@ -47,12 +48,19 @@ public int GetHashWithoutLastUpdate()
i ^= School?.GetHashCode() ?? "School".GetHashCode();
i ^= Url?.GetHashWithoutLastUpdate() ?? "Url".GetHashCode();
i ^= Year?.GetHashCode() ?? "Year".GetHashCode();
i ^= ByMerit?.GetHashWithoutLastUpdate() ?? "ByMerit".GetHashCode();
var iMerit = ByMerit?.GetHashWithoutLastUpdate();
i ^= Hashing.GetHashFromListHash(iMerit) ?? "ByMerit".GetHashCode();


if (ByCourse == null)
i ^= "ByCourse".GetHashCode();
else
i = ByCourse.Aggregate(i, (current, variable) => current ^ variable.GetHashWithoutLastUpdate());
i = ByCourse.Aggregate(i, (current, variable) =>
{
var hashWithoutLastUpdate = variable.GetHashWithoutLastUpdate();
var iList = Hashing.GetHashFromListHash(hashWithoutLastUpdate) ?? "empty".GetHashCode();
return current ^ iList;
});

return i;
}
Expand Down Expand Up @@ -128,4 +136,14 @@ public string GetPath()
{
return School + "/" + Year + "/" + RankingOrder?.Phase;
}

public MeritTable? GetMerit()
{
return ByMerit;
}

public List<CourseTable>? GetTableCourse()
{
return ByCourse;
}
}
36 changes: 19 additions & 17 deletions PoliNetwork.Graduatorie.Parser/Objects/StudentResult.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,29 +22,31 @@ public class StudentResult
public decimal? Result;
public SortedDictionary<string, decimal>? SectionsResults;

public int GetHashWithoutLastUpdate()
public List<int?> GetHashWithoutLastUpdate()
{
var i = "StudentResult".GetHashCode();
i ^= BirthDate?.GetHashCode() ?? "BirthDate".GetHashCode();
i ^= EnrollType?.GetHashWithoutLastUpdate() ?? "EnrollType".GetHashCode();
i ^= EnglishCorrectAnswers?.GetHashCode() ?? "EnglishCorrectAnswers".GetHashCode();
i ^= Id?.GetHashCode() ?? "Id".GetHashCode();
i ^= PositionAbsolute?.GetHashCode() ?? "PositionAbsolute".GetHashCode();
i ^= PositionCourse?.GetHashCode() ?? "PositionCourse".GetHashCode();
i ^= Result?.GetHashCode() ?? "Result".GetHashCode();
i ^= EnrollType?.GetHashCode() ?? "EnrollType".GetHashCode();
var r = new List<int?>
{
"StudentResult".GetHashCode(),
BirthDate?.GetHashCode() ?? "BirthDate".GetHashCode(),
EnrollType?.GetHashWithoutLastUpdate() ?? "EnrollType".GetHashCode(),
EnglishCorrectAnswers?.GetHashCode() ?? "EnglishCorrectAnswers".GetHashCode(),
Id?.GetHashCode() ?? "Id".GetHashCode(),
PositionAbsolute?.GetHashCode() ?? "PositionAbsolute".GetHashCode(),
PositionCourse?.GetHashCode() ?? "PositionCourse".GetHashCode(),
Result?.GetHashCode() ?? "Result".GetHashCode()
};
if (Ofa == null)
i ^= "Ofa".GetHashCode();
r.Add("OfaEmpty".GetHashCode());
else
i = Ofa.Aggregate(i,
(current, variable) => current ^ variable.Key.GetHashCode() ^ variable.Value.GetHashCode());
r.Add(Ofa.Aggregate("OfaFull".GetHashCode(),
(current, variable) => current ^ variable.Key.GetHashCode() ^ variable.Value.GetHashCode()));

if (SectionsResults == null)
i ^= "SectionsResults".GetHashCode();
r.Add("SectionsResultsEmpty".GetHashCode());
else
i = SectionsResults.Aggregate(i,
(current, variable) => current ^ variable.Key.GetHashCode() ^ variable.Value.GetHashCode());
r.Add(SectionsResults.Aggregate("SectionsResultsFull".GetHashCode(),
(current, variable) => current ^ variable.Key.GetHashCode() ^ variable.Value.GetHashCode()));

return i;
return r;
}
}
25 changes: 16 additions & 9 deletions PoliNetwork.Graduatorie.Parser/Objects/Tables/Merit/MeritTable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using PoliNetwork.Graduatorie.Parser.Utils;

#endregion

Expand All @@ -16,21 +17,27 @@ public class MeritTable
public List<StudentResult>? Rows;
public int? Year;

public int GetHashWithoutLastUpdate()
public List<int?> GetHashWithoutLastUpdate()
{
var i = "MeritTable".GetHashCode();
var r = new List<int?> { "MeritTable".GetHashCode() };
if (Headers != null)
i = Headers.Aggregate(i, (current, variable) => current ^ variable.GetHashCode());
r.Add(Headers.Aggregate("HeadersFull".GetHashCode(),
(current, variable) => current ^ variable.GetHashCode()));
else
i ^= "Headers".GetHashCode();
r.Add("HeadersEmpty".GetHashCode());

if (Rows != null)
i = Rows.Aggregate(i, (current, variable) => current ^ variable.GetHashWithoutLastUpdate());
r.Add(Rows.Aggregate("RowsFull".GetHashCode(), (current, variable) =>
{
var hashWithoutLastUpdate = variable.GetHashWithoutLastUpdate();
var hashFromListHash = Hashing.GetHashFromListHash(hashWithoutLastUpdate) ?? "empty3".GetHashCode();
return current ^ hashFromListHash;
}));
else
i ^= "Rows".GetHashCode();
r.Add("RowsEmpty".GetHashCode());

i ^= Year?.GetHashCode() ?? "Year".GetHashCode();
i ^= Path?.GetHashCode() ?? "Path".GetHashCode();
return i;
r.Add(Year?.GetHashCode() ?? "Year".GetHashCode());
r.Add(Path?.GetHashCode() ?? "Path".GetHashCode());
return r;
}
}
14 changes: 14 additions & 0 deletions PoliNetwork.Graduatorie.Parser/Utils/Hashing.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
namespace PoliNetwork.Graduatorie.Parser.Utils;

public class Hashing
{
public static int? GetHashFromListHash(IReadOnlyCollection<int?>? iMerit)
{
if (iMerit == null)
return null;
if (iMerit.Count == 0)
return null;

return iMerit.Aggregate(0, (current, variable) => current ^ variable ?? 0);
}
}
73 changes: 58 additions & 15 deletions PoliNetwork.Graduatorie.Scraper/Utils/Web/ScraperOutput.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,22 +34,56 @@ private static List<RankingUrl> GetSaved(string? dataFolder)
List<RankingUrl> list = new();
var filePath = GetFilePath(dataFolder);
if (!File.Exists(filePath)) return list;
try
{
var lines = File.ReadAllLines(filePath);
var rankingUrls = from line in lines where !string.IsNullOrEmpty(line) select RankingUrl.From(line);
list.AddRange(rankingUrls);

var lines = GetLines(filePath);
if (lines == null)
{
// consider to handle them
Console.WriteLine($"[ERROR] Can't read the ScraperOutput file ({filePath})");
return list;
}

try
{
foreach (var variable in lines) RankingFromAdd(variable, list);
}
catch
{
// consider to handle them
Console.WriteLine($"[ERROR] Can't read the ScraperOutput file ({filePath})");
return list;
Console.WriteLine($"[ERROR] Can't validate the ScraperOutput file ({filePath})");
}

return list;
}

private static void RankingFromAdd(string variable, ICollection<RankingUrl> list)
{
try
{
var rankingUrl = RankingUrl.From(variable);
list.Add(rankingUrl);
}
catch (Exception exception)
{
Console.WriteLine(exception);
}
}

private static List<string>? GetLines(string filePath)
{
List<string>? lines = null;
try
{
lines = File.ReadAllLines(filePath).Where(x => !string.IsNullOrEmpty(x)).ToList();
}
catch (Exception exception)
{
Console.WriteLine(exception);
}

return lines;
}

public static void Write(List<RankingUrl> rankingsUrls, string? dataFolder)
{
if (string.IsNullOrEmpty(dataFolder))
Expand All @@ -65,14 +99,23 @@ public static void Write(List<RankingUrl> rankingsUrls, string? dataFolder)

private static string GetOutputLinksString(IEnumerable<RankingUrl> rankingsUrls)
{
var output = "";
var urls = CheckUrlUtil.GetRankingLinksHashSet(rankingsUrls).Order();
foreach (var link in urls)
{
output += link;
output += "\n";
}
var rankingLinksHashSet = CheckUrlUtil.GetRankingLinksHashSet(rankingsUrls);
var rankingUrls = rankingLinksHashSet.Where(PredicateStringUrlNotNullNorEmpty);
var urls = rankingUrls.Order();

var enumerable1 = urls.Select(link => link.Url);
var select = enumerable1.Select(SelectorUrlWithEndLine);
var enumerable = select.Distinct().Order();
return enumerable.Aggregate("", (current, linkUrl) => current + linkUrl);
}

return output;
private static bool PredicateStringUrlNotNullNorEmpty(RankingUrl x)
{
return !string.IsNullOrEmpty(x.Url);
}

private static string SelectorUrlWithEndLine(string url)
{
return url + "\n";
}
}