Ejemplo n.º 1
0
class PyJobsJobApplication(TestCase):
    def setUp(self):
        self.job = Job(title="Vaga 3",
                       workplace="Sao Paulo",
                       company_name="XPTO",
                       company_email="*****@*****.**",
                       description="Job bem maneiro",
                       premium=True,
                       public=True)
        self.job.save()
        self.user = User.objects.create_user(username='******',
                                             email='*****@*****.**',
                                             password='******')
        self.client = Client()

    def test_check_applied_for_job_anon(self):
        request_client = self.client.get("/job/{}/".format(self.job.pk))
        request = request_client.content.decode('utf-8')
        expected_response = "Você precisa estar logado para aplicar para esta vaga!"
        self.assertTrue(expected_response in request)

    def test_check_applied_for_job(self):
        self.client.login(username="******", password="******")
        request_client = self.client.get("/job/{}/".format(self.job.pk))
        request = request_client.content.decode('utf-8')
        expected_response = "Aplicar para esta vaga pelo PyJobs"
        self.assertTrue(expected_response in request)
Ejemplo n.º 2
0
def schedule_package(package):

    # Is this package already in the jobs table?
    jobs = Job.objects.filter(package = package)
    if jobs:
        logging.info("Package %s is already scheduled for updates." % package)
        return

    languages = Language.objects.all()

    for language in languages:
        job = Job(package=package, language=language)
        job.save()
        logging.info("Package %s is scheduled to be updated on %s" % (job.package.name, job.update_on.strftime("%B %d, %Y %H:%M")))
Ejemplo n.º 3
0
def init(testing=False):
    """Initialize the database with the default job"""
    if not os.path.exists(APPLICATION_DIRECTORY):
        os.mkdir(APPLICATION_DIRECTORY)
    if not os.path.exists(DATABASE_FILE) or testing:
        print(f"Creating TimeClok Database and default job.....")
        DB.create_tables(BaseModel)
        try:
            j = Job(name="default")
            j.save()
            s = State()
            s.save()
            s.set_job(j)
        except IntegrityError:
            DB.session.rollback()
Ejemplo n.º 4
0
    def post(self):
        args = parser.parse_args()
        pipeline = Pipeline.find(args['pipeline_id'])

        if pipeline.is_blocked():
            return {
                'message':
                'Creating new jobs for active pipeline is unavailable'
            }, 422

        job = Job(args['name'], args['worker_class'], args['pipeline_id'])
        job.assign_attributes(args)
        job.save()
        job.save_relations(args)
        return job, 201
Ejemplo n.º 5
0
    def getJobs(self):
        pagesize = 25
        page_count = self.count / pagesize
        self.url = self.buildUrl()
        print "url: " + self.url

        for page in range(0, page_count):
            nextpageurl = self.url + '&start=' + str(page * pagesize)
            print nextpageurl
            rawdata = Soup(urllib.urlopen(nextpageurl), "lxml")

            for i in range(0, pagesize):
                print "getting next job: " + str(datetime.now())
                result = rawdata.results.contents[i]
                jobtitle = result.find({'jobtitle'}).getText()
                company = result.find({'company'}).getText()
                location = result.find({'formattedlocation'}).getText()
                date_text = result.find({'date'}).getText()
                date_posted = datetime.strptime(date_text,
                                                '%a, %d %b %Y %H:%M:%S %Z')
                snippet = result.find({'snippet'}).getText()
                joburl = result.find({'url'}).getText()

                try:
                    j_exist = Job.objects.get(date_posted=date_posted, \
                                              company=company, \
                                              title=jobtitle)
                except ObjectDoesNotExist:
                    # access url and grab full job description
                    wordsoup = Soup(urllib.urlopen(joburl), "lxml")
                    description = wordsoup.find('span', attrs={'id':'job_summary'})\
                                          .getText().strip()
                    sponsored = result.find({'sponsored'}).getText().title()
                    expired = result.find({'expired'}).getText().title()

                    j = Job(date_posted=date_posted,
                            query=self.query,
                            company=company,
                            location=location,
                            title=jobtitle,
                            description=description,
                            url=joburl,
                            sponsored=sponsored,
                            expired=expired,
                            snippet=snippet)
                    j.save()
Ejemplo n.º 6
0
    def post(self):
        args = parser.parse_args()
        pipeline = Pipeline.find(args['pipeline_id'])

        if pipeline.is_blocked():
            return {
                'message':
                'Creating new jobs for active pipeline is unavailable'
            }, 422

        job = Job(args['name'], args['worker_class'], args['pipeline_id'])
        job.assign_attributes(args)
        job.save()
        job.save_relations(args)
        tracker = insight.GAProvider()
        tracker.track_event(category='jobs',
                            action='create',
                            label=args['worker_class'])
        return job, 201
Ejemplo n.º 7
0
class JobTest_02(TestCase):
    def setUp(self):
        self.job = Job(
            title="Vaga 2",
            workplace="Sao Paulo",
            company_name="XPTO",
            company_email = "*****@*****.**",
            description="Job bem maneiro",
            public=True
        )
        self.job.save()

    def test_job_application_link(self):
        self.assertEqual(False, self.job.get_application_link())

    def test_publicly_available(self):
        self.assertTrue((self.job in Job.get_publicly_available_jobs()))

    def test_premium_available(self):
        self.assertTrue((self.job not in Job.get_premium_jobs()))
