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

Stojanovic/fe 237 support moving record from one community to another UI #98

Open
wants to merge 17 commits into
base: main
Choose a base branch
from
Open
105 changes: 105 additions & 0 deletions oarepo_communities/errors.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,118 @@
#
# Copyright (C) 2024 CESNET z.s.p.o.
#
# oarepo-requests is free software; you can redistribute it and/or
# modify it under the terms of the MIT License; see LICENSE file for more
# details.
#
"""Configuration of the draft record requests resource."""

from __future__ import annotations

from flask_babelex import lazy_gettext as _
from marshmallow import ValidationError

import json
from typing import Any, Dict, Optional, Union

from flask import g
from flask_resources import (
HTTPJSONException,
create_error_handler,
)
from flask_resources.serializers.json import JSONEncoder

from oarepo_runtime.i18n import lazy_gettext as _


class CustomHTTPJSONException(HTTPJSONException):
"""Custom HTTP Exception delivering JSON error responses with an error_type."""

def __init__(
self,
code: Optional[int] = None,
errors: Optional[Union[dict[str, any], list]] = None,
error_type: Optional[str] = None,
**kwargs: Any,
) -> None:
"""Initialize CustomHTTPJSONException."""
super().__init__(code=code, errors=errors, **kwargs)
self.error_type = error_type # Save the error_type passed in the constructor

def get_body(self, environ: any = None, scope: any = None) -> str:
"""Get the request body."""
body = {"status": self.code, "message": self.get_description(environ)}

errors = self.get_errors()
if errors:
body["errors"] = errors

# Add error_type to the response body
if self.error_type:
body["error_type"] = self.error_type

# TODO: Revisit how to integrate error monitoring services. See issue #56
# Temporarily kept for expediency and backward-compatibility
if self.code and (self.code >= 500) and hasattr(g, "sentry_event_id"):
body["error_id"] = str(g.sentry_event_id)

return json.dumps(body, cls=JSONEncoder)


def community_already_included_entry():
"""Entry point for CommunityAlreadyIncludedException handler."""
return (
CommunityAlreadyIncludedException,
create_error_handler(
lambda e: CustomHTTPJSONException(
code=400,
description="The community is already included in the record.",
errors=[
{
"field": "payload.community",
"messages": [
"Record is already in this community. Please choose another."
],
}
],
error_type="cf_validation_error",
)
),
)


def target_community_not_provided_entry():
"""Entry point for TargetCommunityNotProvidedException handler."""
return (
TargetCommunityNotProvidedException,
create_error_handler(
lambda e: CustomHTTPJSONException(
code=400,
description="Target community not provided in the migration request.",
errors=[
{
"field": "payload.community",
"messages": ["Please select the community"],
}
],
error_type="cf_validation_error",
)
),
)


class CommunityAlreadyIncludedException(Exception):
"""The record is already in the community."""

description = "The record is already included in this community."


class TargetCommunityNotProvidedException(Exception):
"""Target community not provided in the migration request"""

description = "Target community not provided in the migration request."


