Skip to content

Commit

Permalink
Merge branch 'feature/792-podwojni-autorzy' into dev
Browse files Browse the repository at this point in the history
  • Loading branch information
mpasternak committed Feb 23, 2020
2 parents 97cccc5 + d3facc4 commit ae15b56
Show file tree
Hide file tree
Showing 5 changed files with 117 additions and 39 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -112,3 +112,4 @@ src/import_dbf/db-old/
/stellar.yaml

.env
src/import_dbf/integruj-dbf-enable-publikacja.log.txt
2 changes: 2 additions & 0 deletions HISTORY.rst
Expand Up @@ -8,6 +8,8 @@ Historia zmian
* wyświetlaj lata dla raportu zerowego w jednej kolumnie (#812)
* nie uwzględniaj wpisów dyscyplin bez punktacji w raporcie zerowym (#785)
* umożliwiaj oddzielne zarządzanie widocznością raportu slotów zerowych (#785)
* nie dodawaj pola 103 do konferencji przy imporcie DBF (#794)
* akceptuj podwójnych autorów przy imporcie DBF (#792)

202002.17
---------
Expand Down
35 changes: 18 additions & 17 deletions src/import_dbf/Makefile
@@ -1,4 +1,4 @@
PSQL=psql -t --echo-errors bpp | grep -v "INSERT 0 1"
PSQL=psql -q -t --echo-errors bpp | grep -v "INSERT 0 1"
PSQL_VERBOSE=psql -t --echo-errors -a bpp
MANAGE=python ../manage.py
DBF2SQL=python ../../../manage.py dbf2sql
Expand All @@ -22,23 +22,24 @@ integruj-dbf-autorzy:
$(MANAGE) integruj_dbf --enable-autor

importuj-dyscypliny:
$(MANAGE) importuj_dyscypliny 2017 /Volumes/Dane\ zaszyfrowane/UMWroclaw/dyscypliny_BPP.xlsx
$(MANAGE) importuj_dyscypliny 2018 /Volumes/Dane\ zaszyfrowane/UMWroclaw/dyscypliny_BPP.xlsx
$(MANAGE) importuj_dyscypliny 2019 /Volumes/Dane\ zaszyfrowane/UMWroclaw/dyscypliny_BPP.xlsx
$(MANAGE) importuj_dyscypliny 2020 /Volumes/Dane\ zaszyfrowane/UMWroclaw/dyscypliny_BPP.xlsx -v3
$(MANAGE) importuj_dyscypliny -v0 2017 /Volumes/Dane\ zaszyfrowane/UMWroclaw/dyscypliny_BPP.xlsx
$(MANAGE) importuj_dyscypliny -v0 2018 /Volumes/Dane\ zaszyfrowane/UMWroclaw/dyscypliny_BPP.xlsx
$(MANAGE) importuj_dyscypliny -v0 2019 /Volumes/Dane\ zaszyfrowane/UMWroclaw/dyscypliny_BPP.xlsx
$(MANAGE) importuj_dyscypliny -v0 2020 /Volumes/Dane\ zaszyfrowane/UMWroclaw/dyscypliny_BPP.xlsx

integruj-dbf-publikacje:
$(MANAGE) integruj_dbf --enable-charakter-kbn-jezyk --charaktery-enrichment-xls /Volumes/Dane\ zaszyfrowane/UMWroclaw/charaktery.xlsx
$(MANAGE) integruj_dbf --enable-zrodlo
$(MANAGE) integruj_dbf --enable-publikacja
$(MANAGE) integruj_dbf --enable-publikacja > integruj-dbf-publikacja-log.txt
$(MANAGE) integruj_dbf --enable-zatwierdz-podwojne-przypisania
$(MANAGE) integruj_dbf --enable-b-a
$(MANAGE) integruj_dbf --enable-przypisz-jednostki

przypisz-dyscypliny:
$(MANAGE) przypisz_dyscypliny 2017 --ustawiaj-pierwsza-gdy-dwie --disable-cache
$(MANAGE) przypisz_dyscypliny 2018 --ustawiaj-pierwsza-gdy-dwie --disable-cache
$(MANAGE) przypisz_dyscypliny 2019 --ustawiaj-pierwsza-gdy-dwie --disable-cache
$(MANAGE) przypisz_dyscypliny 2020 --ustawiaj-pierwsza-gdy-dwie --disable-cache
$(MANAGE) przypisz_dyscypliny -v0 2017 --ustawiaj-pierwsza-gdy-dwie --disable-cache
$(MANAGE) przypisz_dyscypliny -v0 2018 --ustawiaj-pierwsza-gdy-dwie --disable-cache
$(MANAGE) przypisz_dyscypliny -v0 2019 --ustawiaj-pierwsza-gdy-dwie --disable-cache
$(MANAGE) przypisz_dyscypliny -v0 2020 --ustawiaj-pierwsza-gdy-dwie --disable-cache

integruj-dbf: integruj-dbf-autorzy importuj-dyscypliny integruj-dbf-publikacje przypisz-dyscypliny

Expand All @@ -48,13 +49,13 @@ remove-dbfs:
psql -U postgres -d bpp

alter-schema:
cat sql/alter-schema.sql | $(PSQL_VERBOSE)
cat sql/translate-title.sql | $(PSQL_VERBOSE)
cat sql/translate-autor.sql | $(PSQL_VERBOSE)
cat sql/translate-poz.sql | $(PSQL_VERBOSE)
cat sql/translate-usi.sql | $(PSQL_VERBOSE)
cat sql/translate-zrodlo.sql | $(PSQL_VERBOSE)
cat sql/alter-umw.sql | $(PSQL_VERBOSE)
cat sql/alter-schema.sql | $(PSQL)
cat sql/translate-title.sql | $(PSQL)
cat sql/translate-autor.sql | $(PSQL)
cat sql/translate-poz.sql | $(PSQL)
cat sql/translate-usi.sql | $(PSQL)
cat sql/translate-zrodlo.sql | $(PSQL)
cat sql/alter-umw.sql | $(PSQL)

delete-imported-data:
cat sql/remove-imported.sql | $(PSQL)
Expand Down
18 changes: 12 additions & 6 deletions src/import_dbf/management/commands/integruj_dbf.py
Expand Up @@ -7,11 +7,9 @@
import django
from django.core.management import BaseCommand

from bpp.models import Konferencja
from bpp.util import partition_count
from import_dbf.models import B_A, Bib
from import_dbf.util import (
ekstrakcja_konferencji,
integruj_autorow,
integruj_b_a,
integruj_charaktery,
Expand All @@ -30,6 +28,7 @@
usun_podwojne_przypisania_b_a,
wyswietl_prace_bez_dopasowania,
wzbogacaj_charaktery,
zatwierdz_podwojne_przypisania,
)

django.setup()
Expand All @@ -56,6 +55,12 @@ def add_arguments(self, parser):

parser.add_argument("--enable-zrodlo", action="store_true")
parser.add_argument("--enable-b-a", action="store_true")
parser.add_argument(
"--enable-zatwierdz-podwojne-przypisania",
action="store_true",
help="""W przypadku, gdyby podwójne przypisania w bazie danych były OK, podaj ten argument
aby utworzyć dodatkowe rekordy dla prawidłowo zdublowanych autorów""",
)
parser.add_argument("--enable-przypisz-jednostki", action="store_true")

def handle(
Expand Down Expand Up @@ -120,10 +125,6 @@ def handle(
partition_count(Bib.objects.exclude(analyzed=True), num_proc),
)

logger.info("Integruje konferencje")
if Konferencja.objects.count() < 100:
pool.apply(ekstrakcja_konferencji)

logger.info("Integruje publikacje")
# pool.apply(integruj_publikacje)
pool.starmap(
Expand All @@ -135,6 +136,11 @@ def handle(

pool.apply(wyswietl_prace_bez_dopasowania, (logger,))

if enable_all or options["enable_zatwierdz_podwojne_przypisania"]:
logger.info("Zatwierdzanie podwójnych podwojnych przypisan")
zatwierdz_podwojne_przypisania(logger)
# pool.apply(zatwierdz_podwojne_przypisania, (logger,))

if enable_all or options["enable_b_a"]:
logger.info("Usuwanie podwojnych przypisan")
pool.apply(usun_podwojne_przypisania_b_a, (logger,))
Expand Down
100 changes: 84 additions & 16 deletions src/import_dbf/util.py
Expand Up @@ -7,6 +7,7 @@
from django.contrib.contenttypes.models import ContentType
from django.db import IntegrityError, transaction
from django.db.models import Count, Q
from django.forms.models import model_to_dict

from bpp import models as bpp
from bpp.models import (
Expand Down Expand Up @@ -272,7 +273,7 @@ def exp_autor(base_aut, already_seen=None):


@transaction.atomic
def integruj_autorow():
def integruj_autorow(silent=False):
tytuly = get_dict(bpp.Tytul, "skrot")
funkcje = get_dict(bpp.Funkcja_Autora, "skrot")

Expand All @@ -282,7 +283,10 @@ def integruj_autorow():
.order_by("idt_aut")
)

for (autor_id,) in pbar(base_query):
if not silent:
base_query = pbar(base_query)

for (autor_id,) in base_query:
a = dbf.Aut.objects.get(pk=autor_id)
if a.bpp_autor_id is not None:
continue
Expand Down Expand Up @@ -576,14 +580,6 @@ def mapuj_elementy_publikacji(offset, limit):
rec.save()


@transaction.atomic
def ekstrakcja_konferencji():
for elem in dbf.Bib_Desc.objects.filter(elem_id=103):
bpp.Konferencja.objects.get_or_create(nazwa=elem.value["a"])
for literka in "bcde":
assert not elem.value.get(literka)


def to_pubmed_id(ident):
if not ident.strip() == "":
return
Expand Down Expand Up @@ -964,10 +960,15 @@ def integruj_publikacje(offset=None, limit=None):
kw["szczegoly"] += elem.get("e")

elif elem["id"] == 103:
# Konferencja
konferencja = bpp.Konferencja.objects.get(nazwa=elem["a"])
assert not kw.get("konferencja"), (elem, rec)
kw["konferencja"] = konferencja
# Uwagi (nie: konferencja)
# Zgłoszenie #794 Przy imporcie wszystkie uwagi w opisach artykułów z czasopism
# (pole 103) stały informacjami o konferencjach, a spora część dotyczy czegoś
# innego. Pole to należy przenieść przy imporcie do pola "Informacje"
# (lub innego odpowiadającego uwadze).
if kw.get("uwagi") is None:
kw["uwagi"] = elem["a"]
else:
kw["uwagi"] += elem["a"]

elif elem["id"] == 153:
assert not kw.get("szczegoly")
Expand All @@ -976,8 +977,19 @@ def integruj_publikacje(offset=None, limit=None):
kw["szczegoly"] = exp_combine(elem.get("b"), elem.get("c"))

elif elem["id"] == 104:
assert not kw.get("uwagi"), (kw["uwagi"], elem, rec, rec.idt)
kw["uwagi"] = elem["a"]
# assert not kw.get("uwagi"), (kw["uwagi"], elem, rec, rec.idt)
if kw.get("uwagi") is None:
kw["uwagi"] = elem["a"]
else:
print(
"Łączę pola UWAGI: %s | %s | %s "
% (rec.idt, kw.get("uwagi"), elem["a"])
)
kw["uwagi"] = exp_combine(kw.get("uwagi"), elem["a"], sep=". ")
kw["adnotacje"] = exp_combine(
kw.get("adnotacje"), "połączone pola uwag", sep=". "
)

for literka in "bcd":
assert not elem.get(literka), (elem, rec, rec.idt)

Expand Down Expand Up @@ -1368,6 +1380,62 @@ def wyswietl_prace_bez_dopasowania(logger):
logger.info((rec.idt, rec.rok, rec.tytul_or_s))


@transaction.atomic
def zatwierdz_podwojne_przypisania(logger):
"""Zakładamy, że podwójne przypisania w bazie danych są POPRAWNE. Expertus
nie umożliwia sytuacji, gdzie dwóch Janów Kowalskich ma dwa rekordy
(zdaniem BG UMW), stąd w przypadku podwójnych przypisań autorów, utwórz
nowy rekord dla drugiego(czy na pewno?) autora
Genialnie byłoby tu upewnić się, że każdy tworzony dodatkowy rekord
to rekord w obcej jednostce
"""
from django.conf import settings

setattr(settings, "ENABLE_DATA_AKT_PBN_UPDATE", False)

for elem in (
dbf.B_A.objects.order_by()
.values("idt_id", "idt_aut_id",)
.annotate(cnt=Count("*"))
.filter(cnt__gt=1)
):
elem["cnt"]
for melem in dbf.B_A.objects.filter(
idt_id=elem["idt_id"], idt_aut_id=elem["idt_aut_id"]
)[1:]:
logger.info(
(
"Tworzę dodatkowe (podwójne) przypisanie",
melem.idt.tytul_or_s,
"(",
melem.idt.rok,
") - ",
melem.idt_aut,
", jedn. ",
melem.idt_jed,
)
)

kw = model_to_dict(melem.idt_aut)
kw["idt_jed_id"] = kw.pop("idt_jed")
kw["exp_id"] = None
kw["bpp_autor"] = None
kw["bpp_autor_id"] = None
kw["orcid_id"] = None
kw["pbn_id"] = None
kw["ref"] = None
from django.db.models import Max

kw["idt_aut"] = dbf.Aut.objects.all().aggregate(c=Max("idt_aut"))["c"] + 1
idt_aut = dbf.Aut.objects.create(**kw)

melem.idt_aut = idt_aut
melem.save()

integruj_autorow()


@transaction.atomic
def usun_podwojne_przypisania_b_a(logger):
from django.conf import settings
Expand Down

0 comments on commit ae15b56

Please sign in to comment.