Ejemplo n.º 8
0
def jobs(
    show: bool = Option(True,
                        help="display records for day/week/month/date_key"),
    add: str = Option(
        None, help="Add a new job, job names are stored lowercase only"),
    switch: str = Option(
        None, help="Switch to a different job and clock out current"),
):
    """Show and manage different jobs"""
    if add or switch:
        show = False
    if show:
        print(Job.print_header())
        current_job = State.get().job
        for j in Job.query().all():
            if j.id == current_job.id:
                print(f"{j} <- Current")
            else:
                print(j)
    elif add is not None:
        try:
            j = Job.query().filter(Job.name == add).one()
            print(f"Job '{add.lower()}' already exists.")
        except NoResultFound:
            print(f"Creating job '{add.lower()}'")
            j = Job(name=add)
            j.save()
    elif switch is not None:
        try:
            s = State.get()
            c = Clok.get_last_record()
            if c is not None:
                if c.time_out is None:
                    print(
                        f"Clocking you out of '{s.job.name}' at {get_date()}")
                    Clok.clock_out()
            print(f"Switching to job '{switch.lower()}'")
            j = Job.query().filter(Job.name == switch.lower()).one()
            State.set_job(j)
        except NoResultFound:
            print(f"Job '{switch}' not found")
Ejemplo n.º 9
0
    def update(self, request):
        serializer = SoundSerializer(data=request.data)
        if serializer.is_valid(raise_exception=True):

            task = play_audio.delay(serializer.data['sound_path'])
            job = Job(name="play_audio", celery_id=task.id)
            job.save()
            # FIXME sync_job_db
            #play_audio.apply_async(serializer.data['sound_path'], job.id, link=sync_job_db.s())
            # (play_audio.s(serializer.data['sound_path'], job.id) | sync_job_db.s(job.id)).delay()

            msg_out = "Asyncronous task. play_audio: " + serializer.data[
                'sound_path']
            response = apirest_response_format(
                request=request,
                status=task.status,
                msg=msg_out,
                result="",
                job_id=job.id,
            )
            return Response(response)
Ejemplo n.º 10
0
class JobTest_Application(TestCase):
    def setUp(self):
        self.job = Job(
            title="Vaga 3",
            workplace="Sao Paulo",
            company_name="XPTO",
            company_email = "*****@*****.**",
            description="Job bem maneiro",
            premium=True,
            public=True
        )
        self.user = User.objects.create_user(
            username='******', email='*****@*****.**', password='******')
        self.job.save()

    def test_user_is_not_applied(self):
        application_status = self.job.applied(self.user)
        self.assertEqual(application_status, False)

    def test_user_is_not_applied(self):
        self.job.apply(self.user)
        application_status = self.job.applied(self.user)
        self.assertEqual(application_status, True)
Ejemplo n.º 11
0
class JobTest_01(TestCase):
    def setUp(self):
        self.job = Job(
            title="Vaga 1",
            workplace="Sao Paulo",
            company_name="XPTO",
            application_link = "http://www.xpto.com.br/apply",
            company_email = "*****@*****.**",
            description="Job bem maneiro"
        )
        self.job.save()

    def test_job_created(self):
        self.assertTrue(Job.objects.exists())

    def test_job_created_at(self):
        self.assertIsInstance(self.job.created_at, datetime)

    def test_job_str(self):
        self.assertEqual(str(self.job), "Vaga 1")

    def test_job_application_link(self):
        self.assertEqual(str(self.job.get_application_link()), "http://www.xpto.com.br/apply")
Ejemplo n.º 12
0
class HomeJobsViewsTest(TestCase):
    def setUp(self):
        self.job = Job(title="Vaga 1",
                       workplace="Sao Paulo",
                       company_name="XPTO",
                       application_link="http://www.xpto.com.br/apply",
                       company_email="*****@*****.**",
                       description="Job bem maneiro")
        self.job.save()
        self.home_page = resolve('/')
        self.request = HttpRequest()
        self.home_page_html = index(self.request).content.decode('utf-8')

    def test_job_is_in_websites_home(self):
        self.assertEqual(self.home_page.func, index)

    def test_job_in_home(self):
        job_title = str(self.job)
        self.assertTrue(job_title in self.home_page_html)

    def test_job_url_is_in_home(self):
        job_url = "/job/{}/".format(str(self.job.pk))
        self.assertTrue(job_url in self.home_page_html)
