Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/webapp/polls/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/polls/models.py')
-rw-r--r--webapp/polls/models.py42
1 files changed, 40 insertions, 2 deletions
diff --git a/webapp/polls/models.py b/webapp/polls/models.py
index 1117728..8320c00 100644
--- a/webapp/polls/models.py
+++ b/webapp/polls/models.py
@@ -10,6 +10,7 @@ import copy
import warnings
import glob
import errno
+import hashlib
from distutils.dir_util import copy_tree
from bson import ObjectId, DBRef
from datetime import datetime
@@ -442,7 +443,7 @@ class Poll(Document, AbstracErrorObject):
return ";".join(header)
- def get_resutls_path(self):
+ def get_results_path(self):
results_path = self._results_path
poll_id = self.id
if poll_id is None:
@@ -452,7 +453,7 @@ class Poll(Document, AbstracErrorObject):
def set_results_path(self, path):
self._results_path = path
- results_path = property(get_resutls_path, set_results_path)
+ results_path = property(get_results_path, set_results_path)
def get_result_files(self, as_instance_of=None):
result_file = PollResultFile if not as_instance_of else as_instance_of
@@ -1549,3 +1550,40 @@ class PollResultFile(object):
def delete(self):
file_path = self.file_path
os.remove(file_path)
+
+ @property
+ def hash(self):
+ data = self.get_data()
+ if 'upload_timestamp' in data.keys():
+ del data['upload_timestamp']
+ data_str = str(data)
+ hash_hexdigest = hashlib.md5(data_str).hexdigest()
+ return hash_hexdigest
+
+ def exists(self):
+ poll_id = self.data['poll_id']
+ poll = Poll.get(poll_id)
+ result_path = os.path.join(poll.results_path, self.get_file_name())
+ exists = os.path.exists(result_path)
+
+ if not exists:
+ results = poll.get_result_files()
+ hashes = [result.hash for result in results]
+ exists = self.hash in hashes
+
+ return exists
+
+ def is_authored_by(self, user):
+ """Check if result is authored by user."""
+ result_author = self.get_pollster_username()
+ username = user.username
+ return username == result_author
+
+ def poll_is_assigned_to(self, user):
+ poll_id = self.get_data()['poll_id']
+ pollster = user.pollster
+
+ assigned_polls_id = [
+ str(p.id) for p in Poll.assigned_to_pollster(pollster)]
+
+ return poll_id in assigned_polls_id