Skip to content

Commit

Permalink
procedura serwerowa do wycinania wartości pola ISBN z pola "Uwagi" (#…
Browse files Browse the repository at this point in the history
…796)
  • Loading branch information
mpasternak committed May 24, 2020
1 parent 925fcf4 commit 02d46b5
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 27 deletions.
49 changes: 27 additions & 22 deletions src/bpp/management/commands/wytnij_isbn_z_uwag.py
Expand Up @@ -12,36 +12,41 @@
)
import re

from bpp.util import wytnij_isbn_z_uwag


class Command(BaseCommand):
help = 'Wycina ISBN z pola "Uwagi"'

def add_arguments(self, parser):
parser.add_argument("--przenies-do-uwag", action="store_true")
parser.add_argument("--skasuj", action="store_true")

@transaction.atomic
def handle(self, *args, **options):
isbn_regex = re.compile(
r"^isbn\s*[0-9]*[-| ][0-9]*[-| ][0-9]*[-| ][0-9]*[-| ][0-9]*",
flags=re.IGNORECASE,
)
def handle(self, przenies_do_uwag, skasuj, *args, **options):

if przenies_do_uwag and skasuj:
raise Exception("albo --skasuj, albo --przenies-do-uwag")

for klass in Wydawnictwo_Zwarte, Wydawnictwo_Ciagle:
for rec in klass.objects.filter(uwagi__istartswith="isbn"):
res = isbn_regex.search(rec.uwagi)
if res:
res = res.group()
orig_uwagi = rec.uwagi
rec.isbn = res.replace("ISBN", "").replace("isbn", "").strip()
rec.uwagi = rec.uwagi.replace(res, "").strip()

while (
rec.uwagi.startswith(".")
or rec.uwagi.startswith(";")
or rec.uwagi.startswith(",")
):
rec.uwagi = rec.uwagi[1:].strip()

print(f"[{orig_uwagi}] => ISBN [{rec.isbn}], uwagi [{rec.uwagi}]")
rec.save()
else:

res = wytnij_isbn_z_uwag(rec.uwagi)

if res is None:
print(
f"*** No match for [{rec.uwagi}] ({rec.tytul_oryginalny}), why?"
)
else:
isbn, rest = res

print(f"[{rec.uwagi}] => ISBN [{isbn}], uwagi [{rest}]")

if przenies_do_uwag:
rec.isbn = isbn
rec.uwagi = rest
rec.save()

if skasuj:
rec.uwagi = rest
rec.save()
32 changes: 29 additions & 3 deletions src/bpp/tests/test_util.py
@@ -1,14 +1,40 @@
import pytest

from bpp.util import wytnij_isbn_z_uwag


@pytest.mark.django_db
def test_zaktualizuj_cache_ciagle(django_assert_num_queries, wydawnictwo_ciagle_z_dwoma_autorami,
wydawnictwo_zwarte_z_autorem):
def test_zaktualizuj_cache_ciagle(
django_assert_num_queries,
wydawnictwo_ciagle_z_dwoma_autorami,
wydawnictwo_zwarte_z_autorem,
):
with django_assert_num_queries(2):
wydawnictwo_ciagle_z_dwoma_autorami.zaktualizuj_cache()


@pytest.mark.django_db
def test_zaktualizuj_cache_zwarte(django_assert_num_queries, wydawnictwo_zwarte_z_autorem):
def test_zaktualizuj_cache_zwarte(
django_assert_num_queries, wydawnictwo_zwarte_z_autorem
):
with django_assert_num_queries(2):
wydawnictwo_zwarte_z_autorem.zaktualizuj_cache()


@pytest.mark.parametrize(
"input,output,rest",
[
("ISBN 978-83-7374-091-4, ten tego", "978-83-7374-091-4", "ten tego"),
("ISBN 83-200-1817-X", "83-200-1817-X", ""),
("tu nie ma ISBNu", None, None),
],
)
def test_wytnij_isbn_z_uwag(input, output, rest):
res = wytnij_isbn_z_uwag(input)
if output is None:
assert res is None
return

isbn, reszta = res
assert isbn == output
assert reszta == rest
21 changes: 21 additions & 0 deletions src/bpp/util.py
Expand Up @@ -365,3 +365,24 @@ def usun_nieuzywany_typ_charakter(klass, field, dry_run):
print(f"Kasuje {elem}")
if not dry_run:
elem.delete()


isbn_regex = re.compile(
r"^isbn\s*[0-9]*[-| ][0-9]*[-| ][0-9]*[-| ][0-9]*[-| ][0-9]*X?",
flags=re.IGNORECASE,
)


def wytnij_isbn_z_uwag(uwagi):
res = isbn_regex.search(uwagi)
if res:
res = res.group()
isbn = res.replace("ISBN", "").replace("isbn", "").strip()
reszta = uwagi.replace(res, "").strip()

while (
reszta.startswith(".") or reszta.startswith(";") or reszta.startswith(",")
):
reszta = reszta[1:].strip()

return isbn, reszta
5 changes: 3 additions & 2 deletions src/import_dbf/Makefile
Expand Up @@ -127,11 +127,12 @@ przenies-sortowanie-jednostek:
echo "UPDATE bpp_jednostka SET kolejnosc = import_dbf_jed.sort::integer FROM import_dbf_jed WHERE import_dbf_jed.bpp_jednostka_id = bpp_jednostka.id" | $(PSQL_VERBOSE)

przenies-isbn:
$(MANAGE) wytnij_isbn_z_uwag
$(MANAGE) wytnij_isbn_z_uwag --przenies-do-uwag > isbn-przenies.txt
# $(MANAGE) wytnij_isbn_z_uwag --skasuj > isbn-skasuj.txt

usun-nieuzywane-charaktery-kbny:
$(MANAGE) usun_nieuzywane_charaktery_kbny

integrate: disable-trigger integruj-dbf integruj-liste-wydawcow ustaw-obca-jednostke rebuild-cache ustaw-date-aktualizacji wylacz-alfabetyczne-sortowanie-jednostek przenies-sortowanie-jednostek przenies-isbn enable-trigger dodaj-aktualnosc usun-nieuzywane-charaktery-kbny
integrate: disable-trigger integruj-dbf integruj-liste-wydawcow ustaw-obca-jednostke przenies-isbn rebuild-cache ustaw-date-aktualizacji wylacz-alfabetyczne-sortowanie-jednostek przenies-sortowanie-jednostek enable-trigger dodaj-aktualnosc usun-nieuzywane-charaktery-kbny

rebuild: convert-dbfs import-dbf integrate

0 comments on commit 02d46b5

Please sign in to comment.