Ejemplo n.º 13
0
class JobDetailsViewTest(TestCase):
    def setUp(self):
        self.job = Job(
            title="Vaga 1",
            workplace="Sao Paulo",
            company_name="XPTO",
            application_link="http://www.xpto.com.br/apply",
            company_email="*****@*****.**",
            description="Job bem maneiro",
            requirements="Job bem maneiro",
        )
        self.job.save()
        self.job_request = HttpRequest()
        self.job_view_html = job_view(self.job_request, self.job.pk)\
            .content.decode('utf-8')

    def test_job_details_view(self):
        self.assertTrue(self.job.title in self.job_view_html)
        self.assertTrue(self.job.workplace in self.job_view_html)
        self.assertTrue(self.job.company_name in self.job_view_html)
        self.assertTrue(self.job.application_link in self.job_view_html)
        self.assertTrue(self.job.description in self.job_view_html)
        self.assertTrue(self.job.requirements in self.job_view_html)
Ejemplo n.º 14
0
class JobTests(APITestCase):
	"""
	Test Job model.
	"""
	def setUp(self):
		"""
		Initialize variables.
		"""
		self.created_by = create_user()
		self.organisation = Organisation.objects.create(
			user=self.created_by,
			name='Big Company',
			description='We are everywhere!'
		)
		self.category = JobCategory.objects.create(
			category='Engineering'
		)
		self.title = 'Software Engineering Lead'
		self.description = 'We are excited to ...'
		self.allow_comments = True
		self.start_accepting_applications_at = timezone.now()
		self.stop_accepting_applications_at = timezone.now() + timedelta(days=30)
		self.employment_term = 'Full Term'
		self.seniority_level = 'Mid Level'
		self.location = 'Nairobi'
		self.job = Job(
			created_by=self.created_by,
			organisation=self.organisation,
			category=self.category,
			title=self.title,
			description=self.description,
			allow_comments=self.allow_comments,
			start_accepting_applications_at=self.start_accepting_applications_at,
			stop_accepting_applications_at=self.stop_accepting_applications_at,
			employment_term=self.employment_term,
			seniority_level=self.seniority_level,
			location=self.location
		)

	def test_can_create_job(self):
		"""
		Test if a job instance is created successfully,
		with all fields provided.
		"""
		self.job.save()
		job_instance = Job.objects.get(pk=1)
		self.assertEqual(
			job_instance.created_by,
			self.created_by,
			"created_by fields don't match."
		)
		self.assertEqual(
			job_instance.organisation,
			self.organisation,
			"organisation fields don't match."
		)
		self.assertEqual(
			job_instance.category,
			self.category,
			"category fields don't match."
		)
		self.assertEqual(
			job_instance.title,
			self.title,
			"title fields don't match."
		)
		self.assertEqual(
			job_instance.description,
			self.description,
			"description fields don't match."
		)
		self.assertEqual(
			job_instance.allow_comments,
			self.allow_comments,
			"allow_comments fields don't match."
		)
		self.assertEqual(
			job_instance.start_accepting_applications_at,
			self.start_accepting_applications_at,
			"start_accepting_applications_at fields don't match."
		)
		self.assertEqual(
			job_instance.stop_accepting_applications_at,
			self.stop_accepting_applications_at,
			"stop_accepting_applications_at fields don't match."
		)
		self.assertEqual(
			job_instance.employment_term,
			self.employment_term,
			"employment_term fields don't match."
		)
		self.assertEqual(
			job_instance.seniority_level,
			self.seniority_level,
			"seniority_level fields don't match."
		)
		self.assertEqual(
			job_instance.location,
			self.location,
			"location fields don't match."
		)
Ejemplo n.º 15
0
import random
setup_environ(settings)

from core.models import Job

def get_month_range(date):
    year = date.year
    month = date.month
    first = datetime(year, month, 1)
    last = first + relativedelta(months = 1) - relativedelta(days=1)
    last = datetime(last.year, last.month, last.day, 23, 59, 59)
    return first, last

date = datetime(2011, 01, 01).replace(tzinfo=utc)
for i in range(0,20000):
    job = Job()
    job.name = 'foo'
    job.user_id = 1
    job.application_id = 1
    job.status = 'C'
    create = date + relativedelta(hours=random.uniform(0,17520)) # two years
    start = create + relativedelta(hours=random.uniform(0,6))
#    end = start + relativedelta(hours=random.gauss(12,8)) # 12 hours, 8 hours
    end = start + relativedelta(hours=random.gauss(360,15)) # 15 days, 10 days

    job.create_time = create
    job.start_time = start
    job.end_time = end
    job.save()
    print "done."
Ejemplo n.º 16
0
            try:
                po = pofile(filename,
                            autodetect_encoding=True,
                            encoding='utf-8')
                populate_db(po, job.language, job.package)
            except Exception, e:
                logging.error("Failed to open po file %s for %s" %
                              (job.package.name, job.language.short_name))
                logging.error("Error: %s" % str(e))

        except Exception, e:
            logging.error("Failed to download the file located on %s" % url)
            logging.error("Error: %s" % str(e))
        finally:
            # Extract what we need from the "old" job
            package = job.package
            language = job.language
            # Delete this job...
            logging.info(job.update_on)
            job.delete()
            logging.info("Job has been deleted.")
            # ... and create a new one, put it at the end of queue.
            try:
                job = Job.objects.get(language=language, package=package)
            except Job.DoesNotExist:
                job = Job(language=language, package=package)
                job.save()

            logging.info("New job has been created.")
            logging.info(job.update_on)