7
7
import traceback
8
8
import hashlib
9
9
10
- from mongoengine import ListField , StringField , Q , ReferenceField , PULL
10
+ from mongoengine import ListField , StringField , Q , ReferenceField , PULL , BooleanField
11
11
from jinja2 import Environment , FileSystemLoader
12
12
from flask import url_for
13
13
from mongoengine import DoesNotExist
@@ -95,6 +95,7 @@ class Export(ScheduleEntry):
95
95
include_tags = ListField (ReferenceField (Tag , reverse_delete_rule = PULL ))
96
96
exclude_tags = ListField (ReferenceField (Tag , reverse_delete_rule = PULL ))
97
97
ignore_tags = ListField (ReferenceField (Tag , reverse_delete_rule = PULL ))
98
+ fresh_tags = BooleanField (default = True )
98
99
output_dir = StringField (default = "exports" )
99
100
acts_on = StringField (verbose_name = "Acts on" )
100
101
template = ReferenceField (ExportTemplate )
@@ -115,15 +116,31 @@ def content_uri(self):
115
116
116
117
def execute (self ):
117
118
q_include = Q ()
118
- for t in self .include_tags :
119
- q_include |= Q (tags__match = {"name" : t .name , "fresh" : True })
120
- q_exclude = Q (tags__name__nin = [t .name for t in self .exclude_tags ])
121
- q = (
122
- Q (tags__not__size = 0 , tags__match = {"fresh" : True })
123
- & q_include
124
- & q_exclude
125
- & Q (_cls = "Observable.{}" .format (self .acts_on ))
126
- )
119
+ q_exclude = Q ()
120
+ if self .fresh_tags : # including
121
+ for t in self .include_tags :
122
+ q_include |= Q (tags__match = {"name" : t .name , "fresh" : True })
123
+ else :
124
+ q_include |= Q (tags__name__in = [t .name for t in self .include_tags ])
125
+ if self .fresh_tags : # excluding
126
+ for t in self .exclude_tags :
127
+ q_exclude |= Q (tags__match__ne = {"name" : t .name , "fresh" : True })
128
+ else :
129
+ q_exclude |= Q (tags__name__nin = [t .name for t in self .exclude_tags ])
130
+ if self .fresh_tags :
131
+ q = (
132
+ Q (tags__not__size = 0 , tags__match = {"fresh" : True })
133
+ & q_include
134
+ & q_exclude
135
+ & Q (_cls = "Observable.{}" .format (self .acts_on ))
136
+ )
137
+ else :
138
+ q = (
139
+ Q (tags__not__size = 0 )
140
+ & q_include
141
+ & q_exclude
142
+ & Q (_cls = "Observable.{}" .format (self .acts_on ))
143
+ )
127
144
128
145
return self .template .render (
129
146
self .filter_ignore_tags (Observable .objects (q ).no_cache ()), self .output_file
0 commit comments