FIX bugs witth added time.
Actually implement set of added time in repository. Changes storage of added time (now as datetime.datetime).
This commit is contained in:
parent
d2ba13700f
commit
ad29b27412
@ -4,6 +4,7 @@ from .. import bibstruct
|
||||
from ..configs import config
|
||||
from ..uis import get_ui
|
||||
|
||||
|
||||
class InvalidQuery(ValueError):
|
||||
pass
|
||||
|
||||
@ -24,7 +25,8 @@ def parser(subparsers):
|
||||
|
||||
def date_added(np):
|
||||
n, p = np
|
||||
return p.metadata['added']
|
||||
return p.added
|
||||
|
||||
|
||||
def command(args):
|
||||
ui = get_ui()
|
||||
@ -59,6 +61,7 @@ def _get_field_value(query_block):
|
||||
def _lower(s, lower=True):
|
||||
return s.lower() if lower else s
|
||||
|
||||
|
||||
def _check_author_match(paper, query, case_sensitive=False):
|
||||
"""Only checks within last names."""
|
||||
if not 'author' in paper.bibentry:
|
||||
@ -67,6 +70,7 @@ def _check_author_match(paper, query, case_sensitive=False):
|
||||
for p in paper.bibentry['author']])
|
||||
|
||||
|
||||
|
||||
def _check_tag_match(paper, query, case_sensitive=False):
|
||||
return any([query in _lower(t, lower=(not case_sensitive))
|
||||
for t in paper.tags])
|
||||
|
@ -1,11 +1,20 @@
|
||||
import copy
|
||||
import collections
|
||||
import datetime
|
||||
from dateutil.parser import parse as datetime_parse
|
||||
|
||||
from . import bibstruct
|
||||
|
||||
#DEFAULT_META = collections.OrderedDict([('docfile', None), ('tags', set()), ('added', )])
|
||||
DEFAULT_META = {'docfile': None, 'tags': set(), 'added': None}
|
||||
|
||||
DEFAULT_META = {'docfile': None, 'tags': set()}
|
||||
|
||||
|
||||
def _clean_metadata(metadata):
|
||||
meta = copy.deepcopy(DEFAULT_META)
|
||||
meta.update(metadata or {}) # handles None metadata
|
||||
meta['tags'] = set(meta.get('tags', [])) # tags should be a set
|
||||
if 'added' in meta and isinstance(meta['added'], basestring):
|
||||
meta['added'] = datetime_parse(meta['added'])
|
||||
return meta
|
||||
|
||||
|
||||
class Paper(object):
|
||||
""" Paper class.
|
||||
@ -20,19 +29,15 @@ class Paper(object):
|
||||
|
||||
def __init__(self, bibdata, citekey=None, metadata=None):
|
||||
self.citekey = citekey
|
||||
self.metadata = metadata
|
||||
self.metadata = _clean_metadata(metadata)
|
||||
self.bibdata = bibdata
|
||||
|
||||
_, self.bibentry = bibstruct.get_entry(self.bibdata)
|
||||
|
||||
if self.metadata is None:
|
||||
self.metadata = copy.deepcopy(DEFAULT_META)
|
||||
if self.citekey is None:
|
||||
self.citekey = bibstruct.extract_citekey(self.bibdata)
|
||||
bibstruct.check_citekey(self.citekey)
|
||||
|
||||
self.metadata['tags'] = set(self.metadata.get('tags', []))
|
||||
|
||||
def __eq__(self, other):
|
||||
return (isinstance(self, Paper) and type(other) is type(self)
|
||||
and self.bibdata == other.bibdata
|
||||
@ -88,10 +93,11 @@ class Paper(object):
|
||||
|
||||
# added date
|
||||
|
||||
# Added time, supposed to be stored as datetime object
|
||||
@property
|
||||
def added(self):
|
||||
datetime.datetime.strptime(self.metadata['added'], '%Y-%m-%d %H:%M:%S')
|
||||
return self.metadata.get('added', None)
|
||||
|
||||
@added.setter
|
||||
def added(self, value):
|
||||
self.metadata['added'] = value.strftime('%Y-%m-%d %H:%M:%S')
|
||||
self.metadata['added'] = value
|
||||
|
@ -1,4 +1,5 @@
|
||||
import itertools
|
||||
from datetime import datetime
|
||||
|
||||
from . import bibstruct
|
||||
from . import events
|
||||
@ -66,7 +67,8 @@ class Repository(object):
|
||||
if (not overwrite) and (self.databroker.exists(paper.citekey, both=False)
|
||||
or (paper.citekey in self)):
|
||||
raise CiteKeyCollision('citekey {} already in use'.format(paper.citekey))
|
||||
|
||||
if not paper.added:
|
||||
paper.added = datetime.now()
|
||||
self.databroker.push_bibdata(paper.citekey, paper.bibdata)
|
||||
self.databroker.push_metadata(paper.citekey, paper.metadata)
|
||||
self.citekeys.add(paper.citekey)
|
||||
|
@ -1,4 +1,5 @@
|
||||
import unittest
|
||||
from datetime import datetime
|
||||
|
||||
import dotdot
|
||||
import fake_env
|
||||
@ -46,11 +47,20 @@ class TestPushPaper(TestRepo):
|
||||
self.assertEquals(orig, retrieved)
|
||||
|
||||
def test_pushes_paper_metadata(self):
|
||||
orig = {'docfile': 'dummy', 'tags': set(['tag', 'another'])}
|
||||
orig = {'docfile': 'dummy', 'tags': set(['tag', 'another']),
|
||||
'added': datetime(2012, 12, 12, 12, 12, 12, 12)}
|
||||
self.repo.push_paper(Paper(fixtures.doe_bibdata, metadata=orig))
|
||||
retrieved = self.repo.databroker.pull_metadata('Doe2013')
|
||||
self.assertEquals(orig, retrieved)
|
||||
|
||||
def test_pushes_paper_metadata_set_added(self):
|
||||
orig = {'docfile': 'dummy', 'tags': set(['tag', 'another'])}
|
||||
now = datetime.now()
|
||||
self.repo.push_paper(Paper(fixtures.doe_bibdata, metadata=orig))
|
||||
retrieved = self.repo.databroker.pull_metadata('Doe2013')
|
||||
self.assertIn('added', retrieved)
|
||||
self.assertTrue(now < retrieved['added'])
|
||||
|
||||
|
||||
class TestUpdatePaper(TestRepo):
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user