def test_get_nonexistant_job_product(self): # make a deleted job: job = Job(job_name="counter") job.save() job_key = job.key() job.delete() response = self.client.get(reverse('jobs.product', args=(job_key,))) self.assertEqual(response.status_code, 404)
def test_get_nonexistant_job_product(self): # make a deleted job: job = Job(job_name="counter") job.save() job_key = job.key() job.delete() response = self.client.get(reverse('jobs.product', args=(job_key, ))) self.assertEqual(response.status_code, 404)
def create_job(kwargs): if 'name' not in kwargs or len(kwargs['name']) == 0: logger.error('The job name was not got') raise BridgeException() try: Job.objects.get(name=kwargs['name']) except ObjectDoesNotExist: pass else: raise BridgeException(_('The job name is already used')) if 'author' not in kwargs or not isinstance(kwargs['author'], User): logger.error('The job author was not got') raise BridgeException() newjob = Job(name=kwargs['name'], change_date=now(), change_author=kwargs['author'], parent=kwargs.get('parent')) if 'identifier' in kwargs and kwargs['identifier'] is not None: if Job.objects.filter(identifier=kwargs['identifier']).count() > 0: # This exception will be occurred only on jobs population (if for preset jobs identifier would be set) # or jobs uploading raise BridgeException(_('The job with specified identifier already exists')) newjob.identifier = kwargs['identifier'] else: time_encoded = now().strftime("%Y%m%d%H%M%S%f%z").encode('utf-8') newjob.identifier = hashlib.md5(time_encoded).hexdigest() newjob.save() new_version = create_version(newjob, kwargs) if 'filedata' in kwargs: try: SaveFileData(kwargs['filedata'], new_version) except Exception as e: logger.exception(e) newjob.delete() raise BridgeException() if 'absolute_url' in kwargs: # newjob_url = reverse('jobs:job', args=[newjob.pk]) # Notify(newjob, 0, {'absurl': kwargs['absolute_url'] + newjob_url}) pass else: # Notify(newjob, 0) pass return newjob
class JobForm: def __init__(self, user, job, action): self._user = user self._job = job self._copy = (action == 'copy') def get_context(self): data = { 'job_id': self._job.id, 'name': self._job.name, 'parent': '', 'description': self.job_version().description, 'copy': self._copy, 'versions': [] } # Get list of versions for j_version in self._job.versions.order_by('-version'): if self._job.version == j_version.version: title = _("Current version") else: job_time = j_version.change_date.astimezone(pytz.timezone(self._user.extended.timezone)) title = '%s (%s): %s' % ( job_time.strftime("%d.%m.%Y %H:%M:%S"), j_version.change_author.get_full_name(), j_version.comment) data['versions'].append({'version': j_version.version, 'title': title}) if self._copy: data['parent'] = self._job.identifier else: if self._job.parent: data['parent'] = self._job.parent.identifier return data def job_version(self): return self._job.versions.get(version=self._job.version) def __is_parent_valid(self, parent): if self._copy: return True if self._job.parent == parent: return True while parent is not None: if parent.id == self._job.id: return False parent = parent.parent return True def __get_parent(self, identifier): parent = None if len(identifier) > 0: parent = get_job_by_identifier(identifier) if not self.__is_parent_valid(parent): raise BridgeException(_("The specified parent can't be set for this job")) elif self._user.extended.role != USER_ROLES[2][0]: raise BridgeException(_("The parent identifier is required for this job")) return parent def __check_name(self, name): if len(name) == 0: raise BridgeException(_('The job name is required')) try: job = Job.objects.get(name=name) except ObjectDoesNotExist: return name if not self._copy and job.id == self._job.id: return name raise BridgeException(_('The job name is already used')) def __create_version(self, data): new_version = JobHistory( job=self._job, version=self._job.version, change_author=self._user, comment=data.get('comment', ''), description=data.get('description', '') ) if 'global_role' in data and data['global_role'] in set(x[0] for x in JOB_ROLES): new_version.global_role = data['global_role'] new_version.save() if 'user_roles' in data: try: UserRolesForm(self._user, new_version).save(data['user_roles']) except Exception: new_version.delete() raise if 'file_data' in data: try: UploadFilesTree(new_version, data['file_data']) except Exception: new_version.delete() raise return new_version def __create_job(self, data): if 'identifier' in data and data['identifier'] is not None: if Job.objects.filter(identifier=data['identifier']).count() > 0: raise BridgeException(_('The job with specified identifier already exists')) identifier = data['identifier'] else: identifier = hashlib.md5(now().strftime("%Y%m%d%H%M%S%f%z").encode('utf-8')).hexdigest() self._job = Job( identifier=identifier, name=self.__check_name(data.get('name', '')), change_date=now(), parent=self.__get_parent(data.get('parent', '')) ) if 'weight' in data and data['weight'] in list(x[0] for x in JOB_WEIGHT): self._job.weight = data['weight'] self._job.save() try: new_version = self.__create_version(data) except Exception: self._job.delete() raise self._job.change_author = new_version.change_author self._job.change_date = new_version.change_date self._job.save() def __update_job(self, data): if self._job.version != int(data.get('last_version', 0)): raise BridgeException(_("Your version is expired, please reload the page")) self._job.parent = self.__get_parent(data.get('parent', '')) self._job.name = self.__check_name(data.get('name', '')) self._job.version += 1 new_version = self.__create_version(data) self._job.change_author = new_version.change_author self._job.change_date = new_version.change_date self._job.save() def save(self, data): if self._copy: if not JobAccess(self._user).can_create(): raise BridgeException(_("You don't have an access to create new jobs")) self.__create_job(data) else: if not JobAccess(self._user, self._job).can_edit(): raise BridgeException(_("You don't have an access to edit this job")) self.__update_job(data) return self._job