mod: отключены внешние типографы

This commit is contained in:
2026-02-18 15:07:35 +03:00
parent b94e31dc59
commit 33fa2d04a9
2 changed files with 110 additions and 62 deletions

View File

@@ -1,8 +1,8 @@
# Generated by Django 3.1.2 on 2020-10-05 06:52
# Generated by Django 6.0.2 on 2026-02-17 22:08
from django.db import migrations, models
import django.db.models.deletion
import taggit.managers
from django.db import migrations, models
class Migration(migrations.Migration):
@@ -10,21 +10,21 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
('taggit', '0003_taggeditem_add_unique_index'),
('taggit', '0006_rename_taggeditem_content_type_object_id_taggit_tagg_content_8fc721_idx'),
]
operations = [
migrations.CreateModel(
name='TbAuthor',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('szAuthor', models.CharField(db_index=True, default='', help_text='Автор и, если необходимо, краткая справка', max_length=128, unique=True, verbose_name='Автор')),
('szAuthorHTML', models.TextField(default='', help_text='Автор и, если необходимо, краткая справка<br />Свертано в HTML по правилам типографики <small>(рекламные URL вставляются тут)</small>', null=True, verbose_name='Автор HTML')),
('bIsChecked', models.BooleanField(db_index=True, default=True, help_text='Есть доступ для сканирования.', verbose_name='Проверен')),
('iViewCounter', models.PositiveIntegerField(default=0, help_text='Число просмотров картинки.', verbose_name='Просмотры')),
('szAuthorHTML', models.TextField(blank=True, default='', help_text='Автор и, если необходимо, краткая справка<br />Свертано в HTML по правилам типографики <small>(рекламные URL вставляются тут)</small>', verbose_name='Автор HTML')),
('bTypograph', models.BooleanField(db_index=True, default=True, help_text='Применять типографику к этому автору?', verbose_name='Типографить')),
('bIsChecked', models.BooleanField(db_index=True, default=True, help_text='Автор проверен.', verbose_name='Проверен')),
('iViewCounter', models.PositiveIntegerField(default=0, help_text='Число просмотров Автора.', verbose_name='')),
('dtCreated', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Дата создания')),
('dtEdited', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Дата последнего редактирования')),
('tags', taggit.managers.TaggableManager(help_text='Теги через запятую… Регистр не чувствителен… <b>Теги нужны для подстановки картинок и навигации<b>', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Теги')),
('dtEdited', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Дата редактирования')),
],
options={
'verbose_name': 'АВТОР',
@@ -35,10 +35,10 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='TbOrigin',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('szOrigin', models.CharField(db_index=True, default='', help_text='Ссылка или указание источника: книга, URL, просто что-то…', max_length=256, unique=True, verbose_name='Источник')),
('dtCreated', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Дата создания')),
('dtEdited', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Дата последнего редактирования')),
('dtEdited', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Дата редактирования')),
],
options={
'verbose_name': 'ИСТОЧНИК',
@@ -46,17 +46,39 @@ class Migration(migrations.Migration):
'ordering': ['id'],
},
),
migrations.CreateModel(
name='RuTaggedItem',
fields=[
],
options={
'proxy': True,
'indexes': [],
'constraints': [],
},
bases=('taggit.taggeditem',),
),
migrations.CreateModel(
name='RuTag',
fields=[
],
options={
'proxy': True,
'indexes': [],
'constraints': [],
},
bases=('taggit.tag',),
),
migrations.CreateModel(
name='TbImages',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('imFile', models.ImageField(db_index=True, default='', help_text='Файл с картинкой (gif, jpeg, png, bmp).', max_length=136, unique=True, upload_to='img2', verbose_name='Картинка')),
('szCaption', models.CharField(db_index=True, default='', help_text='Название, подпись, описание что изображено…', max_length=128, unique=True, verbose_name='Название')),
('bIsChecked', models.BooleanField(db_index=True, default=True, help_text='Есть доступ для сканирования.', verbose_name='Проверен')),
('iViewCounter', models.PositiveIntegerField(default=0, help_text='Число просмотров картинки.', verbose_name='Просмотры')),
('bIsChecked', models.BooleanField(db_index=True, default=True, help_text='Картинку проверили.', verbose_name='Проверен')),
('iViewCounter', models.PositiveIntegerField(default=0, help_text='Число просмотров картинки.', verbose_name='')),
('dtCreated', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Дата создания')),
('dtEdited', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Дата последнего редактирования')),
('tags', taggit.managers.TaggableManager(help_text='Теги через запятую… Регистр не чувствителен… <b>Теги нужны для подстановки картинок и навигации<b>', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Теги')),
('dtEdited', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Дата редактирования')),
('tags', taggit.managers.TaggableManager(blank=True, help_text='Теги через запятую… Регистр не чувствителен… <b>Теги нужны для подстановки картинок и навигации<b>', through='web.RuTaggedItem', to='taggit.Tag', verbose_name='Теги')),
],
options={
'verbose_name': 'КАРТИНКА',
@@ -67,19 +89,20 @@ class Migration(migrations.Migration):
migrations.CreateModel(
name='TbDictumAndQuotes',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('szIntro', models.CharField(default=None, help_text='Не обязательно. Вступление перед цитатой.', max_length=256, null=True, verbose_name='Вступление')),
('szIntroHTML', models.TextField(default='', help_text='Автор и, если необходимо, краткая справка<br />Вступление перед цитатой, в HTML по правилам типографики</small>', verbose_name='Вступление HTML')),
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('szIntro', models.CharField(blank=True, default=None, help_text='Не обязательно. Вступление перед цитатой.', max_length=256, verbose_name='Вступление')),
('szIntroHTML', models.TextField(blank=True, default='', help_text='Автор и, если необходимо, краткая справка<br />Вступление перед цитатой, в HTML по правилам типографики</small>', verbose_name='Вступление HTML')),
('szContent', models.TextField(default='', help_text='Не обязательно. Вступление перед цитатой.', max_length=256, verbose_name='Высказывание')),
('szContentHTML', models.TextField(default='', help_text='<b>Высказывание Крылатое</b> -- крылатое, пародоксальное и все такое', verbose_name='Высказывание HTML')),
('imFileOG', models.ImageField(default='', help_text='Картинка для социальной сети <b>(будет создана автоматически)</b>.<br /><small>Файл с картинкой (png).<small>', max_length=136, upload_to='img2og', verbose_name='OG-image</b>')),
('iViewCounter', models.PositiveIntegerField(db_index=True, default=0, help_text='Число сканирований хоста.', verbose_name='Просмотры')),
('szContentHTML', models.TextField(blank=True, default='', help_text='Содержание цитаты, афоризма, высказывания…<br />Свертано в HTML по правилам типографики', verbose_name='Изречение HTML')),
('bTypograph', models.BooleanField(db_index=True, default=True, help_text='Применять типографику?', verbose_name='Типографить')),
('imFileOG', models.ImageField(blank=True, default='', help_text='Картинка для социальной сети <b>(будет создана автоматически)</b>.<br /><small>Файл с картинкой (png).<small>', max_length=136, upload_to='img2og', verbose_name='OG-image')),
('iViewCounter', models.PositiveIntegerField(db_index=True, default=0, help_text='Число просмотров высказывания.', verbose_name='')),
('dtCreated', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='Дата создания')),
('dtEdited', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Дата последнего редактирования')),
('kAuthor', models.ForeignKey(default=None, help_text='Автор изречения или цитаты <b>(не обязательно, но желательно)</b>', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='web.tbauthor', verbose_name='Автор')),
('kImages', models.ForeignKey(default=None, help_text='Ссылка на картинку, в табличке картинок <b>(не обязательно)</b><br /><small>если нужна именно данная картинка, а не выбранная автоматически</small>', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='web.tbimages', verbose_name='Картинка')),
('kOrigin', models.ForeignKey(default=None, help_text='Откуда взята циатата, высказывание, изречение <b>(не обязательно, но желательно)</b>', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='web.tborigin', verbose_name='Источник')),
('tags', taggit.managers.TaggableManager(help_text='Теги через запятую… Регистр не чувствителен… <b>Теги нужны для подстановки картинок и навигации<b>', through='taggit.TaggedItem', to='taggit.Tag', verbose_name='Теги')),
('dtEdited', models.DateTimeField(auto_now=True, db_index=True, verbose_name='Дата редактирования')),
('kAuthor', models.ForeignKey(blank=True, default=None, help_text='Автор изречения или цитаты <b>(не обязательно, но желательно)</b>', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='web.tbauthor', verbose_name='Автор')),
('kImages', models.ForeignKey(blank=True, default=None, help_text='Ссылка на картинку, в табличке картинок <b>(не обязательно)</b><br /><small>если нужна именно данная картинка, а не выбранная автоматически</small>', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='web.tbimages', verbose_name='Картинка')),
('kOrigin', models.ForeignKey(blank=True, default=None, help_text='Откуда взята циатата, высказывание, изречение <b>(не обязательно, но желательно)</b>', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='web.tborigin', verbose_name='Источник')),
('tags', taggit.managers.TaggableManager(blank=True, help_text='Теги через запятую… Регистр не чувствителен… <b>Теги нужны для подстановки картинок и навигации<b>', through='web.RuTaggedItem', to='taggit.Tag', verbose_name='Теги')),
],
options={
'verbose_name': 'ВЫСКАЗЫВАНИЕ',
@@ -87,4 +110,9 @@ class Migration(migrations.Migration):
'ordering': ['id'],
},
),
migrations.AddField(
model_name='tbauthor',
name='tags',
field=taggit.managers.TaggableManager(blank=True, help_text='Теги через запятую… Регистр не чувствителен… <b>Теги нужны для подстановки картинок и навигации<b>', through='web.RuTaggedItem', to='taggit.Tag', verbose_name='Теги'),
),
]

View File

@@ -2,9 +2,13 @@
from django.db import models
from taggit.managers import TaggableManager
from taggit.models import Tag, TaggedItem
from typus import en_typus, ru_typus
try:
from typus import en_typus, ru_typus
except ImportError:
def en_typus(text): return text
def ru_typus(text): return text
from pathlib import Path
import urllib3
# import urllib3
import json
import pytils
@@ -190,6 +194,12 @@ class TbAuthor(models.Model):
help_text=u"Автор и, если необходимо, краткая справка<br />"
u"Свертано в HTML по правилам типографики <small>(рекламные URL вставляются тут)</small>"
)
bTypograph = models.BooleanField(
default=True,
db_index=True,
verbose_name=u"Типографить",
help_text=u"Применять типографику к этому автору?"
)
bIsChecked = models.BooleanField(
default=True,
db_index=True,
@@ -295,13 +305,21 @@ class TbDictumAndQuotes(models.Model):
szContentHTML = models.TextField(
default="",
blank=True,
verbose_name=u"Высказывание HTML",
help_text=u"<b>Высказывание Крылатое</b> -- крылатое, пародоксальное и все такое"
verbose_name=u"Изречение HTML",
help_text=u"Содержание цитаты, афоризма, высказывания…<br />"
u"Свертано в HTML по правилам типографики"
)
bTypograph = models.BooleanField(
default=True,
db_index=True,
verbose_name=u"Типографить",
help_text=u"Применять типографику?"
)
kAuthor = models.ForeignKey(
TbAuthor,
default=None,
blank=True,
null=True,
on_delete=models.DO_NOTHING,
verbose_name=u"Автор",
help_text=u"Автор изречения или цитаты <b>(не обязательно, но желательно)</b>"
@@ -310,6 +328,7 @@ class TbDictumAndQuotes(models.Model):
TbOrigin,
default=None,
blank=True,
null=True,
on_delete=models.DO_NOTHING,
verbose_name=u"Источник",
help_text=u"Откуда взята циатата, высказывание, изречение <b>(не обязательно, но желательно)</b>"
@@ -318,6 +337,7 @@ class TbDictumAndQuotes(models.Model):
TbImages,
default=None,
blank=True,
null=True,
on_delete=models.DO_NOTHING,
verbose_name=u"Картинка",
help_text=u"Ссылка на картинку, в табличке картинок <b>(не обязательно)</b><br />"
@@ -373,41 +393,41 @@ class TbDictumAndQuotes(models.Model):
return self.__str__()
def save(self, *args, **kwargs):
http = urllib3.PoolManager()
# http = urllib3.PoolManager()
# последовательно
# Используем типограф typus (https://github.com/byashimov/typus)
# Используем типограф Eugene Spearance (http://www.typograf.ru/)
# Используем типограф Муравьева (http://mdash.ru/api.v1.php)
if self.szIntro != "" and self.szIntro != ru_typus(self.szIntro):
# сравнение self.szIntro != ru_typus(self.szIntro) нужно для избежания повторных обращений
# к типографам при обновлении щетчиков просмотра
self.szIntro = ru_typus(self.szIntro)
resp = http.request("POST",
"http://www.typograf.ru/webservice/",
fields={"text": self.szIntro.replace("\u202f", " ").replace("\u2009", " ").encode('cp1251')})
self.szIntroHTML = resp.data.decode('cp1251')
# print(self.szIntroHTML)
resp = http.request("POST",
"http://mdash.ru/api.v1.php",
fields={"text": self.szIntroHTML.encode('utf-8')})
self.szIntroHTML = json.loads(resp.data)["result"]
# print(self.szIntroHTML)
else:
self.szIntroHTML = ""
if self.szContent != ru_typus(self.szContent):
# self.szContent != ru_typus(self.szContent) нужно для избежания повторных обращений
# к типографам при обновлении щетчиков просмотра
self.szContent = ru_typus(self.szContent)
resp = http.request("POST",
"http://www.typograf.ru/webservice/",
fields={"text": self.szContent.replace("\u202f", " ").replace("\u2009", " ").encode('cp1251')})
self.szContentHTML = resp.data.decode('cp1251')
print(self.szContentHTML)
resp = http.request("POST",
"http://mdash.ru/api.v1.php",
fields={"text": self.szContentHTML.encode('utf-8')})
self.szContentHTML = json.loads(resp.data)["result"]
# if self.szIntro != "" and self.szIntro != ru_typus(self.szIntro):
# # сравнение self.szIntro != ru_typus(self.szIntro) нужно для избежания повторных обращений
# # к типографам при обновлении щетчиков просмотра
# self.szIntro = ru_typus(self.szIntro)
# resp = http.request("POST",
# "http://www.typograf.ru/webservice/",
# fields={"text": self.szIntro.replace("\u202f", " ").replace("\u2009", " ").encode('cp1251')})
# self.szIntroHTML = resp.data.decode('cp1251')
# # print(self.szIntroHTML)
# resp = http.request("POST",
# "http://mdash.ru/api.v1.php",
# fields={"text": self.szIntroHTML.encode('utf-8')})
# self.szIntroHTML = json.loads(resp.data)["result"]
# # print(self.szIntroHTML)
# else:
# self.szIntroHTML = ""
# if self.szContent != ru_typus(self.szContent):
# # self.szContent != ru_typus(self.szContent) нужно для избежания повторных обращений
# # к типографам при обновлении щетчиков просмотра
# self.szContent = ru_typus(self.szContent)
# resp = http.request("POST",
# "http://www.typograf.ru/webservice/",
# fields={"text": self.szContent.replace("\u202f", " ").replace("\u2009", " ").encode('cp1251')})
# self.szContentHTML = resp.data.decode('cp1251')
# print(self.szContentHTML)
# resp = http.request("POST",
# "http://mdash.ru/api.v1.php",
# fields={"text": self.szContentHTML.encode('utf-8')})
# self.szContentHTML = json.loads(resp.data)["result"]
# # print(self.szContentHTML)
super(TbDictumAndQuotes, self).save(*args, **kwargs)
class Meta: