mirror of
https://github.com/jrnl-org/jrnl.git
synced 2025-05-10 16:48:31 +02:00
test for file path parsing
This commit is contained in:
parent
9796f5b0b0
commit
d323e5f131
4 changed files with 69 additions and 1 deletions
|
@ -15,7 +15,7 @@ import readline, glob
|
||||||
try:
|
try:
|
||||||
from Crypto.Cipher import AES
|
from Crypto.Cipher import AES
|
||||||
from Crypto.Random import random, atfork
|
from Crypto.Random import random, atfork
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
import hashlib
|
import hashlib
|
||||||
import getpass
|
import getpass
|
||||||
|
@ -23,11 +23,13 @@ try:
|
||||||
import clint
|
import clint
|
||||||
except ImportError:
|
except ImportError:
|
||||||
clint = None
|
clint = None
|
||||||
|
import shutil
|
||||||
|
|
||||||
class Journal:
|
class Journal:
|
||||||
def __init__(self, config, **kwargs):
|
def __init__(self, config, **kwargs):
|
||||||
config.update(kwargs)
|
config.update(kwargs)
|
||||||
self.config = config
|
self.config = config
|
||||||
|
self.path_search = re.compile('[\[\(]?(([A-Z]:|/)\S*?\.(tif|tiff|jpg|jpeg|gif|png))[\[\)]?')
|
||||||
|
|
||||||
# Set up date parser
|
# Set up date parser
|
||||||
consts = pdc.Constants()
|
consts = pdc.Constants()
|
||||||
|
@ -233,6 +235,23 @@ class Journal:
|
||||||
|
|
||||||
return date
|
return date
|
||||||
|
|
||||||
|
def parse_for_images(self, body):
|
||||||
|
print 'in parse for images'
|
||||||
|
# TODO: parse also for name (like used in markdown [name](url))
|
||||||
|
path_start = re.compile('[\[\(]?([A-Z]:|/).*?\.(tif|tiff|jpg|jpeg|gif|png)[\[\)]?')
|
||||||
|
for word in body.split():
|
||||||
|
res = path_start.match(word)
|
||||||
|
if res and len(res.groups()) == 2 and os.path.exists(word.strip('()[]')):
|
||||||
|
word = word.strip('()[]')
|
||||||
|
print word
|
||||||
|
save_path = os.path.splitext(self.config['journal'])[0] + '_data'
|
||||||
|
if not os.path.exists(save_path):
|
||||||
|
os.mkdir(save_path)
|
||||||
|
new_path = os.path.join(save_path, os.path.basename(word))
|
||||||
|
# TODO: replace name by hash
|
||||||
|
shutil.copyfile(word, new_path)
|
||||||
|
return body
|
||||||
|
|
||||||
def new_entry(self, raw, date=None):
|
def new_entry(self, raw, date=None):
|
||||||
"""Constructs a new entry from some raw text input.
|
"""Constructs a new entry from some raw text input.
|
||||||
If a date is given, it will parse and use this, otherwise scan for a date in the input first."""
|
If a date is given, it will parse and use this, otherwise scan for a date in the input first."""
|
||||||
|
@ -247,6 +266,7 @@ class Journal:
|
||||||
title_end = sep_pos
|
title_end = sep_pos
|
||||||
title = raw[:title_end+1]
|
title = raw[:title_end+1]
|
||||||
body = raw[title_end+1:].strip()
|
body = raw[title_end+1:].strip()
|
||||||
|
body = self.parse_for_images(body)
|
||||||
if not date:
|
if not date:
|
||||||
if title.find(":") > 0:
|
if title.find(":") > 0:
|
||||||
date = self.parse_date(title[:title.find(":")])
|
date = self.parse_date(title[:title.find(":")])
|
||||||
|
|
0
tests/empty.txt
Normal file
0
tests/empty.txt
Normal file
|
@ -2,6 +2,8 @@
|
||||||
# encoding: utf-8
|
# encoding: utf-8
|
||||||
|
|
||||||
import unittest
|
import unittest
|
||||||
|
import os
|
||||||
|
from jrnl.Journal import Journal
|
||||||
|
|
||||||
class TestClasses(unittest.TestCase):
|
class TestClasses(unittest.TestCase):
|
||||||
"""Test the behavior of the classes.
|
"""Test the behavior of the classes.
|
||||||
|
@ -11,12 +13,52 @@ class TestClasses(unittest.TestCase):
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
|
self.data_path = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
self.config = {
|
||||||
|
"timeformat": "%Y-%m-%d %H:%M",
|
||||||
|
"encrypt": False,
|
||||||
|
"tagsymbols": "@",
|
||||||
|
"journal": ""
|
||||||
|
}
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
# TODO: delete copied file, etc
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def test_colon_in_textbody(self):
|
def test_colon_in_textbody(self):
|
||||||
"""colons should not cause problems in the text body"""
|
"""colons should not cause problems in the text body"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
# def test_file_detection(self):
|
||||||
|
# self.config['journal'] = os.path.join(self.data_path, 'empty.txt')
|
||||||
|
# journal = Journal(config=self.config)
|
||||||
|
# with open(os.path.join(self.data_path, 'url_test.txt')) as f:
|
||||||
|
# journal.new_entry(f.read())
|
||||||
|
# # TODO: check that copied file exists
|
||||||
|
|
||||||
|
def test_rendering_md(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_rendering_htm(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_open_in_browser(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test_pathsearch_regex(self):
|
||||||
|
true_positive = ['/Volumes/dedan/bla.png',
|
||||||
|
'/Users/dedan/projects/jrnl/tests/golden.jpg',
|
||||||
|
'/Volumes/dedan/test.png']
|
||||||
|
false_positive = ['/Volumes/dedan/bla.blub',
|
||||||
|
'http://en.wikipedia.org/wiki/Generative_model']
|
||||||
|
self.config['journal'] = os.path.join(self.data_path, 'empty.txt')
|
||||||
|
journal = Journal(config=self.config)
|
||||||
|
with open(os.path.join(self.data_path, 'url_test.txt')) as f:
|
||||||
|
results = [res[0] for res in journal.path_search.findall(f.read())]
|
||||||
|
for tp in true_positive:
|
||||||
|
self.assertIn(tp, results)
|
||||||
|
for fp in false_positive:
|
||||||
|
self.assertNotIn(fp, results)
|
||||||
|
|
||||||
class TestCLI(unittest.TestCase):
|
class TestCLI(unittest.TestCase):
|
||||||
"""test the command-line interaction part of the program"""
|
"""test the command-line interaction part of the program"""
|
||||||
|
|
6
tests/url_test.txt
Normal file
6
tests/url_test.txt
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
ein normalser satz.
|
||||||
|
|
||||||
|
Lorem ipsum dolor sit amet, consectetur adipisicing elit, (/Volumes/dedan/bla.png
|
||||||
|
) sed do eiusmod tempor incididunt ut (http://en.wikipedia.org/wiki/Generative_model) labore et dolore magna aliqua. Ut enim ad minim veniam, (/Users/dedan/projects/jrnl/tests/golden.jpg)
|
||||||
|
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
||||||
|
consequat. Duis aute irure dolor http://www.dict.cc/?s=descendant in reprehenderit in voluptate velit esse /Volumes/dedan/test.png cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non (/Volumes/dedan/bla.blub) proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
Loading…
Add table
Reference in a new issue