• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

iplweb / bpp / d739ad7a-8bce-4087-b0c8-83f9ea367ad1

18 Feb 2025 12:47AM UTC coverage: 48.187% (+0.7%) from 47.492%
d739ad7a-8bce-4087-b0c8-83f9ea367ad1

push

circleci

mpasternak
Merge branch 'release/v202502.1157'

172 of 381 new or added lines in 31 files covered. (45.14%)

802 existing lines in 49 files now uncovered.

17072 of 35429 relevant lines covered (48.19%)

1.23 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

39.77
src/pbn_api/models/queue.py
1
import traceback
3✔
2

3
from django.db import models
3✔
4
from django.db.models import PositiveIntegerField
3✔
5
from django.urls import reverse
3✔
6
from sentry_sdk import capture_exception
3✔
7

8
from pbn_api.exceptions import AlreadyEnqueuedError
3✔
9
from pbn_api.tasks import task_sprobuj_wyslac_do_pbn
3✔
10

11
from django.contrib.contenttypes.fields import GenericForeignKey
3✔
12
from django.contrib.contenttypes.models import ContentType
3✔
13

14
from django.utils import timezone
3✔
15

16
from django_bpp.settings.base import AUTH_USER_MODEL
3✔
17

18

19
class PBN_Export_QueueManager(models.Manager):
3✔
20
    def filter_rekord_do_wysylki(self, rekord):
3✔
NEW
21
        return self.filter(
×
22
            content_type=ContentType.objects.get_for_model(rekord),
23
            object_id=rekord.pk,
24
            wysylke_zakonczono=None,
25
        )
26

27
    def sprobuj_utowrzyc_wpis(self, user, rekord):
3✔
NEW
28
        if self.filter_rekord_do_wysylki(rekord).exists():
×
NEW
29
            raise AlreadyEnqueuedError("ten rekord jest już w kolejce do wysyłki")
×
30

NEW
31
        return self.create(
×
32
            rekord_do_wysylki=rekord,
33
            zamowil=user,
34
        )
35

36

37
class PBN_Export_Queue(models.Model):
3✔
38
    objects = PBN_Export_QueueManager()
3✔
39

40
    object_id = PositiveIntegerField()
3✔
41
    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE)
3✔
42
    rekord_do_wysylki = GenericForeignKey()
3✔
43

44
    zamowil = models.ForeignKey(AUTH_USER_MODEL, on_delete=models.CASCADE)
3✔
45

46
    zamowiono = models.DateTimeField(auto_now_add=True, db_index=True)
3✔
47

48
    wysylke_podjeto = models.DateTimeField(null=True, blank=True)
3✔
49
    wysylke_zakonczono = models.DateTimeField(null=True, blank=True, db_index=True)
3✔
50

51
    ilosc_prob = models.PositiveSmallIntegerField(default=0)
3✔
52
    zakonczono_pomyslnie = models.BooleanField(null=True, default=None, db_index=True)
3✔
53
    komunikat = models.TextField(null=True, blank=True)
3✔
54

55
    class Meta:
3✔
56
        verbose_name = "Kolejka eksportu do PBN"
3✔
57
        verbose_name_plural = "Kolejka eksportu do PBN"
3✔
58
        ordering = ("-zamowiono", "zamowil")
3✔
59

60
    def __str__(self):
3✔
NEW
61
        return f"Zlecenie wysyłki do PBN dla {self.rekord_do_wysylki}"
×
62

63
    def check_if_record_still_exists(self):
3✔
NEW
64
        if self.rekord_do_wysylki is None:
×
NEW
65
            return False
×
NEW
66
        return True
×
67

68
    def dopisz_komunikat(self, msg):
3✔
NEW
69
        res = str(timezone.now())
×
NEW
70
        res += "\n" + "==============================================================="
×
NEW
71
        res += "\n" + msg
×
NEW
72
        if self.komunikat:
×
NEW
73
            self.komunikat = "\n" + res + "\n" + self.komunikat
×
74
        else:
NEW
75
            self.komunikat = res
×
76

77
    def error(self, msg):
3✔
NEW
78
        self.wysylke_zakonczono = timezone.now()
×
NEW
79
        self.zakonczono_pomyslnie = False
×
NEW
80
        self.dopisz_komunikat(msg)
×
NEW
81
        self.save()
×
82

83
    def send_to_pbn(self):
3✔
NEW
84
        if not self.check_if_record_still_exists():
×
NEW
85
            if self.wysylke_zakonczono is not None:
×
NEW
86
                raise Exception(
×
87
                    "System próbuje ponownie wysyłać rekordy, których wysyłać nie powinien"
88
                )
89

NEW
90
            self.wysylke_zakonczono = timezone.now()
×
NEW
91
            self.zakonczono_pomyslnie = False
×
NEW
92
            msg = "Rekord został usunięty nim wysyłka była możliwa."
×
NEW
93
            self.dopisz_komunikat(msg)
×
NEW
94
            self.save()
×
NEW
95
            return msg
×
96

NEW
97
        self.wysylke_podjeto = timezone.now()
×
NEW
98
        self.ilosc_prob += 1
×
NEW
99
        self.save()
×
100

NEW
101
        from bpp.admin.helpers import sprobuj_wgrac_do_pbn_celery
×
102

NEW
103
        try:
×
NEW
104
            sent_data, notificator = sprobuj_wgrac_do_pbn_celery(
×
105
                user=self.zamowil,
106
                obj=self.rekord_do_wysylki,
107
                force_upload=True,
108
            )
NEW
109
        except Exception as e:
×
NEW
110
            self.error(
×
111
                "Wystąpił nieobsługiwany błąd, załączam traceback:\n"
112
                + traceback.format_exc()
113
            )
NEW
114
            capture_exception(e)
×
NEW
115
            return (
×
116
                "Wystąpił nieobsługiwany błąd, załączam traceback:\n"
117
                + traceback.format_exc()
118
            )
119

NEW
120
        if sent_data is None:
×
NEW
121
            log = notificator.as_text()
×
NEW
122
            if log.find("HttpException(423, '/api/v1/publications', 'Locked')"):
×
NEW
123
                self.dopisz_komunikat("Http423 Locked, ponowie wysylke za 5 miunt...")
×
NEW
124
                self.save()
×
NEW
125
                task_sprobuj_wyslac_do_pbn.apply_async(args=[self.pk], countdown=5 * 60)
×
NEW
126
                return "Http423 Locked, ponowie wysylke za 5 miunt..."
×
127

NEW
128
            self.dopisz_komunikat(
×
129
                "Rekord nie wysłany -- załączam log z próby. Zapewne zostaną podjęte kolejne.\n"
130
                + log
131
            )
NEW
132
            self.save()
×
133

NEW
134
            return (
×
135
                "Rekord nie wysłany -- załączam log z próby. Zapewne zostaną podjęte kolejne.\n"
136
                + log
137
            )
138

NEW
139
        msg = (
×
140
            "Wysłano poprawnie. Link do wysłanego kodu JSON <a href="
141
            + reverse("admin:pbn_api_sentdata_change", args=[sent_data.pk])
142
            + ">tutaj</a>"
143
        )
NEW
144
        self.wysylke_zakonczono = timezone.now()
×
NEW
145
        self.dopisz_komunikat(msg)
×
NEW
146
        self.zakonczono_pomyslnie = True
×
NEW
147
        self.save()
×
NEW
148
        return msg
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc