werkzeug

Форк
0
50 строк · 1.3 Кб
1
from datetime import datetime
2

3
from couchdb.mapping import BooleanField
4
from couchdb.mapping import DateTimeField
5
from couchdb.mapping import Document
6
from couchdb.mapping import TextField
7

8
from .utils import get_random_uid
9
from .utils import url_for
10

11

12
class URL(Document):
13
    target = TextField()
14
    public = BooleanField()
15
    added = DateTimeField(default=datetime.utcnow())
16
    shorty_id = TextField(default=None)
17
    db = None
18

19
    @classmethod
20
    def load(cls, id):
21
        return super().load(URL.db, id)
22

23
    @classmethod
24
    def query(cls, code):
25
        return URL.db.query(code)
26

27
    def store(self):
28
        if getattr(self._data, "id", None) is None:
29
            new_id = self.shorty_id if self.shorty_id else None
30
            while 1:
31
                id = new_id if new_id else get_random_uid()
32
                try:
33
                    docid = URL.db.resource.put(content=self._data, path=f"/{id}/")[
34
                        "id"
35
                    ]
36
                except Exception:
37
                    continue
38
                if docid:
39
                    break
40
            self._data = URL.db.get(docid)
41
        else:
42
            super().store(URL.db)
43
        return self
44

45
    @property
46
    def short_url(self):
47
        return url_for("link", uid=self.id, _external=True)
48

49
    def __repr__(self):
50
        return f"<URL {self.id!r}>"
51

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.