コード例 #1
0
def send_admin_review_email(job, sender=None):
    """Sends a notification to the admin to review the new/updated job listing.

    :param job: A `Job` instance.
    :param sender: The A string (of length 10) to attach to the email sender.

    """
    recipient = settings.MAIL_ADMIN_RECIPIENT

    probable_update = job.created + timedelta(minutes=5) < now()
    new_or_update = 'newly updated' if probable_update else 'brand new'

    # Some copy-paste convenience in the email...
    script_path = os.path.join(settings.ROOT, 'scripts', 'management')

    context = {
        'job': job,
        'html2text': html2text,
        'new_or_update': new_or_update,
        'script_path': script_path
    }

    if sender is None:
        sender = DEFAULT_SENDER

    logger.info(u"Sending admin review email for job listing ({}).".format(
        job.id))
    send_email_template('review', context, [recipient], sender=sender)
コード例 #2
0
ファイル: functions.py プロジェクト: hackcyprus/jobber
def send_admin_review_email(job, sender=None):
    """Sends a notification to the admin to review the new/updated job listing.

    :param job: A `Job` instance.
    :param sender: The A string (of length 10) to attach to the email sender.

    """
    recipient = settings.MAIL_ADMIN_RECIPIENT

    probable_update = job.created + timedelta(minutes=5) < now()
    new_or_update = 'newly updated' if probable_update else 'brand new'

    # Some copy-paste convenience in the email...
    script_path = os.path.join(settings.ROOT, 'scripts', 'management')

    context = {
        'job': job,
        'html2text': html2text,
        'new_or_update': new_or_update,
        'script_path': script_path
    }

    if sender is None:
        sender = DEFAULT_SENDER

    logger.info(u"Sending admin review email for job listing ({}).".format(job.id))
    send_email_template('review', context, [recipient], sender=sender)
コード例 #3
0
ファイル: test_models.py プロジェクト: hackcyprus/jobber
def test_category_model(session):
    name = u'foo bar'
    category = Category(name=name)
    assert category.name == name
    assert category.slug == u'foo-bar'
    assert category.created <= now()

    category = Category(name=name, slug=u'forced')
    assert category.name == name
    assert category.slug == u'forced'
    assert category.created <= now()

    session.add(category)
    session.commit()

    assert category.id > 0
    assert category.name == name
    assert category.created <= now()
コード例 #4
0
ファイル: test_models.py プロジェクト: hackcyprus/jobber
def test_tag_model(session):
    tag_name = u'foo bar'
    tag = Tag(tag=tag_name)

    session.add(tag)
    session.commit()

    assert tag.tag == tag_name
    assert tag.slug == u'foo-bar'
    assert tag.created <= now()
コード例 #5
0
ファイル: test_models.py プロジェクト: hackcyprus/jobber
def test_location_model(location, session):
    # Commit session for `location` fixture to be persisted.
    session.add(location)
    session.commit()

    assert location.id > 0
    assert location.city == u'Lïmásѕ߀ɭ'
    assert location.country_name == 'Cyprus'
    assert location.country_code == 'CYP'
    assert location.created <= now()

    # Check if we get `arrow` dates back.
    assert type(location.created) is Arrow
コード例 #6
0
ファイル: test_models.py プロジェクト: hackcyprus/jobber
def test_company_model(company, session):
    # Commit session for `company` fixture to be persisted.
    session.add(company)
    session.commit()

    name = u'remedica'
    assert company.id > 0
    assert company.website is None
    assert company.slug == normalize('NFKD', name)
    assert company.created <= now()

    # Check if we get `arrow` dates back.
    assert type(company.created) is Arrow
コード例 #7
0
ファイル: backup.py プロジェクト: hackcyprus/jobber
def main(session):
    dropbox = DropboxClient(settings.DROPBOX_OAUTH_TOKEN)

    dburi = settings.SQLALCHEMY_DATABASE_URI
    dbpath = dburi.replace('sqlite:////', '')

    env = 'production' if not settings.DEBUG else 'dev'
    filename = 'backup.{}.{}.db'.format(now().format('YYYYMMDDHHmm'), env)

    logger.info('Backup started for {} with filename {}.'.format(dbpath, filename))
    with open(dbpath) as db:
        try:
            response = dropbox.put_file(filename, db)
            rev = response['rev']
            logger.info("Backup complete with revision id {}.".format(rev))
        except ErrorResponse as err:
            code = err.status
            msg = err.error_msg
            logger.error("Backup failed with code {} message '{}'.".format(code, msg))
