Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/rule optimiser #6

Open
wants to merge 20 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
577c183
Added the textbox for the miniscanner as well as a button to clear th…
MartiPuigV Jul 3, 2024
9c97fa0
Early prototype of rule optimiser, WIP.
MartiPuigV Jul 10, 2024
19e1808
Improvements and fixes
MartiPuigV Jul 10, 2024
f80a726
Now works for a few edge cases on (theoretically) infinite depth/recu…
MartiPuigV Jul 10, 2024
9dc424d
Works sometimes will fix tomorrow going home now
MartiPuigV Jul 10, 2024
d097a52
Now works on infinite recursion (hopefully), but still no support for…
MartiPuigV Jul 11, 2024
0a9c5ca
Added docstrings | comments on every function for readability. Im sor…
MartiPuigV Jul 11, 2024
3a837af
Most of the fixes implemented, code refactoring in progress (0 unscop…
MartiPuigV Jul 11, 2024
c703a4a
0 code unscoped. RuleOptimiser class works just like old script. Can …
MartiPuigV Jul 11, 2024
d98a277
git issues needs commit
MartiPuigV Jul 11, 2024
2906f1d
Removed all print statements, and added a script to showcase the use …
MartiPuigV Jul 12, 2024
3aba5da
Added support for a few basic (mostly unchangeable) rules (eg. cpr, p…
MartiPuigV Jul 12, 2024
f9efc3a
Committing last changes before clean-up of my branches
MartiPuigV Jul 12, 2024
48e3ec0
Merge branch 'main' into feature/rule_optimiser
MartiPuigV Jul 12, 2024
7071c04
issues
MartiPuigV Jul 12, 2024
5445693
issues
MartiPuigV Jul 12, 2024
5e7c630
Final commit for migration. Changed indent to 4 for json
MartiPuigV Jul 12, 2024
50dea4f
debugging
MartiPuigV Jul 12, 2024
d10b09a
Debugged : only works with JSON one-liners ...
MartiPuigV Jul 12, 2024
0981184
Early credit card rule. Does not work yet
MartiPuigV Jul 12, 2024
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
1 change: 1 addition & 0 deletions src/os2datascanner/engine2/rules/experimental/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
from . import cpr # noqa
from . import health_rule # noqa
from . import credit_card # noqa
37 changes: 37 additions & 0 deletions src/os2datascanner/engine2/rules/experimental/credit_card.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import re
from ..rule import SimpleRule
from ...conversions.types import OutputType

def luhn_algorithm(num: str):
"""Computes the Luhn check digit for a given string of digits. (The last
digit of virtually all credit and debit card numbers is a Luhn check
digit.)"""
double = (len(num) % 2 == 1)
tot = 0
for ch in num:
v = int(ch) * (2 if double else 1)
tot += sum(int(c) for c in str(v))
double = not double
return 10 - (tot % 10)


class CreditCardRule(SimpleRule):
operates_on = OutputType.Text

def __init__(self):
self._expr = re.compile(
r"[0-9]{4}([- ]?[0-9]{4}){3}")

def match(self, representation: str):
for mo in self._expr.finditer(representation):
# Canonicalise the joiners away
num = "".join(ch for ch in mo.group() if ch.isdigit())

# See if the check digit is what we expect
if str(luhn_algorithm(num[:-1])) == num[-1]:
yield {
"match": num
}

def to_json_object(self):
return super().to_json_object()
26 changes: 20 additions & 6 deletions src/os2datascanner/projects/admin/adminapp/templates/miniscan.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@

{% block scripts %}
{{ block.super }}
<script defer src="{% static 'js/miniscanner/checkFileSize.js' %}"></script>
<script defer src="{% static 'js/miniscanner/clearFile.js' %}"></script>
<script defer src="{% static 'js/miniscanner/ruleInput.js' %}"></script>
<script defer src="{% static 'js/scannerjob/validateFileSize.js' %}"></script>
<script defer src="{% static 'js/scannerjob/clearFile.js' %}"></script>
<script defer src="{% static 'js/scannerjob/ruleInput.js' %}"></script>

<script src="{% static '3rdparty/jquery.modal.js' %} "></script>
{% endblock %}
{% block body %}
Expand Down Expand Up @@ -58,6 +59,7 @@ <h2>{% trans "File to scan" %}</h2>
type="button"
onclick="clearFile()">
<span>{% trans "Clear file" %}</span>

</button>

<div hidden id="file-upload-error-response">
Expand All @@ -70,9 +72,21 @@ <h2>{% trans "File to scan" %}</h2>
{% endwith %}

<h2>{% trans "Enter your text below" %}</h2>
<!-- Hardcoded maxlength to 2000, maybe add {{ textLimit }} or something similar -->
<textarea name="text" id="upload-text" type="text" class="upload" spellcheck="true" maxlength="2000">
</textarea>
<textarea name="text"
id="upload-text"
class="upload"
spellcheck="true"
placeholder="..."
maxlength="2000">
</textarea>

<br><br>

<input name="KLE-switch"
id="kle-switch"
type="checkbox"
class="upload">{% trans "Enable classification (slower)" %}
</input>

<h2>{% trans "Rule to execute" %}</h2>
<h4>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ def get_context_data(self):

return context


def mini_scan(scan_item, rule):
"""
This function will take a scanItem arg as well as a rule arg. It checks
Expand Down Expand Up @@ -102,14 +101,7 @@ def mini_scan(scan_item, rule):
item_name=item_name)


def execute_mini_scan(request):
"""Gets context (item to be scanned, rules to scan for) and performs a scan
on the item (file or raw text) recieved. Will cause an internal server
error (500 error code) if the scan rule does not get sent. This happens
when the user is not logged in / gets logged out for inactivity. However
this is only backend side and it does not cause any trouble on the
website.
"""
def execute_mini_scan(request): # noqa:CCR001
context = {
"file_obj": (file_obj := request.FILES.get("file")),
"text": (text := request.POST.get("text")),
Expand All @@ -130,4 +122,4 @@ def execute_mini_scan(request):
for m in mini_scan(text, rule):
replies.append(m)

return render(request, "components/miniscanner/miniscan_results.html", context)
return render(request, "components/miniscanner/miniscan_results.html", context)
51 changes: 25 additions & 26 deletions src/os2datascanner/projects/admin/locale/da/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-07-11 14:53+0200\n"
"POT-Creation-Date: 2024-07-03 14:44+0200\n"
"PO-Revision-Date: 2021-08-07 09:10+0200\n"
"Last-Translator: Magenta Aps\n"
"Language-Team: 2. sal\n"
Expand Down Expand Up @@ -2005,78 +2005,74 @@ msgstr ""
"enkel fil eller tekst-stykke. "
"Resultaterne vises længere nede på denne side."

#: adminapp/templates/miniscan.html:31 adminapp/templates/miniscan.html:66
#: adminapp/templates/miniscan.html:30 adminapp/templates/miniscan.html:60
msgid "Maximum allowed file size is: "
msgstr "Den maksimalt tilladte filstørrelse er: "

#: adminapp/templates/miniscan.html:45
#: adminapp/templates/miniscan.html:44
msgid "File to scan"
msgstr "Upload fil"

#: adminapp/templates/miniscan.html:56 adminapp/templates/miniscan.html:57
msgid "Clear selected file"
msgstr "Ryd valgt fil"

#: adminapp/templates/miniscan.html:60
#: adminapp/templates/miniscan.html:54
msgid "Clear file"
msgstr "Ryd fil"

#: adminapp/templates/miniscan.html:64
#: adminapp/templates/miniscan.html:58
msgid "The selected file is too big!"
msgstr "Den valgte fil er for stor!"

#: adminapp/templates/miniscan.html:68
#: adminapp/templates/miniscan.html:62
msgid "Please, select another (smaller) file to scan."
msgstr "Vælg venligst at scanne en anden (mindre) fil."

#: adminapp/templates/miniscan.html:72
#: adminapp/templates/miniscan.html:66
msgid "Enter your text below"
msgstr "Tast venligst text nedenfor"
msgstr ""

#: adminapp/templates/miniscan.html:77
#: adminapp/templates/miniscan.html:72
msgid "Rule to execute"
msgstr "Definér regel"

#: adminapp/templates/miniscan.html:79
#: adminapp/templates/miniscan.html:74
msgid "Selected rule: "
msgstr "Valgte regel: "

#: adminapp/templates/miniscan.html:80
#: adminapp/templates/miniscan.html:75
msgid "None"
msgstr "Ingen"

#: adminapp/templates/miniscan.html:86 adminapp/templates/miniscan.html:87
#: adminapp/templates/miniscan.html:120
#: adminapp/templates/miniscan.html:81 adminapp/templates/miniscan.html:82
#: adminapp/templates/miniscan.html:115
msgid "Upload a rule from the list"
msgstr "Indlæs en regel fra listen"

#: adminapp/templates/miniscan.html:87
#: adminapp/templates/miniscan.html:82
msgid "Load rule"
msgstr "Indlæs regel"

#: adminapp/templates/miniscan.html:93 adminapp/templates/miniscan.html:94
#: adminapp/templates/miniscan.html:95
#: adminapp/templates/miniscan.html:88 adminapp/templates/miniscan.html:89
#: adminapp/templates/miniscan.html:90
msgid "Run"
msgstr "Kør"

#: adminapp/templates/miniscan.html:93 adminapp/templates/miniscan.html:94
#: adminapp/templates/miniscan.html:88 adminapp/templates/miniscan.html:89
msgid "scanner"
msgstr "scanner"

#: adminapp/templates/miniscan.html:98 adminapp/templates/miniscan.html:99
#: adminapp/templates/miniscan.html:100
#: adminapp/templates/miniscan.html:93 adminapp/templates/miniscan.html:94
#: adminapp/templates/miniscan.html:95
msgid "Clear"
msgstr "Ryd"

#: adminapp/templates/miniscan.html:98 adminapp/templates/miniscan.html:99
#: adminapp/templates/miniscan.html:93 adminapp/templates/miniscan.html:94
msgid "content"
msgstr "indhold"

#: adminapp/templates/miniscan.html:103
#: adminapp/templates/miniscan.html:98
msgid "Scan result"
msgstr "Scanresultat"

#: adminapp/templates/miniscan.html:104
#: adminapp/templates/miniscan.html:99
msgid "(none yet)"
msgstr "(endnu ingen)"

Expand Down Expand Up @@ -3388,6 +3384,9 @@ msgstr "Navnet er allerede i brug."
msgid "Account not found."
msgstr "Konto ikke fundet."

#~ msgid "Write here"
#~ msgstr "Skriv her"

#~ msgid "grants"
#~ msgstr "bevillinger"

Expand Down
7 changes: 7 additions & 0 deletions src/os2datascanner/projects/static/js/scannerjob/clearFile.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
// Clears the selected file in the miniscanner file selection.
// Implemented for the user to be able to scan only text.

function clearFile() {
let inputField = document.getElementById("upload-file");
inputField.value = "";
}
Original file line number Diff line number Diff line change
Expand Up @@ -563,7 +563,7 @@
#file-clear-btn {
position: absolute;
width: 5%;
height: 46px;
height: 8.5%;
margin-left: 20px;
}

Expand Down
Loading