def scraped_job(job_dict): company_name = job_dict['company'].strip() company, created_company = Company.objects.get_or_create( slug=slugify(company_name), name=company_name, ) if created_company: if job_dict['logo'] is not None: download_and_save_image(company, job_dict['logo']) source_category = job_dict['source_category'] job_dict.pop('source_category') job_dict.pop('logo') job_dict.update({'company': company}) job, created_job = Job.objects.update_or_create(**job_dict) if created_job: tag, _ = Tag.objects.get_or_create(name=source_category) if not job.tags.filter(name=tag).exists(): job.tags.add(tag) job.save() tags = [] extracted_tags = extract_and_normalize_tags(job.role) for t in extracted_tags: t, _ = Tag.objects.get_or_create(name=t) tags.append(t) job.tags.add(*tags) job.save()
def _create_job(scraper, company, job_data): """ Creates or updates a Job and it's Tags :param scraper: Scraper object :param company: Company object :param job_data: dictionary containing """ try: job, created_job = Job.objects.update_or_create( company=company, link=job_data['link'], via_source=scraper, defaults={ 'role': job_data['role'], 'date_published': job_data['date_published'], 'description': job_data['description'], } ) except: # TODO: add logging here to see what sort of errors we get return None if created_job: tag, _ = Tag.objects.get_or_create(name=job_data['source_category']) if not job.tags.filter(name=tag).exists(): job.tags.add(tag) tags = [] extracted_tags = extract_and_normalize_tags(job.role) for tag_name in extracted_tags: tag, _ = Tag.objects.get_or_create(name=tag_name) tags.append(tag) job.tags.add(*tags) job.save() return job