diff options
Diffstat (limited to 'webapp/polls/models.py')
-rw-r--r-- | webapp/polls/models.py | 42 |
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 |