コード例 #8
0
ファイル: test_models.py プロジェクト: hackcyprus/jobber
def test_job_model(company, location, session):
    title = u'ríbëyé'
    recruiter_name = u'相'
    recruiter_email = u'思'

    job = Job(title=title,
              description=title,
              contact_method=1,
              remote_work=False,
              company=company,
              location=location,
              job_type=1,
              recruiter_name=recruiter_name,
              recruiter_email=recruiter_email)

    session.add(job)
    session.commit()

    assert job.id > 0
    assert not job.published
    assert job.company_id == company.id
    assert job.company.id == company.id
    assert job.location_id == location.id
    assert job.location.id == location.id
    assert job.title == title
    assert job.description == title
    assert job.contact_method == 1
    assert job.job_type == 1
    assert job.slug == normalize('NFKD', title)
    assert str(job.id) in job.url()
    assert job.company.slug in job.url()
    assert 'http' not in job.url()
    assert str(job.id) in job.url(external=True)
    assert job.company.slug in job.url(external=True)
    assert 'http' in job.url(external=True)
    assert str(job.id) in job.edit_url() and job.admin_token in job.edit_url()
    assert job.recruiter_name == recruiter_name
    assert job.recruiter_email == recruiter_email
    assert job.created <= now()

    # Check if we get `arrow` dates back.
    assert type(job.created) is Arrow
コード例 #9
0
def main(session):
    dropbox = DropboxClient(settings.DROPBOX_OAUTH_TOKEN)

    dburi = settings.SQLALCHEMY_DATABASE_URI
    dbpath = dburi.replace('sqlite:////', '')

    env = 'production' if not settings.DEBUG else 'dev'
    filename = 'backup.{}.{}.db'.format(now().format('YYYYMMDDHHmm'), env)

    logger.info('Backup started for {} with filename {}.'.format(
        dbpath, filename))
    with open(dbpath) as db:
        try:
            response = dropbox.put_file(filename, db)
            rev = response['rev']
            logger.info("Backup complete with revision id {}.".format(rev))
        except ErrorResponse as err:
            code = err.status
            msg = err.error_msg
            logger.error("Backup failed with code {} message '{}'.".format(
                code, msg))
コード例 #10
0
ファイル: broadcast.py プロジェクト: hackcyprus/jobber
def main(session):
    logger.info('Selecting candidates for broadcast.')

    threshold = settings.BROADCAST_EXPIRY_THRESHOLD_DAYS
    services = settings.ZAPIER_WEBHOOKS.keys()

    selection = []

    for job in session.query(Job).filter_by(published=True):
        broadcasts = session.query(SocialBroadcast)\
                     .filter_by(job=job, success=True)\
                     .order_by(SocialBroadcast.created.desc())\
                     .all()

        if not broadcasts:
            logger.debug(
                "Selecting job ({}) because it has not been "
                "broadcasted before.".format(job.id)
            )
            selection.append(job)
            continue

        diff = (now() - broadcasts[0].created).days
        if diff >= threshold:
            logger.debug(
                "Selecting job ({}) because it has not been "
                "successfully broadcasted for {} days.".format(job.id, threshold)
            )
            selection.append(job)
            continue

        logger.debug("Skipping job ({}) for broadcasting.".format(job.id))

    logger.info("Selected {} candidates for broadcast.".format(len(selection)))

    for selected in selection:
        for service in services:
            sb = social_broadcast(selected, service)
            session.add(sb)
            session.commit()
コード例 #11
0
def main(session):
    logger.info('Selecting candidates for broadcast.')

    threshold = settings.BROADCAST_EXPIRY_THRESHOLD_DAYS
    services = settings.ZAPIER_WEBHOOKS.keys()

    selection = []

    for job in session.query(Job).filter_by(published=True):
        broadcasts = session.query(SocialBroadcast)\
                     .filter_by(job=job, success=True)\
                     .order_by(SocialBroadcast.created.desc())\
                     .all()

        if not broadcasts:
            logger.debug("Selecting job ({}) because it has not been "
                         "broadcasted before.".format(job.id))
            selection.append(job)
            continue

        diff = (now() - broadcasts[0].created).days
        if diff >= threshold:
            logger.debug("Selecting job ({}) because it has not been "
                         "successfully broadcasted for {} days.".format(
                             job.id, threshold))
            selection.append(job)
            continue

        logger.debug("Skipping job ({}) for broadcasting.".format(job.id))

    logger.info("Selected {} candidates for broadcast.".format(len(selection)))

    for selected in selection:
        for service in services:
            sb = social_broadcast(selected, service)
            session.add(sb)
            session.commit()
コード例 #12
0
 def use(self):
     self.used = True
     self.used_at = now()
コード例 #13
0
 def __init__(self, *args, **kwargs):
     if self.created is None:
         self.created = now()
     super(BaseModel, self).__init__(*args, **kwargs)
コード例 #14
0
ファイル: models.py プロジェクト: hackcyprus/jobber
 def use(self):
     self.used = True
     self.used_at = now()
コード例 #15
0
ファイル: models.py プロジェクト: hackcyprus/jobber
 def __init__(self, *args, **kwargs):
     if self.created is None:
         self.created = now()
     super(BaseModel, self).__init__(*args, **kwargs)