Exemple #1
0
def make_auto_repeat_entry(date=None):
    enqueued_method = 'dataent.desk.doctype.auto_repeat.auto_repeat.create_repeated_entries'
    jobs = get_jobs()

    if not jobs or enqueued_method not in jobs[dataent.local.site]:
        date = date or today()
        for data in get_auto_repeat_entries(date):
            dataent.enqueue(enqueued_method, data=data)
	def sync(self):
		"""Create and execute Data Migration Run for GCalendar Sync plan"""
		dataent.has_permission('GCalendar Settings', throw=True)


		accounts = dataent.get_all("GCalendar Account", filters={'enabled': 1})

		queued_jobs = get_jobs(site=dataent.local.site, key='job_name')[dataent.local.site]
		for account in accounts:
			job_name = 'google_calendar_sync|{0}'.format(account.name)
			if job_name not in queued_jobs:
				dataent.enqueue('dataent.integrations.doctype.gcalendar_settings.gcalendar_settings.run_sync', queue='long', timeout=1500, job_name=job_name, account=account)
				time.sleep(5)
Exemple #3
0
def enqueue_events_for_all_sites():
    '''Loop through sites and enqueue events that are not already queued'''

    if os.path.exists(os.path.join('.', '.restarting')):
        # Don't add task to queue if webserver is in restart mode
        return

    with dataent.init_site():
        jobs_per_site = get_jobs()
        sites = get_sites()

    for site in sites:
        try:
            enqueue_events_for_site(site=site, queued_jobs=jobs_per_site[site])
        except:
            # it should try to enqueue other sites
            print(dataent.get_traceback())
Exemple #4
0
def schedule_files_backup(user_email):
    from dataent.utils.background_jobs import enqueue, get_jobs
    queued_jobs = get_jobs(site=dataent.local.site, queue="long")
    method = 'dataent.desk.page.backups.backups.backup_files_and_notify_user'

    if method not in queued_jobs[dataent.local.site]:
        enqueue(
            "dataent.desk.page.backups.backups.backup_files_and_notify_user",
            queue='long',
            user_email=user_email)
        dataent.msgprint(
            _("Queued for backup. You will receive an email with the download link"
              ))
    else:
        dataent.msgprint(
            _("Backup job is already queued. You will receive an email with the download link"
              ))
Exemple #5
0
def trigger(site, event, last=None, queued_jobs=(), now=False):
    """Trigger method in hooks.scheduler_events."""

    queue = 'long' if event.endswith('_long') else 'short'
    timeout = queue_timeout[queue]
    if not queued_jobs and not now:
        queued_jobs = get_jobs(site=site, queue=queue)

    if dataent.flags.in_test:
        dataent.flags.ran_schedulers.append(event)

    events_from_hooks = get_scheduler_events(event)
    if not events_from_hooks:
        return

    events = events_from_hooks
    if not now:
        events = []
        if event == "cron":
            for e in events_from_hooks:
                e = cron_map.get(e, e)
                if croniter.is_valid(e):
                    if croniter(e, last).get_next(
                            datetime) <= dataent.utils.now_datetime():
                        events.extend(events_from_hooks[e])
                else:
                    dataent.log_error("Cron string " + e + " is not valid",
                                      "Error triggering cron job")
                    dataent.logger(__name__).error(
                        'Exception in Trigger Events for Site {0}, Cron String {1}'
                        .format(site, e))

        else:
            if croniter(
                    cron_map[event],
                    last).get_next(datetime) <= dataent.utils.now_datetime():
                events.extend(events_from_hooks)

    for handler in events:
        if not now:
            if handler not in queued_jobs:
                enqueue(handler, queue, timeout, event)
        else:
            scheduler_task(site=site, event=event, handler=handler, now=True)
Exemple #6
0
def pull(now=False):
	"""Will be called via scheduler, pull emails from all enabled Email accounts."""
	if dataent.cache().get_value("workers:no-internet") == True:
		if test_internet():
			dataent.cache().set_value("workers:no-internet", False)
		else:
			return
	queued_jobs = get_jobs(site=dataent.local.site, key='job_name')[dataent.local.site]
	for email_account in dataent.get_list("Email Account",
		filters={"enable_incoming": 1, "awaiting_password": 0}):
		if now:
			pull_from_email_account(email_account.name)

		else:
			# job_name is used to prevent duplicates in queue
			job_name = 'pull_from_email_account|{0}'.format(email_account.name)

			if job_name not in queued_jobs:
				enqueue(pull_from_email_account, 'short', event='all', job_name=job_name,
					email_account=email_account.name)