PAS api
Modul api.
Třídy
- class PasApiPermissionMixin
Sdílené helpery pro permission a throttle logiku PAS XML API.
Metody:
- _resolve_trusted_networks()
Přeloží seznam IP adres, CIDR rozsahů nebo DNS názvů na seznam
ipaddress.IPv4Networkobjektů.Výsledky jsou uloženy v cache po dobu
_trusted_proxy_resolve_ttlsekund. Pro Docker service jméno (např."proxy") se IP adresa zjišťuje přes DNS pomocísocket.getaddrinfo.- Parametry:
entries – Seznam CIDR řetězců, IP adres nebo DNS názvů.
- Vrací:
Seznam
ipaddress.IPv4Network(neboIPv6Network) objektů.
- load_json_setting()
Načte JSON hodnotu z
CustomAdminSettingspro skupinupas_api.Nastavení se konfiguruje v Django administraci přes model
CustomAdminSettings(skupinapas_api). Každý záznam musí mít polevalueobsahující platný JSON.Podporované záznamy:
access_rules(item_id="access_rules")Seznam pravidel přístupu. Každé pravidlo je objekt s klíči:
rule_type(povinný) — typ pravidla; povolené hodnoty:"ip_blacklist","ip_whitelist","user_blacklist","user_whitelist"value(povinný) — IP adresa, IP rozsah (např."192.168.1.1-192.168.1.5"), CIDR rozsah (např."192.168.1.0/24") nebo uživatelské jméno podlerule_typeactive(volitelný, výchozí ``true``) —falsepravidlo dočasně deaktivuje
Příklad:
[ {"rule_type": "ip_blacklist", "value": "1.2.3.4"}, {"rule_type": "ip_whitelist", "value": "10.0.0.0/8"}, {"rule_type": "user_blacklist", "value": "jan.novak", "active": false} ]
rate_limits(item_id="rate_limits")Seznam limitů počtu požadavků. Každý limit je objekt s klíči:
scope(povinný) — rozsah pravidla; povolené hodnoty:"user","ip"value(povinný) — uživatelské jméno nebo IP adresa, IP rozsah, CIDR rozsahrate(povinný) — limit ve formátu"počet/jednotka"; jednotky:s(sekunda),m(minuta),h(hodina),d(den); např."10/m","100/h","1000/d"active(volitelný, výchozí ``true``) —falselimit dočasně deaktivuje
Příklad:
[ {"scope": "user", "value": "jan.novak", "rate": "10/m"}, {"scope": "ip", "value": "203.0.113.0/24", "rate": "50/h"} ]
access_mode(item_id="access_mode")Režim globální dostupnosti API. Podporované hodnoty:
"open"— API je otevřené; whitelist pravidla se neaplikují"whitelist_only"— API je dostupné pouze přes whitelist pravidla"closed"— API je úplně uzavřené
Příklad:
"whitelist_only"trusted_proxies(item_id="trusted_proxies")Seznam důvěryhodných proxy serverů stojících před aplikací. Každá položka je CIDR řetězec, IP adresa nebo DNS název (např. Docker service jméno). Používá se pro správné určení IP adresy klienta z hlavičky
X-Forwarded-For. Pokud nastavení chybí, použije se výchozí prázdný seznam[].Příklad:
["10.0.1.0/24", "proxy"]
record_lock_params(item_id="record_lock_params")Parametry Redis zámku záznamu. Objekt s klíči:
retry_delay(volitelný, výchozí ``0.5``) — čekací interval v sekundách mezi pokusy o získání zámku; musí být kladné číslo (float)max_retries(volitelný, výchozí ``10``) — maximální počet pokusů; musí být kladné celé číslo (int)
Pokud nastavení chybí, použijí se výchozí hodnoty.
Příklad:
{"retry_delay": 1.0, "max_retries": 5}
Změny v administraci se projeví do
30sekund (TTL cache).- Parametry:
item_id – Identifikátor záznamu —
"access_rules","rate_limits","access_mode","trusted_proxies"nebo"record_lock_params".raise_validation_error – Pokud je
True(výchozí), nevalidní JSON vyhodíValidationError.
- Vrací:
Naparsovaná JSON hodnota nebo
[]při chybě či absenci záznamu.
- get_access_rules()
Vrátí přístupová pravidla API z cache nebo
CustomAdminSettings.Každé pravidlo je slovník s klíči
rule_type,valuea volitelněactive(výchozíTrue).- Vyvolá:
ValidationError – Pokud nastavení nemá očekávanou strukturu nebo obsahuje nevalidní pravidlo.
- Vrací:
Seznam aktivních pravidel.
- validate_access_rules()
Ověří strukturu a obsah nastavení
access_rules.- Parametry:
raw_rules – Naparsovaná JSON hodnota nastavení
access_rules.- Vyvolá:
ValidationError – Pokud struktura nebo obsah pravidel neodpovídá očekávání.
- Vrací:
Truepokud je nastavení validní.
- validate_custom_admin_setting()
Ověří
CustomAdminSettingszáznam relevantní pro PAS API před uložením.Pokud jde o skupinu
pas_api, ověří platnostitem_ida podle něj validuje JSON hodnotu příslušným validátorem. Podporovanáitem_id:"access_rules","rate_limits","access_mode","trusted_proxies","record_lock_params".- Parametry:
instance – Ukládaný záznam
CustomAdminSettings.- Vyvolá:
ValidationError – Pokud
item_idnení podporováno nebo JSON/struktura hodnoty nejsou validní.- Vrací:
Truepokud je záznam validní nebo se na něj validace nevztahuje.
- get_rate_limits()
Vrátí limity počtu požadavků z cache nebo
CustomAdminSettings.Každý limit je slovník s klíči
scope,ratea volitelněactive(výchozíTrue). Pro scopeuseraipje navíc povinný klíčvalue.- Vyvolá:
ValidationError – Pokud nastavení nemá očekávanou strukturu nebo obsahuje nevalidní limit.
- Vrací:
Seznam aktivních limitů.
- validate_rate_limits()
Ověří strukturu a obsah nastavení
rate_limits.- Parametry:
raw_limits – Naparsovaná JSON hodnota nastavení
rate_limits.- Vyvolá:
ValidationError – Pokud struktura nebo obsah limitů neodpovídá očekávání.
- Vrací:
Truepokud je nastavení validní.
- get_access_mode()
Vrátí globální režim dostupnosti PAS XML API.
Hodnota se načítá z
CustomAdminSettings(pas_api/access_mode) a kešuje se. Neplatná nebo chybějící hodnota znamená výchozí režimopen.- Vyvolá:
ValidationError – Pokud nastavení neobsahuje podporovanou hodnotu.
- Vrací:
Jeden z režimů
open,whitelist_onlyneboclosed.
- validate_access_mode()
Ověří hodnotu nastavení
access_mode.- Parametry:
value – Naparsovaná JSON hodnota nastavení
access_mode.- Vyvolá:
ValidationError – Pokud hodnota není jedním z podporovaných režimů.
- Vrací:
Truepokud je hodnota validní.
- get_trusted_proxies()
Vrátí seznam důvěryhodných proxy serverů z cache nebo
CustomAdminSettings.Pokud nastavení
trusted_proxiesneexistuje, vrátí výchozí hodnotu[].- Vyvolá:
ValidationError – Pokud nastavení má neplatnou strukturu.
- Vrací:
Seznam řetězců — CIDR rozsahy, IP adresy nebo DNS názvy.
- validate_trusted_proxies()
Ověří strukturu nastavení
trusted_proxies.Každá položka musí být neprázdný řetězec. Hodnoty CIDR rozsahů jsou ověřeny pomocí
ipaddress.ip_network; ostatní řetězce jsou považovány za DNS názvy a v administraci jsou přijaty bez DNS lookup (ten probíhá za běhu).- Parametry:
raw_proxies – Naparsovaná JSON hodnota nastavení
trusted_proxies.- Vyvolá:
ValidationError – Pokud struktura nebo obsah neodpovídá očekávání.
- Vrací:
Truepokud je nastavení validní.
- get_record_lock_params()
Vrátí parametry Redis zámku záznamu z cache nebo
CustomAdminSettings.Pokud nastavení
record_lock_paramsneexistuje, vrátí výchozí hodnoty(_RECORD_LOCK_DEFAULT_RETRY_DELAY, _RECORD_LOCK_DEFAULT_MAX_RETRIES).- Vyvolá:
ValidationError – Pokud nastavení má neplatnou strukturu.
- Vrací:
Dvojice
(retry_delay, max_retries).
- validate_record_lock_params()
Ověří strukturu a obsah nastavení
record_lock_params.Očekávaný formát je objekt s nepovinnými klíči
retry_delay(kladnéfloat) amax_retries(kladné celé čísloint).- Parametry:
raw_params – Naparsovaná JSON hodnota nastavení
record_lock_params.- Vyvolá:
ValidationError – Pokud struktura nebo hodnoty neodpovídají očekávání.
- Vrací:
Truepokud je nastavení validní.
- get_client_ip()
Vrátí IP adresu klienta z požadavku.
Prochází hlavičku
X-Forwarded-Forzprava doleva a přeskakuje IP adresy důvěryhodných proxy serverů (z nastavenípas_api/trusted_proxies). První nedůvěryhodná IP adresa je vrácena jako adresa klienta.Pokud hlavička chybí nebo jsou všechny položky důvěryhodné, vrátí
REMOTE_ADDR.- Parametry:
request – HTTP požadavek.
- Vrací:
IP adresa klienta jako řetězec.
- get_user_identifier()
Vrátí identifikátor uživatele použitelný pro access-rules a rate-limity.
Projekt používá vlastní model uživatele s
USERNAME_FIELD = "email". Pro kompatibilitu helper preferujeemaila fallbackuje nausername.- Parametry:
user – Uživatel navázaný na požadavek.
- Vrací:
Email, username nebo
Nonepro neautentizovaného uživatele.
- ip_matches()
Porovná IP adresu klienta s konkrétní adresou, IP rozsahem nebo CIDR rozsahem.
- Parametry:
client_ip – IP adresa klienta.
pattern – IP adresa, IP rozsah (např.
192.168.1.1-192.168.1.5) nebo CIDR rozsah (např.192.168.1.0/24").
- Vrací:
Truepokud adresa odpovídá vzoru.
- class IpBlacklistPermission
Zamítne přístup IP adresám uvedeným v blacklistu
CustomAdminSettings(pas_api/access_rules).Metody:
- has_permission()
Ověří, zda IP adresa klienta není na blacklistu.
- Parametry:
request – HTTP požadavek.
view – Pohled zpracovávající požadavek.
- Vrací:
Falsepokud je IP na blacklistu, jinakTrue.
- class IpWhitelistPermission
Povolí přístup pouze IP adresám uvedeným ve whitelistu
CustomAdminSettings(pas_api/access_rules).Pokud žádné aktivní whitelist pravidlo neexistuje, propustí všechny požadavky.
Metody:
- has_permission()
Ověří, zda IP adresa klienta je na whitelistu (pokud je whitelist definován).
- Parametry:
request – HTTP požadavek.
view – Pohled zpracovávající požadavek.
- Vrací:
Truepokud whitelist není definován nebo IP na něm je, jinakFalse.
- class UserBlacklistPermission
Zamítne přístup uživatelům uvedeným v blacklistu
CustomAdminSettings(pas_api/access_rules).Metody:
- has_permission()
Ověří, zda přihlášený uživatel není na blacklistu.
- Parametry:
request – HTTP požadavek.
view – Pohled zpracovávající požadavek.
- Vrací:
Falsepokud je uživatel na blacklistu, jinakTrue.
- class UserWhitelistPermission
Povolí přístup pouze uživatelům uvedeným ve whitelistu
CustomAdminSettings(pas_api/access_rules).Pokud žádné aktivní whitelist pravidlo neexistuje, propustí všechny požadavky.
Metody:
- has_permission()
Ověří, zda přihlášený uživatel je na whitelistu (pokud je whitelist definován).
- Parametry:
request – HTTP požadavek.
view – Pohled zpracovávající požadavek.
- Vrací:
Truepokud whitelist není definován nebo uživatel na něm je, jinakFalse.
- class ApiAccessModePermission
Řídí globální dostupnost PAS XML API podle
CustomAdminSettings(pas_api/access_mode).Metody:
- has_permission()
Ověří globální režim dostupnosti API.
Režim
openpožadavek propustí. Režimclosedvše zamítne. Režimwhitelist_onlyvyžaduje alespoň jedno aktivní whitelist pravidlo.- Parametry:
request – HTTP požadavek.
view – Pohled zpracovávající požadavek.
- Vrací:
Truepokud režim přístup dovoluje, jinakFalse.
- class ApiImportThrottle
Throttle pro API import samostatného nálezu řízený záznamy
CustomAdminSettings(pas_api/rate_limits).Pravidla jsou načítána z databáze (s cache) a vyhodnocují se nezávisle podle scope:
user,iparecord. Požadavek je povolen pouze tehdy, pokud projde všemi relevantními limity pro dané volání.Scope
recordpoužíváident_celyz URL jako stabilní identifikátor konkrétního záznamu. To je záměrné: jeden limit se tak sdílí mezi různými endpointy a akcemi nad týmžSamostatnyNaleza nelze jej obejít střídáním například PATCH a upload endpointu.Metody:
- allow_request()
Rozhodne, zda je požadavek povolen na základě nakonfigurovaných limitů.
- Parametry:
request – HTTP požadavek.
view – Pohled zpracovávající požadavek.
- Vrací:
Truepokud nebyl překročen žádný relevantní limit, jinakFalse.
- _check_limit()
Zkontroluje a aktualizuje počítadlo požadavků v cache pro daný klíč a rate.
Implementace používá fixní časové okno s atomickými operacemi
cache.add()acache.incr(). Oproti původnímu ukládání seznamu timestampů tím odpadá read-modify-write race condition při souběžných požadavcích.- Parametry:
cache_key – Klíč pro uložení počítadla v cache.
rate – Řetězec limitu ve formátu
počet/jednotka.request – HTTP požadavek (použit pro logování).
- Vrací:
Truepokud limit nebyl překročen, jinakFalse.
- wait()
Vrátí počet sekund do dalšího povoleného požadavku.
- Vrací:
Počet sekund nebo
None.
- class ImportErrorType
Typ chyby při importu XML samostatného nálezu.
- class ImportValidationIssue
Strukturovaná chyba vzniklá při importu XML samostatného nálezu.
Metody:
- to_dict()
Převede chybu na slovník pro API odpověď.
- Vrací:
Slovníková reprezentace chyby.
- class ImportValidationException
Validační chyba importu nesoucí již vytvořené
ImportValidationIssueinstance.Metody:
- __init__()
- from_serializer_errors()
Vytvoří výjimku importu z chyb serializeru.
- Parametry:
errors – Chyby vrácené serializerem.
line – Řádek zdrojového XML elementu.
column – Sloupec zdrojového XML elementu.
- Vrací:
Výjimka s naplněnými
ImportValidationIssueinstancemi.
- _serializer_error_to_error_type()
Určí typ importní chyby podle chyby serializeru.
- Parametry:
field_name – Název pole serializeru, na kterém chyba vznikla.
field_error – Jedna chyba serializeru.
- Vrací:
Typ importní chyby.
- class SamostatnyNalezXmlImportSerializer
Serializer pro import záznamu samostatného nálezu z XML; FK pole jsou identifikována přes ident_cely.
- class PasApiBaseView
Základní pohled sdílený všemi PAS API endpointy.
Metody:
- dispatch()
Zpracuje globální režim
closedještě před DRF permission vrstvou.Tím je zajištěn návratový kód
503 Service Unavailablebez zapojení permission mechaniky DRF, která by jinak vracela403.- Parametry:
request – Příchozí HTTP požadavek.
args – Dodatečné poziční argumenty.
kwargs – Dodatečné pojmenované argumenty.
- Vrací:
HTTP odpověď view nebo okamžitá odpověď
503při vypnutém API.
- _fail()
Označí log záznam jako neúspěšný, vytvoří a vrátí chybovou odpověď.
- Parametry:
log_entry – Záznam logu API požadavku.
body – Tělo odpovědi jako slovník.
http_status – HTTP stavový kód odpovědi.
- Vrací:
Chybová HTTP odpověď se zadaným tělem a stavovým kódem.
- _has_edit_permissions()
Ověří, zda má uživatel oprávnění editovat zadaný samostatný nález.
- Parametry:
user – Uživatel provádějící požadavek.
ident_cely – Identifikátor záznamu samostatného nálezu.
- Vrací:
Vrací
Truepokud má uživatel oprávněnípas_editpro daný záznam.
- _update_igsn_if_archived()
Pokud je záznam ve stavu SN4 (archivovaný), aktualizuje jeho IGSN metadata.
- Parametry:
instance – Aktualizovaný záznam samostatného nálezu.
- Vyvolá:
DoiWriteError – Pokud aktualizace IGSN selže.
- _acquire_record_lock()
Pokusí se získat zámek záznamu v Redis.
Kombinuje in-process
threading.Lock(_record_lock_thread_lock) pro serializaci vláken v rámci jednoho Django workeru s atomickýmcache.addpro koordinaci mezi více procesy. Pokud klíč neexistuje nebo má hodnotu0(uvolněno), zámek je získán nastavením hodnoty na1. Pokud je klíč1(zamčeno jiným workerem), čeká_RECORD_LOCK_RETRY_DELAYsekund a zkusí znovu, nejvýše_RECORD_LOCK_MAX_RETRIES-krát.- Parametry:
ident_cely – Identifikátor záznamu, jehož zámek se má získat.
- Vrací:
Truepokud byl zámek úspěšně získán, jinakFalse.
- _release_record_lock()
Uvolní zámek záznamu nastavením Redis hodnoty na
0.- Parametry:
ident_cely – Identifikátor záznamu, jehož zámek se má uvolnit.
- _verify_content_digest()
Ověří integritu souboru pomocí hlavičky
Content-Digest(RFC 9530).Očekávaný formát hlavičky:
sha-512=:<base64>:Pokud hlavička chybí nebo neodpovídá skutečnému SHA-512 obsahu souboru, vrátí chybovou zprávu.- Parametry:
request – HTTP požadavek obsahující hlavičku
Content-Digest.uploaded_file – Nahraný soubor; po zavolání je pozice čtení na začátku.
mismatch_status – Stavový kód použitý při neodpovídajícím SHA-512 hashi.
- Vrací:
Dvojice
(zpráva, status)neboNonepokud je digest v pořádku.
- _success()
Označí log záznam jako úspěšný, zaloguje výsledek a vrátí XML odpověď s metadaty.
Tato metoda vrací surové XML bajty přes
HttpResponsemísto DRFResponse, aby nedošlo k zásahu rendererů DRF do XML výstupu. Chybové odpovědi v téže view jsou vytvářeny metodou_fail(), která používá DRFResponsepro standardní serializaci strukturovaného JSON těla.- Parametry:
log_entry – Záznam logu API požadavku.
instance – Uložený záznam samostatného nálezu.
metadata – XML metadata vrácená Fedora repozitářem.
notes – Seznam poznámek o ignorovaných atributech
xml:lang.
- Vrací:
HTTP odpověď s XML metadaty a stavovým kódem 200.
- class SamostatnyNalezXmlBaseView
Základní pohled pro XML import záznamu samostatného nálezu.
Metody:
- _validation_status()
Určí HTTP stavový kód odpovědi na základě typů validačních chyb.
- Parametry:
errors – Seznam validačních chyb importu.
- Vrací:
HTTP stavový kód odpovídající nejzávažnějšímu typu chyby.
- _validate_declared_schema_version()
Ověří, že XML deklaruje podporovanou verzi AMČR schématu.
- Parametry:
doc – Naparsovaný XML dokument.
- Vrací:
Chybová zpráva nebo
None, pokud deklarace odpovídá podporované verzi.
- _get_amcr_schema()
Vrátí zkompilované XSD schéma AMČR podle URL deklarované v
xsi:schemaLocation.- Parametry:
doc – Naparsovaný XML dokument s deklarovaným
xsi:schemaLocation.- Vrací:
Vrací instanci
etree.XMLSchemapro validaci importovaných XML dokumentů.
- _validate_schema_url_allowed()
Ověří, že URL schématu patří mezi povolené URL prefixy.
- Parametry:
url – URL schématu nebo importovaného XSD souboru.
- Vyvolá:
ImportValidationException – Pokud URL míří mimo povolené domény.
- _ns()
Vrátí tag s prefixem jmenného prostoru AMČR.
- Parametry:
tag – Název elementu bez prefixu jmenného prostoru.
- Vrací:
Vrací řetězec ve tvaru
{namespace}tag.
- _get_ignored_lang_notes()
Vrátí seznam poznámek pro elementy s nepodporovaným
xml:lang.- Parametry:
elem – Importovaný element
amcr:samostatny_nalez.- Vrací:
Seznam textových poznámek.
- _parse_bool()
Převede textovou hodnotu XML elementu na Python
bool, neboNone.Přijímá hodnoty
"true"/"1"jakoTruea"false"/"0"jakoFalse(bez ohledu na velikost písmen). Ostatní hodnoty aNonevrátíNone.- Parametry:
value – Textová hodnota z XML elementu.
- Vrací:
True,False, neboNone.
- _text()
Vrátí textový obsah prvního podřízeného elementu se zadaným tagem, nebo None.
- Parametry:
elem – Rodičovský element, ve kterém se hledá.
tag – Název hledaného podřízeného elementu (bez jmenného prostoru).
- Vrací:
Textový obsah elementu nebo None, pokud element neexistuje nebo je prázdný.
- _id_attr()
Vrátí hodnotu atributu
idprvního podřízeného elementu se zadaným tagem.Používá se pro elementy typu
refTypeavocabType, kde atributidneseident_celyodkazovaného záznamu.- Parametry:
elem – Rodičovský element, ve kterém se hledá.
tag – Název hledaného podřízeného elementu (bez jmenného prostoru).
- Vrací:
Hodnota atributu
idnebo None, pokud element nebo atribut neexistuje.
- _parse_nalez_element()
Převede element
amcr:samostatny_nalezna slovník pro deserializaci.Elementy typu
refTypeavocabTypese mapují pomocí atributuid, který neseident_celyodkazovaného záznamu. Geometrie jsou předány jako WKT řetězce z elementůgeom_wktageom_sjtsk_wkt.- Parametry:
elem – Element
amcr:samostatny_nalezz importovaného XML dokumentu.user – Uživatel provádějící import.
- Vrací:
Dvojice
(data, nova_osoba)připravená pro import.
- _parse_nalezce()
Zpracuje element
nalezcea vrátíident_celyosoby pro import.Pokud má element atribut
id=":tba", vytvoří se nová osoba z textu ve formátu"Příjmení, Jméno". Nová osoba se zde pouze připraví, ale uloží se až v transakci společně sSamostatnyNalez.- Parametry:
elem – Element
amcr:samostatny_nalez.user – Uživatel provádějící import.
- Vrací:
Dvojice
(ident_cely_osoby, nova_osoba).
- _build_schema_validation_doc()
Vytvoří kopii dokumentu upravenou pro validaci proti XSD schématu.
XSD vyžaduje element
stav. Pokud v dokumentu chybí, doplní se do kopie pro účely validace; originální dokument zůstává nezměněn.- Parametry:
doc – Původní XML dokument.
- Vrací:
Kopie XML dokumentu určená pro schema validaci.
- class SamostatnyNalezXmlImportView
Pohled pro import záznamu samostatného nálezu z XML souboru přes POST požadavek.
Metody:
- post()
Importuje nový záznam samostatného nálezu z XML souboru.
Přijímá soubor v parametru
file(multipart/form-data). XML musí odpovídat schématu AMČR 2.2 (https://api.aiscr.cz/schema/amcr/2.2/amcr.xsd). Dokument musí obsahovat právě jeden elementamcr:samostatny_nalez.- Parametry:
request – HTTP požadavek obsahující XML soubor v poli
file.format – Formát odpovědi.
- Vrací:
Vrací
Responses metadaty vytvořeného záznamu (HTTP 200), nebo chybou syntaxe volání (HTTP 400), chybějícím projektem (HTTP 404), nevalidním XML či datovými chybami (HTTP 422).
- _has_import_permissions()
Ověří oprávnění potřebná pro import samostatného nálezu.
- Parametry:
user – Uživatel provádějící import.
data – Data jednoho importovaného záznamu.
- Vrací:
Vrací
Truepokud má uživatel všechna vyžadovaná oprávnění.
- _create_import_history_records()
Vytvoří historii pro importovaný záznam samostatného nálezu.
- Parametry:
instance – Vytvořený záznam samostatného nálezu.
user – Uživatel, který provedl import.
- _validate_disallowed_elements()
Ověří, že importovaný element neobsahuje nepovolené podřízené elementy.
- Parametry:
elem – Importovaný element
amcr:samostatny_nalez.- Vyvolá:
ImportValidationException – Pokud je nalezen nepovolený element.
- class SamostatnyNalezEvidencniCisloPatchView
Pohled pro aktualizaci pole
evidencni_cislozáznamu samostatného nálezu přes PATCH požadavek.Metody:
- _has_edit_permissions()
Ověří, zda má uživatel oprávnění editovat evidenční číslo záznamu samostatného nálezu.
Oprávněný je takový uživatel, který splňuje standardní pravidla pro editaci nálezu s těmito úpravami:
pro aktualizaci ev. čísla nikdy není autorizován badatel (operaci může užívat pouze archeolog a výše)
pokud je autorizován archeolog, nález může být v libovolném stavu (vč. archivovaného)
- Parametry:
user – Uživatel provádějící požadavek.
ident_cely – Identifikátor záznamu samostatného nálezu.
- Vrací:
Vrací
Truepokud má uživatel oprávněnípas_editpro daný záznam a zároveň je jeho hlavní role Archeolog nebo vyšší.
- patch()
Aktualizuje pole
evidencni_cislozáznamu samostatného nálezu.Přijímá
ident_celyzáznamu jako součást URL a novou hodnotuevidencni_cislojako query parametr. Parametrevidencni_cisloje povinný a jeho hodnota musí být neprázdná. Endpoint rozlišuje mezi chybějícím parametrem a přítomným parametrem s prázdnou hodnotou, aby klient mohl oba validační stavy zpracovat odlišně.Příklad volání:
PATCH /pas/api/nalez/M-202400001-N00001/evidencni-cislo?evidencni_cislo=EC-2024-001
- Parametry:
request – HTTP požadavek s povinným query parametrem
evidencni_cislo, který nesmí být prázdný.ident_cely – Identifikátor záznamu samostatného nálezu.
format – Formát odpovědi.
- Vrací:
Vrací XML metadata aktualizovaného záznamu (HTTP 200), nebo chybou syntaxe volání (HTTP 400; chybějící parametr
evidencni_cislo), chybou dat (HTTP 422; prázdná, příliš dlouhá nebo shodná hodnota), nenalezeným záznamem (HTTP 404), nedostatečnými oprávněními (HTTP 403), nebo interní chybou (HTTP 500).
- _create_history_record()
Vytvoří záznam historie pro aktualizaci pole
evidencni_cislo.Poznámka záznamu má formát
old_value -> new_value. Je-li záznam ve stavu SN4 (archivovaný), zapíše se navíc záznamSN34, který obnoví datum archivace.- Parametry:
instance – Aktualizovaný záznam samostatného nálezu.
user – Uživatel, který provedl aktualizaci.
old_value – Původní hodnota pole
evidencni_cislo.new_value – Nová hodnota pole
evidencni_cislo.
- class SamostatnyNalezFotografieUploadView
Pohled pro nahrání jedné fotografie k existujícímu samostatnému nálezu.
Metody:
- _has_upload_permissions()
Ověří, zda má uživatel oprávnění nahrát fotografii k danému nálezu.
Oprávněný je takový uživatel, který splňuje standardní pravidla pro editaci nálezu s těmito úpravami:
pro nahrání fotografie nikdy není autorizován badatel (operaci může užívat pouze archeolog a výše)
pokud je autorizován archeolog, nález může být v libovolném stavu (vč. archivovaného)
- Parametry:
user – Uživatel provádějící požadavek.
ident_cely – Identifikátor záznamu samostatného nálezu.
- Vrací:
Truepokud má uživatel oprávněnísoubor_nahrat_paspro daný záznam a zároveň je jeho hlavní role Archeolog nebo vyšší.
- _create_rearchive_history_record()
Pro archivovaný nález zapíše do historie tichou reachivaci
SN34.- Parametry:
instance – Aktualizovaný záznam samostatného nálezu.
user – Uživatel, který provedl upload fotografie.
- post()
Nahraje fotografii k existujícímu záznamu samostatného nálezu.
Přijímá
ident_celyzáznamu jako součást URL a jeden binární soubor v parametrufile(multipart/form-data). Soubor musí projít kontrolouContent-Digest, MIME typu a antiviru. Úspěšný upload uloží fotografii do Fedora repository, založí záznamSoubornavázaný na nález a vrátí aktualizovaná XML metadata z Fedory.- Parametry:
request – HTTP požadavek obsahující fotografii v poli
file.ident_cely – Identifikátor aktualizovaného záznamu samostatného nálezu.
format – Formát odpovědi.
- Vrací:
Vrací XML metadata aktualizovaného záznamu (HTTP 200), nebo chybu syntaxe volání (HTTP 400), nenalezený záznam (HTTP 404), validační chybu souboru (HTTP 422), nebo interní chybu (HTTP 500).
Funkce
- _is_valid_ip_rule_value(value)
Ověří, zda je hodnota IP pravidla syntakticky platná adresa, CIDR prefix nebo IP rozsah.
Podporuje IPv4 i IPv6 ve všech třech formátech: - jednotlivá adresa (
"192.0.2.1","2001:db8::1") - CIDR prefix ("192.0.2.0/24","2001:db8::/32") - explicitní rozsah ("192.168.1.1-192.168.1.5"; pouze IPv4)- Parametry:
value – Řetězec z pole
valuev pravidleaccess_rulesneborate_limits.- Vrací:
Truepokud je hodnota syntakticky validní.
- _invalidate_api_cache(sender, instance)
Vymaže cache pravidel API po změně záznamu
CustomAdminSettingsskupinypas_api.
- _strip_namespace(tag)
Vrátí název XML tagu bez namespace prefixu.
- Parametry:
tag – XML tag včetně namespace (např.
{http://example.com}element).- Vrací:
Název tagu bez namespace (např.
element).
- _parse_rate(rate)
Naparsuje řetězec limitu ve formátu
počet/jednotkana počet a délku okna v sekundách.Podporované jednotky:
s(sekunda),m(minuta),h(hodina),d(den).- Parametry:
rate – Řetězec ve formátu
10/m,100/hapod.- Vrací:
Dvojice
(počet, okno_v_sekundách)neboNonepři chybě parsování.