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
${VENV}/bin/python manage.py runserver ${PORT} --settings=${SETTINGS}
shell: venv
${VENV}/bin/python manage.py shell_plus --settings=${SETTINGS}
${VENV}/bin/python manage.py shell --settings=${SETTINGS}
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
......
......@@ -649,6 +649,7 @@ class ContractAdmin(
"Naše smluvní strana", "contractee_signatures__contractee"
),
AutocompleteFilterFactory("Jiná smluvní strana", "signee_signatures__signee"),
AutocompleteFilterFactory("Primární smlouva", "primary_contract"),
"status",
"is_valid",
"is_public",
......
......@@ -436,7 +436,9 @@ def view_signees(request):
# 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)
if not request.user.has_perm("contracts.view_confidential"):
......@@ -449,40 +451,80 @@ def view_contract_json(request, id: int):
)
)
try:
contract = get_object_or_404(
(get_objects_for_user(request.user, "contracts.view_contract").filter(filter)),
(
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 = []
for subcontract in contract.subcontracts.order_by("-valid_start_date").all():
subcontract_dict = get_contract_dict(request, subcontract.id, False)
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.username,
"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()
],
"types": [{"id": type.id, "name": type.name} for type in contract.types.all()],
"summary": contract.summary,
"valid_start_date": contract.valid_start_date,
"valid_end_date": contract.valid_end_date,
"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,
"paper_form_state": contract.paper_form_state,
"paper_form_person_responsible": contract.paper_form_person_responsible,
"cost": {
"amount": contract.cost_amount,
"unit": {
"enum": contract.cost_unit,
"display": contract.get_cost_unit_display(),
"other": contract.cost_unit_other,
},
},
"paper_form": {
"state": contract.paper_form_state,
"person_responsible": contract.paper_form_person_responsible,
},
"tender_url": contract.tender_url,
"issues": [
{"id": issue.id, "name": issue.name} for issue in contract.issues.all()
],
"intents": [
{"id": intent.id, "name": intent.name, "url": intent.url}
for intent in contract.intents.all()
],
"subcontracts": subcontracts,
}
)
def view_contract_json(request, id: int):
contract_dict = get_contract_dict(request, id)
return JsonResponse(contract_dict)
# ARES CORS proxy
......
......@@ -6,7 +6,7 @@ import sys
def main():
"""Run administrative tasks."""
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "registry.settings")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "registry.settings.dev")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
......
......@@ -75,9 +75,13 @@ class RegistryOIDCAuthenticationBackend(PiratesOIDCAuthenticationBackend):
try:
result = client.execute(query)
except TransportQueryError:
# rv_gid was not found
raise HTTPExceptions.BAD_REQUEST
except (TransportQueryError, ConnectionError, Exception) as e:
print(e)
# Return no groups if the Chobotnice connection fails,
# so users can still at least log in.
return []
groups = []
......
......@@ -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"
# 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
......
......@@ -11,6 +11,6 @@ import os
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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment