Skip to content
Snippets Groups Projects
Commit 9d9a7cec authored by Alexa Valentová's avatar Alexa Valentová
Browse files

update API

parent fece9787
No related branches found
No related tags found
No related merge requests found
Pipeline #19787 passed
...@@ -46,7 +46,7 @@ run: venv ...@@ -46,7 +46,7 @@ run: venv
${VENV}/bin/python manage.py runserver ${PORT} --settings=${SETTINGS} ${VENV}/bin/python manage.py runserver ${PORT} --settings=${SETTINGS}
shell: venv shell: venv
${VENV}/bin/python manage.py shell_plus --settings=${SETTINGS} ${VENV}/bin/python manage.py shell --settings=${SETTINGS}
sync: sync:
${VENV}/bin/python manage.py import_old_contracts https://github.com/pirati-web/smlouvy.pirati.cz.git gh-pages --settings=${SETTINGS} --delete -v 3 ${VENV}/bin/python manage.py import_old_contracts https://github.com/pirati-web/smlouvy.pirati.cz.git gh-pages --settings=${SETTINGS} --delete -v 3
......
...@@ -649,6 +649,7 @@ class ContractAdmin( ...@@ -649,6 +649,7 @@ class ContractAdmin(
"Naše smluvní strana", "contractee_signatures__contractee" "Naše smluvní strana", "contractee_signatures__contractee"
), ),
AutocompleteFilterFactory("Jiná smluvní strana", "signee_signatures__signee"), AutocompleteFilterFactory("Jiná smluvní strana", "signee_signatures__signee"),
AutocompleteFilterFactory("Primární smlouva", "primary_contract"),
"status", "status",
"is_valid", "is_valid",
"is_public", "is_public",
......
...@@ -436,7 +436,9 @@ def view_signees(request): ...@@ -436,7 +436,9 @@ def view_signees(request):
# Basic contract view API # Basic contract view API
def view_contract_json(request, id: int):
def get_contract_dict(request, id: int, error_if_missing_perm: bool = True):
filter = models.Q(status=Contract.StatusTypes.APPROVED) filter = models.Q(status=Contract.StatusTypes.APPROVED)
if not request.user.has_perm("contracts.view_confidential"): if not request.user.has_perm("contracts.view_confidential"):
...@@ -449,40 +451,80 @@ def view_contract_json(request, id: int): ...@@ -449,40 +451,80 @@ def view_contract_json(request, id: int):
) )
) )
contract = get_object_or_404( try:
(get_objects_for_user(request.user, "contracts.view_contract").filter(filter)), contract = get_object_or_404(
id=id, (
) get_objects_for_user(request.user, "contracts.view_contract").filter(
filter
)
),
id=id,
)
except Exception as e:
if error_if_missing_perm:
# Re-raise
raise e
else:
return None
return JsonResponse( subcontracts = []
{
"id": contract.id, for subcontract in contract.subcontracts.order_by("-valid_start_date").all():
"created_by": { subcontract_dict = get_contract_dict(request, subcontract.id, False)
"id": contract.created_by_id,
"username": contract.created_by.username, if subcontract_dict is None:
continue
subcontracts.append(subcontract_dict)
return {
"id": contract.id,
"created_by": {
"id": contract.created_by_id,
"username": contract.created_by.preferred_username,
},
"created_on": contract.created_on,
"updated_on": contract.updated_on,
"status": contract.status,
"name": contract.name,
"id_number": contract.id_number,
"types": [{"id": type.id, "name": type.name} for type in contract.types.all()],
"summary": contract.summary,
"validity": {
"start_date": contract.valid_start_date,
"end_date": contract.valid_end_date,
},
"is_valid": contract.is_valid,
"is_public": contract.is_public,
"publishing_rejection_comment": contract.publishing_rejection_comment,
"cost": {
"amount": contract.cost_amount,
"unit": {
"enum": contract.cost_unit,
"display": contract.get_cost_unit_display(),
"other": contract.cost_unit_other,
}, },
"created_on": contract.created_on, },
"updated_on": contract.updated_on, "paper_form": {
"status": contract.status, "state": contract.paper_form_state,
"name": contract.name, "person_responsible": contract.paper_form_person_responsible,
"id_number": contract.id_number, },
"types": [ "tender_url": contract.tender_url,
{"id": type.id, "name": type.name} for type in contract.types.all() "issues": [
], {"id": issue.id, "name": issue.name} for issue in contract.issues.all()
"summary": contract.summary, ],
"valid_start_date": contract.valid_start_date, "intents": [
"valid_end_date": contract.valid_end_date, {"id": intent.id, "name": intent.name, "url": intent.url}
"is_valid": contract.is_valid, for intent in contract.intents.all()
"is_public": contract.is_public, ],
"publishing_rejection_comment": contract.publishing_rejection_comment, "subcontracts": subcontracts,
"paper_form_state": contract.paper_form_state, }
"paper_form_person_responsible": contract.paper_form_person_responsible,
"tender_url": contract.tender_url,
"issues": [ def view_contract_json(request, id: int):
{"id": issue.id, "name": issue.name} for issue in contract.issues.all() contract_dict = get_contract_dict(request, id)
],
} return JsonResponse(contract_dict)
)
# ARES CORS proxy # ARES CORS proxy
......
...@@ -6,7 +6,7 @@ import sys ...@@ -6,7 +6,7 @@ import sys
def main(): def main():
"""Run administrative tasks.""" """Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "registry.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "registry.settings.dev")
try: try:
from django.core.management import execute_from_command_line from django.core.management import execute_from_command_line
except ImportError as exc: except ImportError as exc:
......
...@@ -75,9 +75,13 @@ class RegistryOIDCAuthenticationBackend(PiratesOIDCAuthenticationBackend): ...@@ -75,9 +75,13 @@ class RegistryOIDCAuthenticationBackend(PiratesOIDCAuthenticationBackend):
try: try:
result = client.execute(query) result = client.execute(query)
except TransportQueryError: except (TransportQueryError, ConnectionError, Exception) as e:
# rv_gid was not found print(e)
raise HTTPExceptions.BAD_REQUEST
# Return no groups if the Chobotnice connection fails,
# so users can still at least log in.
return []
groups = [] groups = []
......
...@@ -162,7 +162,9 @@ OIDC_OP_TOKEN_ENDPOINT = OIDC_RP_REALM_URL + "protocol/openid-connect/token" ...@@ -162,7 +162,9 @@ OIDC_OP_TOKEN_ENDPOINT = OIDC_RP_REALM_URL + "protocol/openid-connect/token"
OIDC_OP_USER_ENDPOINT = OIDC_RP_REALM_URL + "protocol/openid-connect/userinfo" OIDC_OP_USER_ENDPOINT = OIDC_RP_REALM_URL + "protocol/openid-connect/userinfo"
# Chobotnice - group source # Chobotnice - group source
CHOBOTNICE_API_URL = env.str("CHOBOTNICE_API_URL") CHOBOTNICE_API_URL = env.str(
"CHOBOTNICE_API_URL", "https://chobotnice.pirati.cz/graphql/"
)
## Internationalization ## Internationalization
......
...@@ -11,6 +11,6 @@ import os ...@@ -11,6 +11,6 @@ import os
from django.core.wsgi import get_wsgi_application from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "registry.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "registry.settings.dev")
application = get_wsgi_application() application = get_wsgi_application()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment