예제 #1
0
 async def reset(self, username, survey_name):
     """Delete all submission data including the results of a survey."""
     survey_id = utils.combine(username, survey_name)
     await database.database['resultss'].delete_one({'_id': survey_id})
     await database.database[f'surveys.{survey_id}.submissions'].drop()
     s = f'surveys.{survey_id}.verified-submissions'
     await database.database[s].drop()
예제 #2
0
 def __init__(self, configuration):
     """Initialize alligator with some pipeline parts already defined."""
     self.configuration = configuration
     self.survey_id = utils.combine(
         configuration['username'],
         configuration['survey_name'],
     )
     self.collection = (
         database.database[f'surveys.{self.survey_id}.submissions']
         if configuration['authentication'] == 'open' else
         database.database[f'surveys.{self.survey_id}.verified-submissions']
     )
     self.resultss = database.database['resultss']
     self.mapping = {
         'email': self._add_email,
         'option': self._add_option,
         'radio': self._add_radio,
         'selection': self._add_selection,
         'text': self._add_text,
     }
     self.project = {}
     self.group = {
         '_id': self.survey_id,
         'count': {
             '$sum': 1
         },
     }
     self.merge = {
         'into': 'resultss',
         'on': '_id',
         'whenMatched': 'replace',
         'whenNotMatched': 'insert',
     }
예제 #3
0
    def fetch(self, username, survey_name):
        """Fetch and return a survey object from the local cache.

        Raises KeyError if survey is not cached.

        """
        survey_id = utils.combine(username, survey_name)
        return self._cache[survey_id]
예제 #4
0
    def update(self, configuration):
        """Update or create survey object in the local cache.

        Draft surveys are not cached. When the given configuration is a draft,
        any (non-draft) configuration is deleted from the cache.

        """
        username = configuration['username']
        survey_name = configuration['survey_name']
        survey_id = utils.combine(username, survey_name)
        if configuration['draft']:
            self.delete(username, survey_name)
        else:
            self._cache[survey_id] = Survey(configuration)
예제 #5
0
 async def delete(self, username, survey_name):
     """Delete the survey and all its data from the database and cache."""
     await database.database['configurations'].delete_one(filter={
         'username':
         username,
         'survey_name':
         survey_name
     }, )
     self.cache.delete(username, survey_name)
     survey_id = utils.combine(username, survey_name)
     await database.database['resultss'].delete_one({'_id': survey_id})
     await database.database[f'surveys.{survey_id}.submissions'].drop()
     s = f'surveys.{survey_id}.verified-submissions'
     await database.database[s].drop()
예제 #6
0
 def delete(self, username, survey_name):
     """Remove survey object from the local cache."""
     survey_id = utils.combine(username, survey_name)
     self._cache.pop(survey_id, None)
예제 #7
0
 async def archive(self, username, survey_name):
     """Delete submission data of a survey, but keep the results."""
     survey_id = utils.combine(username, survey_name)
     await database.database[f'surveys.{survey_id}.submissions'].drop()
     s = f'surveys.{survey_id}.verified-submissions'
     await database.database[s].drop()