Search code examples
python-3.xjira

loop to check for issues


i have this small program to assign issues to me, it works great on pycharm but when i compile it to exe with pyintaller it closes after the first run, ignoring the time.sleep and running again creating a loop to check for issues every 5 seconds.

why is that? how can i fix it?

import time
import winsound
from jira import JIRA

global lst_ignore
issue_var = ""
lst_ignore = []

def jira_login():
    global user,token
    user = 'user@cloud.com'
    token = 'kj432hj43214YMzCyMLOe7682'

    try:
        options = {'server': 'https://cloud.atlassian.net'}
        global jira
        jira = JIRA(options=options, basic_auth=(user, token))



    except Exception as e:
         jira = ""
         if '401' in str(e):
            print("Login to JIRA failed. Check your username and password",e)

    return jira


def check_issue():
    jira_login()
    size = 100000
    start = 0 * 100000

    search_query = 'status not in (Done, Closed,Canceled) and assignee is EMPTY and project = "Success" and reporter not in (57f778:f48131cb-b67d-43c7-b30d-2b58d98bd077)'

    issues = jira.search_issues(search_query, start, size)

    for issue in issues:
        if issue not in lst_ignore:
            winsound.Beep(2000, 1000)
            issue.update(assignee={'accountId': '60f1d072a0de61930ad83770'})
            print(issue, " : assinged to you!")
            lst_ignore.append(issue)
   


def check():
    check_issue()
    time.sleep(5)
    check()



if __name__ == '__main__':
    check()

Solution

  • NEW ANSWER:___________________________________________________

    (New info obtained from comment) If it says you don't have the module when running from the console, but it does from Pycharm, you probably have 2 different Interpreters. There are two steps you must take.

    1. Using the terminal run: pip install jira
    2. If it says it is already installed, uninstall using pip, and then reinstall.

    Good Luck!

    OLD ANSWER:____________________________________________________

    It is hard to say. One thing I can tell you is that a recursive function is almost never a good idea.

    So instead of:

    def check():
        check_issue()
        time.sleep(5)
        check()
    
    
    if __name__ == '__main__':
        check()
    

    Try the following aproach:

    RUNNING = True
    def main():
        while RUNNING:
            check_issue()
            time.sleep(5)
    
    
    if __name__ == '__main__':
        main()
    

    After that you can implement that if some condition is met, it wil change the RUNNING constant to exit the program. Or, if it is a console-run program, then just use a keyboard-interrupt