class CommunityNotIncludedException(Exception):
"""The record is already in the community."""

Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"By Title":"Podle názvu","Best match":"Nejlepší shoda","Newest":"Nejnovější","Oldest":"Nejstarší","Records":"Nahráno","Communities":"Komunity","Requests":"Žádosti","profile":"profil","Search in my communities...":"Hledat v mých komunitách...","Restricted":"Omezený","Filter results":"Filtrovat výsledky","Edit":"Upravit","Uploaded on {{uploadDate}}":"Nahráno dne {{uploadDate}}","No creation date found.":"Nebylo nalezeno žádné datum vytvoření","No description":"Bez popisu","No title":"Bez názvu","Create new...":"Vytvořit nový...","Search in my uploads...":"Hledat v mých záznamech...","Expires at: {{- expiringDate}}":"Vyprší v: {{- expiringDate}}","Opened {{relativeTime}} by":"Otevřeno {{relativeTime}} uživatelem","Open":"Otevřeno","Closed":"Zavřeno","New request":"Nová žádost","My":"Moje","Others":"Ostatní","Search in my requests...":"Hledat v mých žádostech...","Opened by":"Otevřeno {{relativeTime}} uživatelem","Create new draft":"Vytvořit nový koncept","Edit record":"Úprava záznamu","Delete record":"Smazání záznamu","Publish record":"Vypublikování záznamů","Opened by {{creatorName}} on {{created}}.":"Otevřeno uživatelem {{creatorName}} na {{created}}.","Recepient: {{receiver}}.":"Příjemce: {{receiver}}","Dashboard":"Nástěnka","User Dashboard":"Nástěnka","Community":"Komunita","Search inside the community...":"Hledat v komunitě...","Search communities":"Hledat komunity","Search":"Hledat","New community":"Nová komunita","My communities":"Moje komunity","See all":"Zobrazit vše","New communities":"Nové komunity","New upload":"Nová nahrání","Profile":"Profil","Pages":"Stránky","Members":"Členové","Settings":"Nastavení","Curation policy":"Kurátorství","About":"O komunitě","Community records":"Záznamy komunity","Invitations sent successfully.":"Pozvánky byly úspěšně odeslány.","The invitations could not be sent. Please try again later.":"Pozvánky se nepodařilo odeslat. Zkuste to znovu později.","Invite...":"Pozvat...","Invite users to the {{communityTitle}} community":"Pozvěte uživatele do komunity {{communityTitle}}","Invalid emails":"Neplatné e-maily","Emails shall be provided on separate lines. \n Acceptable formats are [email protected] or Doe John <[email protected]>. \n Note that invitations shall be sent only to the valid email addresses.":"E-maily musí být uvedeny na samostatných řádcích. \n Přijatelné formáty jsou [email protected] nebo Doe John <[email protected]>. \n Vezměte na vědomí, že pozvánky budou odeslány pouze na platné e-mailové adresy.","Role":"Role","Message":"Zpráva","Cancel":"Zrušit","Invite":"Pozvat","Community selection":"Výběr komunity","Please select community in which your work will be published:":"Vyberte prosím komunitu pro publikování vaší práce:","If you are certain that you wish to proceed with the generic community, please click on it below.":"Pokud jste si jisti, že chcete pokračovat s generickou komunitou, klikněte na něj níže.","All records must belong to a community.":"Všechny záznamy musí patřit komunitě.","Go back":"Zpátky","genericCommunityMessage":"Nejste členem žádné komunity. Pokud se rozhodnete pokračovat, vaše práce bude publikována v \"generické\" komunitě. Důrazně doporučujeme, abyste se připojili k nějaké komunitě, abyste zvýšili viditelnost své práce a mohli snadněji spolupracovat s ostatními. Na dostupné komunity se můžete podívat <2>na naší stránce komunit.</2> Pro více podrobností o tom, jak se připojit k nějaké komunitě, se prosím podívejte na instrukce <6>jak se připojit ke komunitě.</6>","Your record will be published in the following community:":"Váš záznam bude zveřejněn v následující komunitě:","Your work will be saved in the following community. Please note that after saving it will not be possible to transfer it to another community. Click<1>here</1>to change the selection.":"Vaše práce bude uložena v následující komunitě. Vezměte prosím na vědomí, že po uložení nebude možné převést ji do jiné komunity. Klikněte<1>zde</1>pro změnu výběru.","Workflows":"Workflows","Default workflow":"Výchozí workflow","Default workflow for the community if workflow is not specified when depositing a record.":"Výchozí workflow komunity pokud workflow není specifikován během nahrání záznamu.","Allowed workflows":"Povolené workflows","Workflows allowed for the community.":"Povolené workflows komunity","There is already an open inclusion request for this community.":"Otevřená žádost pro přidání do komunity už existuje","%(role)s of %(community)s":"Role \"%(role)s\" komunity \"%(community)s\"","Inititiate Community migration":"Zahájit migraci mezi komunitami","confirm Community migration":"Potvrdit migraci mezi komunitami","Remove secondary community":"Odebrat sekundární komunitu","Secondary community submission":"Přijmout do sekundární komunity"}
{"By Title":"Podle názvu","Best match":"Nejlepší shoda","Newest":"Nejnovější","Oldest":"Nejstarší","Records":"Nahráno","Communities":"Komunity","Requests":"Žádosti","profile":"profil","Search in my communities...":"Hledat v mých komunitách...","Restricted":"Omezený","Filter results":"Filtrovat výsledky","Edit":"Upravit","Uploaded on {{uploadDate}}":"Nahráno dne {{uploadDate}}","No creation date found.":"Nebylo nalezeno žádné datum vytvoření","No description":"Bez popisu","No title":"Bez názvu","Create new...":"Vytvořit nový...","Search in my uploads...":"Hledat v mých záznamech...","Expires at: {{- expiringDate}}":"Vyprší v: {{- expiringDate}}","Opened {{relativeTime}} by":"Otevřeno {{relativeTime}} uživatelem","Open":"Otevřeno","Closed":"Zavřeno","New request":"Nová žádost","My":"Moje","Others":"Ostatní","Search in my requests...":"Hledat v mých žádostech...","Opened by":"Otevřeno {{relativeTime}} uživatelem","Create new draft":"Vytvořit nový koncept","Edit record":"Úprava záznamu","Delete record":"Smazání záznamu","Publish record":"Vypublikování záznamů","Opened by {{creatorName}} on {{created}}.":"Otevřeno uživatelem {{creatorName}} na {{created}}.","Recepient: {{receiver}}.":"Příjemce: {{receiver}}","Dashboard":"Nástěnka","User Dashboard":"Nástěnka","Community":"Komunita","Search inside the community...":"Hledat v komunitě...","Search communities":"Hledat komunity","Search":"Hledat","New community":"Nová komunita","My communities":"Moje komunity","See all":"Zobrazit vše","New communities":"Nové komunity","New upload":"Nová nahrání","Profile":"Profil","Pages":"Stránky","Members":"Členové","Settings":"Nastavení","Curation policy":"Kurátorství","About":"O komunitě","Community records":"Záznamy komunity","Invitations sent successfully.":"Pozvánky byly úspěšně odeslány.","The invitations could not be sent. Please try again later.":"Pozvánky se nepodařilo odeslat. Zkuste to znovu později.","Invite...":"Pozvat...","Invite users to the {{communityTitle}} community":"Pozvěte uživatele do komunity {{communityTitle}}","Invalid emails":"Neplatné e-maily","Emails shall be provided on separate lines. \n Acceptable formats are [email protected] or Doe John <[email protected]>. \n Note that invitations shall be sent only to the valid email addresses.":"E-maily musí být uvedeny na samostatných řádcích. \n Přijatelné formáty jsou [email protected] nebo Doe John <[email protected]>. \n Vezměte na vědomí, že pozvánky budou odeslány pouze na platné e-mailové adresy.","Role":"Role","Message":"Zpráva","Cancel":"Zrušit","Invite":"Pozvat","Community selection":"Výběr komunity","Please select community in which your work will be published:":"Vyberte prosím komunitu pro publikování vaší práce:","If you are certain that you wish to proceed with the generic community, please click on it below.":"Pokud jste si jisti, že chcete pokračovat s generickou komunitou, klikněte na něj níže.","All records must belong to a community.":"Všechny záznamy musí patřit komunitě.","Go back":"Zpátky","genericCommunityMessage":"Nejste členem žádné komunity. Pokud se rozhodnete pokračovat, vaše práce bude publikována v \"generické\" komunitě. Důrazně doporučujeme, abyste se připojili k nějaké komunitě, abyste zvýšili viditelnost své práce a mohli snadněji spolupracovat s ostatními. Na dostupné komunity se můžete podívat <2>na naší stránce komunit.</2> Pro více podrobností o tom, jak se připojit k nějaké komunitě, se prosím podívejte na instrukce <6>jak se připojit ke komunitě.</6>","Your record will be published in the following community:":"Váš záznam bude zveřejněn v následující komunitě:","Your work will be saved in the following community. Please note that after saving it will not be possible to transfer it to another community. Click<1>here</1>to change the selection.":"Vaše práce bude uložena v následující komunitě. Vezměte prosím na vědomí, že po uložení nebude možné převést ji do jiné komunity. Klikněte<1>zde</1>pro změnu výběru.","Workflows":"Workflows","Default workflow":"Výchozí workflow","Default workflow for the community if workflow is not specified when depositing a record.":"Výchozí workflow komunity pokud workflow není specifikován během nahrání záznamu.","Allowed workflows":"Povolené workflows","Workflows allowed for the community.":"Povolené workflows komunity","There is already an open inclusion request for this community.":"Otevřená žádost pro přidání do komunity už existuje","%(role)s of %(community)s":"Role \"%(role)s\" komunity \"%(community)s\"","Inititiate Community migration":"Zahájit migraci mezi komunitami","confirm Community migration":"Potvrdit migraci mezi komunitami","Remove secondary community":"Odebrat sekundární komunitu","Secondary community submission":"Přijmout do sekundární komunity","Request initiation of Community migration.":"Požádejte o zahájení migrace komunity.","Inititiate record community migration":"Zahajte migraci záznamu do komunity","Request community migration":"Požádejte o migraci komunity","Record community migration initiated":"Migrace záznamu do komunity byla zahájena","Request record community migration":"Požádejte o migraci záznamu do komunity","Click to immediately start record migration. After submitting the request will immediatelly be forwarded to responsible person(s) in the target community. ":"Klikněte pro okamžité zahájení migrace záznamu. Po odeslání bude žádost ihned předána odpovědným osobám v cílové komunitě.","After you submit record community migration request, it will first have to be approved by responsible person(s) of the current community. Then it will have to be accepted by responsible persons(s) of the target community. You will be notified about the decision by email.":"Po odeslání žádosti o migraci záznamu do komunity ji nejprve musí schválit odpovědné osoby aktuální komunity. Poté ji musí přijmout odpovědné osoby cílové komunity. O rozhodnutí budete informováni e-mailem.","Record community migration request has been submitted. You will be notified about the decision by email.":"Žádost o migraci záznamu do komunity byla odeslána. O rozhodnutí budete informováni e-mailem.","User has requested record community migration. You can now accept or decline the request.":"Uživatel požádal o migraci záznamu do komunity. Nyní můžete žádost přijmout nebo odmítnout.","Record community migration request has been submitted.":"Žádost o migraci záznamu do komunity byla odeslána.","Submit to initiate record community migration. ":"Odešlete žádost o zahájení migrace záznamu do komunity.","Request not yet submitted.":"Žádost ještě nebyla odeslána.","Target community:":"Cílová komunita:","Confirm record community migration":"Potvrďte migraci záznamu do komunity","Record community migration confirmation pending":"Čeká se na potvrzení migrace záznamu do komunity","Confirm the migration of the record to the new primary community. This request must be accepted by responsible person(s) of the new community.":"Potvrďte migraci záznamu do nové primární komunity. Tuto žádost musí přijmout odpovědné osoby nové komunity.","The confirmation request has been submitted to the target community. You will be notified about their decision by email.":"Potvrzovací žádost byla odeslána cílové komunitě. O jejich rozhodnutí budete informováni e-mailem.","A request to confirm record community migration has been received. You can now accept or decline the request.":"Byla přijata žádost o potvrzení migrace záznamu do komunity. Nyní můžete žádost přijmout nebo odmítnout.","Record community migration confirmation request is pending.":"Žádost o potvrzení migrace záznamu do komunity čeká na vyřízení.","Submit to confirm record community migration.":"Odešlete žádost o potvrzení migrace záznamu do komunity.","Secondary community:":"Sekundární komunita:","Initiate record secondary community submission":"Zahajte přidání záznamu do sekundární komunity","Confirm record secondary community submission":"Potvrďte přidání záznamu do sekundární komunity","Request record secondary community submission":"Požádejte o přidání záznamu do sekundární komunity","After submitting record secondary community submission request, it will first have to be approved by responsible person(s) of the target community. You will be notified about the decision by email.":"Po odeslání žádosti o přidání záznamu do sekundární komunity ji musí nejprve schválit odpovědné osoby cílové komunity. O rozhodnutí budete informováni e-mailem.","Record secondary community submission request has been submitted. You will be notified about the decision by email.":"Žádost o přidání záznamu do sekundární komunity byla odeslána. O rozhodnutí budete informováni e-mailem.","User has requested to add secondary community to a record. You can now accept or decline the request.":"Uživatel požádal o přidání záznamu do sekundární komunity. Nyní můžete žádost přijmout nebo odmítnout.","Record secondary community submission request has been submitted.":"Žádost o přidání záznamu do sekundární komunity byla odeslána.","Submit to initiate record secondary community submission.":"Odešlete žádost o zahájení přidání záznamu do sekundární komunity.","Awards":"Ocenění","Visit external website":"Navštivte externí webovou stránku","Opens in new tab":"Otevře se v nové záložce","Target community":"Cílová komunita"}
Loading
Loading