Skip to content

Commit b972483

Browse files
authored
feat: Newsfetcher: sistema de plugins para capturas, arquivos e informações básicas; correções diversas
* Reestruturação dos diretórios: lugar próprio para a biblioteca news_fetcher * Inclusão de vários testes para NewsFetcher e alteração/expansão dos testes existentes * Sistema de plugins em NewsFetcher: - utilize plugins para buscar uma versão arquivada da notícia - utilize plugins para capturar a página da notícia - capturador padrão e um especialista (G1) para páginas em PDF (closes #69 e closes #68) - captura de informações básicas implementada via plugins * Utilize um hashid como nome de arquivo para um logotipo de jornal * NPM_FILE_PATTERNS: padrões de caminhos de acordo com a plataforma * Migração do sistema de testes para o pytest [WIP]
1 parent c552a39 commit b972483

40 files changed

+6222
-436
lines changed

.gitignore

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ staticfiles/
9999

100100
# ignore a regra para a pasta 'lib' acima para esta pasta
101101
!xram_memory/lib/
102+
!xram_memory/**/lib/
102103
# ignore a pasta usada pelo virtualenv
103104
.venv
104105
# ignore components instalados pelo npm
105-
node_modules
106+
node_modules
107+
#ignore pastas do pytest
108+
.pytest_cache

Pipfile

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ greenlet = "*"
2020
flower = "~=0.9.3"
2121
coverage = "*"
2222
factory-boy = "*"
23+
pytest-django = "*"
24+
pytest-datadir = "*"
25+
pytest-cov = "*"
26+
pytest-mock = "*"
2327

2428
[packages]
2529
dj-database-url = "~=0.5.0"

Pipfile.lock

Lines changed: 118 additions & 36 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conftest.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import sys
2+
3+
collect_ignore_glob = ['.venv/*']

pytest.ini

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# -- FILE: pytest.ini (or tox.ini)
2+
[pytest]
3+
#DJANGO_SETTINGS_MODULE = test_settings
4+
# -- recommended but optional:
5+
python_files = tests.py test_*.py tests_*.py *_tests.py
6+
norecursedirs = .git .venv node_modules

xram_memory/artifact/admin/forms/news.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
from django import forms
21
from xram_memory.artifact.models import News
3-
from xram_memory.artifact.news_fetcher import NewsFetcher
2+
from xram_memory.lib import NewsFetcher
3+
from django import forms
44

55

66
class NewsPDFCaptureStackedInlineForm(forms.ModelForm):

xram_memory/artifact/admin/forms/newspaper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
from django import forms
21
from xram_memory.artifact.models import Newspaper
3-
from xram_memory.artifact.news_fetcher import NewsFetcher
2+
from xram_memory.lib import NewsFetcher
3+
from django import forms
44

55

66
class NewspaperAdminForm(forms.ModelForm):

xram_memory/artifact/migrations/0006_auto_20190408_1050.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,22 @@
22

33
from django.db import migrations
44
from django.conf import settings
5+
from filer.models.foldermodels import Folder
56

67
DEFAULT_FOLDERS = settings.DEFAULT_FOLDERS
78

89

910
def create_default_folders(apps, schema_editor):
10-
Folder = apps.get_model('filer', 'Folder')
11-
12-
for i, folder in enumerate(DEFAULT_FOLDERS):
11+
for folder in [settings.FOLDER_CAPTURES, settings.FOLDER_PHOTO_ALBUMS]:
1312
Folder.objects.get_or_create(**folder)
1413

14+
captures_folder = Folder.objects.get(**settings.FOLDER_CAPTURES)
15+
for folder in [settings.FOLDER_PDF_CAPTURES, settings.FOLDER_IMAGE_CAPTURES]:
16+
Folder.objects.get_or_create(**folder, parent=captures_folder)
1517

16-
def reverse_create_default_folders(apps, schema_editor):
17-
Folder = apps.get_model('filer', 'Folder')
1818

19-
for i, folder in enumerate(DEFAULT_FOLDERS):
19+
def reverse_create_default_folders(apps, schema_editor):
20+
for folder in settings.DEFAULT_FOLDERS:
2021
try:
2122
Folder.objects.filter(**folder).delete()
2223
except Folder.DoesNotExist:

xram_memory/artifact/models/news.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from xram_memory.artifact.models import Artifact, Document, Newspaper
22
from xram_memory.artifact import tasks as background_tasks
3-
from xram_memory.artifact.news_fetcher import NewsFetcher
43
from django.db import models, transaction, IntegrityError
54
from xram_memory.logger.decorators import log_process
65
from filer.utils.generate_filename import randomized
@@ -14,6 +13,7 @@
1413
from filer.fields.file import FilerFileField
1514
from django.db.transaction import on_commit
1615
from filer.models import File as FilerFile
16+
from xram_memory.lib import NewsFetcher
1717
from django.db.models import Prefetch
1818
from django.utils.timezone import now
1919
from filer.models import File, Folder
@@ -128,15 +128,19 @@ def set_web_title(self):
128128
"""
129129
Pega o título para a página desta notícia.
130130
"""
131-
self.title = NewsFetcher.fetch_web_title(self.url)[:255]
131+
title = NewsFetcher.fetch_web_title(self.url)[:255]
132+
if title:
133+
self.title = title
132134

133135
@log_process(operation="verificar por uma versão no archive.org")
134136
def fetch_archived_url(self):
135137
"""
136138
Verifica se existe e adiciona a URL de uma versão arquivada desta notícia presente no
137139
`Internet Archive`.
138140
"""
139-
self.archived_news_url = NewsFetcher.fetch_archived_url(self.url)
141+
archived_news_url = NewsFetcher.fetch_archived_url(self.url)
142+
if archived_news_url:
143+
self.archived_news_url = archived_news_url
140144

141145
@log_process(operation="buscar informações básicas")
142146
def set_basic_info(self):

0 commit comments

Comments
 (0)