From 8c8d9f51685b3b172a8d23d3c0c01d53351c6d80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20=27Necoro=27=20Neumann?= Date: Sun, 12 Mar 2017 16:38:44 +0100 Subject: Pseudo -> Virtual --- archivist/cli.py | 15 ++++----- archivist/model.py | 1 - archivist/prefixes.py | 76 ------------------------------------------- archivist/virtual_prefixes.py | 76 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 85 deletions(-) delete mode 100644 archivist/prefixes.py create mode 100644 archivist/virtual_prefixes.py diff --git a/archivist/cli.py b/archivist/cli.py index 833cb80..1c13952 100644 --- a/archivist/cli.py +++ b/archivist/cli.py @@ -2,7 +2,7 @@ import click from functools import reduce import operator as op -from .prefixes import query_pseudo_prefix, is_pseudo_prefix +from .virtual_prefixes import query as query_virtual, is_virtual, register_prefixes CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help']) @@ -26,7 +26,6 @@ def db(): def init(): """Initialize the database, if not done already.""" from .model import create_tables, db - from .prefixes import register_prefixes create_tables() with db.atomic(): register_prefixes() @@ -114,11 +113,11 @@ class PrefixTag: return prefix_tag_name(self.tag, self.prefix) def is_virtual(self): - return self.prefix and is_pseudo_prefix(self.prefix) + return self.prefix and is_virtual(self.prefix) @property def virtual_query(self): - return query_pseudo_prefix(self.prefix, self.tag) + return query_virtual(self.prefix, self.tag) def __str__(self): return self.prefixed_name() @@ -256,12 +255,12 @@ def add_doc(file, tags, create_tags, ignore_missing_tags): def find_doc(tags): from .model import Document, DocumentTag, TagClosure, Tag - pseudo_tags = [] + virtual_tags = [] normal_tags = [] for t in tags: if t.is_virtual(): - pseudo_tags.append(t) + virtual_tags.append(t) else: normal_tags.append(t) @@ -279,8 +278,8 @@ def find_doc(tags): query = query.where(Document.id << tag_query) - if pseudo_tags: - query = query.where(reduce(op.and_, (p.virtual_query for p in pseudo_tags))) + if virtual_tags: + query = query.where(reduce(op.and_, (p.virtual_query for p in virtual_tags))) for doc in query.iterator(): print("* ID %d -- %s" % (doc.id, doc.original_path)) diff --git a/archivist/model.py b/archivist/model.py index 56ef89e..f03927e 100644 --- a/archivist/model.py +++ b/archivist/model.py @@ -7,7 +7,6 @@ import datetime from enum import Enum, unique from pkg_resources import resource_filename -from .prefixes import query_pseudo_prefix from .peewee_ext import EnumField from .peewee_fixes import * # dummy to force evaluation of those fixes diff --git a/archivist/prefixes.py b/archivist/prefixes.py deleted file mode 100644 index 5e28207..0000000 --- a/archivist/prefixes.py +++ /dev/null @@ -1,76 +0,0 @@ -prefixes = {} -registered = False - -def register_prefixes(): - global registered - if registered: return - - if not prefixes: - _create_prefixes() - - for prefix in prefixes.values(): - prefix.get_or_create() - - registered = True - -def _create_prefixes(): - from .model import Document - - FieldPseudoPrefix('direction', 'In- or outgoing', Document.direction) - FieldPseudoPrefix('date', 'Date of creation', Document.created) - FieldPseudoPrefix('mime', 'Mime Type', Document.mimetype) - ContainsFieldPseudoPrefix('name', 'Name/description of document', Document.name) - - for part in ('day', 'month', 'year'): - FieldPartPseudoPrefix(part, part.capitalize() + ' of creation', Document.created, part) - -def query_pseudo_prefix(prefix, value): - register_prefixes() - - if prefix in prefixes: - return prefixes[prefix].as_query(value) - return None - -def is_pseudo_prefix(prefix): - register_prefixes() - return prefix in prefixes - -class PseudoPrefix: - def __init__(self, name, description, accessor): - self.name = name - self.accessor = accessor - self.description = description - prefixes[name] = self - - def get_or_create(self): - from .model import Prefix - return Prefix.get_or_create(name = self.name, defaults={ - 'description' : self.description, - 'virtual' : True}) - - def check_for(self, document, value): - return self.accessor(document) == value - - def as_query(self, value): - raise NotImplementedError - -class FieldPseudoPrefix(PseudoPrefix): - def __init__(self, name, description, field): - self._field = field - super().__init__(name, description, lambda doc: getattr(doc, field.name)) - - def as_query(self, value): - return self._field == value - -class ContainsFieldPseudoPrefix(FieldPseudoPrefix): - def as_query(self, value): - return self._field.contains(value) - -class FieldPartPseudoPrefix(PseudoPrefix): - def __init__(self, name, description, field, part): - self._field = field - self._field_part = getattr(field, part) - super().__init__(name, description, lambda doc: getattr(getattr(doc, field.name), part)) - - def as_query(self, value): - return self._field_part == int(value) diff --git a/archivist/virtual_prefixes.py b/archivist/virtual_prefixes.py new file mode 100644 index 0000000..632e3cf --- /dev/null +++ b/archivist/virtual_prefixes.py @@ -0,0 +1,76 @@ +prefixes = {} +registered = False + +def register_prefixes(): + global registered + if registered: return + + if not prefixes: + _create_prefixes() + + for prefix in prefixes.values(): + prefix.get_or_create() + + registered = True + +def _create_prefixes(): + from .model import Document + + FieldVirtualPrefix('direction', 'In- or outgoing', Document.direction) + FieldVirtualPrefix('date', 'Date of creation', Document.created) + FieldVirtualPrefix('mime', 'Mime Type', Document.mimetype) + ContainsFieldVirtualPrefix('name', 'Name/description of document', Document.name) + + for part in ('day', 'month', 'year'): + FieldPartVirtualPrefix(part, part.capitalize() + ' of creation', Document.created, part) + +def query(prefix, value): + register_prefixes() + + if prefix in prefixes: + return prefixes[prefix].as_query(value) + return None + +def is_virtual(prefix): + register_prefixes() + return prefix in prefixes + +class VirtualPrefix: + def __init__(self, name, description, accessor): + self.name = name + self.accessor = accessor + self.description = description + prefixes[name] = self + + def get_or_create(self): + from .model import Prefix + return Prefix.get_or_create(name = self.name, defaults={ + 'description' : self.description, + 'virtual' : True}) + + def check_for(self, document, value): + return self.accessor(document) == value + + def as_query(self, value): + raise NotImplementedError + +class FieldVirtualPrefix(VirtualPrefix): + def __init__(self, name, description, field): + self._field = field + super().__init__(name, description, lambda doc: getattr(doc, field.name)) + + def as_query(self, value): + return self._field == value + +class ContainsFieldVirtualPrefix(FieldVirtualPrefix): + def as_query(self, value): + return self._field.contains(value) + +class FieldPartVirtualPrefix(VirtualPrefix): + def __init__(self, name, description, field, part): + self._field = field + self._field_part = getattr(field, part) + super().__init__(name, description, lambda doc: getattr(getattr(doc, field.name), part)) + + def as_query(self, value): + return self._field_part == int(value) -- cgit v1.2.3