Beispiel #1
0
    def login(self, request):
        if self.is_valid():
            login(request, self.user)

            messages.add_message(
                request, messages.SUCCESS,
                _(
                    u"Hello %(first_name)s %(last_name)s, you've successfully logged in."
                    % {
                        'first_name': self.user.first_name
                        or self.user.username,
                        'last_name': self.user.last_name
                    }))
            if settings.SHOW_UPDATE_ALERT and request.user.is_superuser:
                latest_version = get_latest_version()
                if version != latest_version:
                    messages.add_message(
                        request, messages.WARNING,
                        _("URGENT - your Tendenci version is out of date. Please upgrade immediately. For instructions, please check the docs at https://tendenci.readthedocs.io/en/latest/index.html"
                          ))

            remember = (self.remember_default if self.hide_remember_me else
                        self.cleaned_data['remember'])
            if remember:
                request.session.set_expiry(settings.SESSION_COOKIE_AGE)
            else:
                request.session.set_expiry(0)
            return True
        return False
Beispiel #2
0
def update_tendenci(request, template_name="base/update.html"):
    from tendenci.apps.base.utils import get_latest_version

    if request.method == "POST":
        tos = request.POST.get('tos')

        if tos:
            subprocess.Popen([python_executable(), "manage.py", "auto_update",
                             "--user_id=%s" % request.user.id])
            return redirect('update_tendenci.confirmation')

    return render_to_resp(request=request, template_name=template_name, context={
        'latest_version': get_latest_version(),
        'version': version,
    })
Beispiel #3
0
def update_tendenci(request, template_name="base/update.html"):
    from tendenci.apps.base.utils import get_latest_version

    if request.method == "POST":
        tos = request.POST.get('tos')

        if tos:
            SubProcessManager.set_process([python_executable(), "manage.py", "auto_update",
                                            "--user_id=%s" % request.user.id])
            return redirect('update_tendenci.confirmation')

    return render_to_response(template_name, {
        'latest_version': get_latest_version(),
        'version': version,
    }, context_instance=RequestContext(request))
Beispiel #4
0
def update_tendenci(request, template_name="base/update.html"):
    from tendenci.apps.base.utils import get_latest_version

    if request.method == "POST":
        tos = request.POST.get('tos')
        
        if tos:
            SubProcessManager.set_process(["python", "manage.py", "auto_update",
                                            "--user_id=%s" % request.user.id])
            return redirect('update_tendenci.confirmation')

    return render_to_response(template_name, {
        'latest_version': get_latest_version(),
        'version': version,
    }, context_instance=RequestContext(request))
Beispiel #5
0
    def handle(self, *args, **options):
        from tendenci.apps.site_settings.utils import get_setting
        from tendenci import __version__ as version
        from tendenci.apps.base.utils import get_latest_version

        verbosity = int(options['verbosity'])
        user_id = options['user_id']
        if user_id:
            [request_user] = User.objects.filter(pk=user_id)[:1] or [None]
        else:
            request_user = None
        site_url = get_setting('site', 'global', 'siteurl')

        # check what tendenci version we're on
        major_bit = int(version.split('.')[0])
        if major_bit < 7:
            if verbosity > 1:
                print("No update for this version {}.".format(version))
                print(
                    "Please consider to upgrade https://tendenci.readthedocs.org/en/latest/"
                )
            return

        project_root = settings.PROJECT_ROOT
        err_list = []

        # check the latest version
        latest_version = get_latest_version()
        if int(latest_version.split('.')[0]) < 7 or version == latest_version:
            # STOP - NO UPDATE
            return
        if verbosity > 1:
            print("Latest version: {}".format(latest_version))
            print("Your version: {}".format(version))
            print("Start updating...")

        # update some files - deploy.py, requirements/tendenci.txt
        files_to_update = {
            'deploy.py':
            'https://raw.githubusercontent.com/tendenci/tendenci-project-template/master/deploy.py',
            'requirements/tendenci.txt':
            'https://raw.githubusercontent.com/tendenci/tendenci-project-template/master/requirements/tendenci.txt'
        }
        for key, value in files_to_update.items():
            try:
                subprocess.check_output('curl {0} > {1}/{2}'.format(
                    value, project_root, key),
                                        stderr=subprocess.STDOUT,
                                        shell=True)
            except subprocess.CalledProcessError as e:
                err_list.append(e.output)

        # update tendenci
        if not err_list:
            try:
                if verbosity > 1:
                    print("Updating tendenci...")
                update_cmd = '{0} -m pip install -r {1}/{2} --upgrade'.format(
                    python_executable(), project_root,
                    'requirements/tendenci.txt')
                subprocess.check_output('cd {}; {}'.format(
                    project_root, update_cmd),
                                        stderr=subprocess.STDOUT,
                                        shell=True)
            except subprocess.CalledProcessError as e:
                err_list.append(e.output)

        if not err_list:
            # run migrate, collectstatic, etc via deploy.py
            try:
                subprocess.check_output("cd {0}; {1} manage.py migrate".format(
                    latest_version, python_executable()),
                                        stderr=subprocess.STDOUT,
                                        shell=True)
            except subprocess.CalledProcessError as e:
                known_error = "BadMigrationError: Migrated app 'djcelery' contains South migrations"
                known_error2 = 'relation "djcelery_crontabschedule" already exists'
                if known_error in e.output or known_error2 in e.output:
                    try:
                        subprocess.check_output(
                            "cd {0}; {1} manage.py migrate djcelery 0001 --fake"
                            .format(latest_version, python_executable()),
                            stderr=subprocess.STDOUT,
                            shell=True)
                        subprocess.check_output(
                            "cd {0}; {1} manage.py migrate".format(
                                latest_version, python_executable()),
                            stderr=subprocess.STDOUT,
                            shell=True)
                    except subprocess.CalledProcessError as e:
                        err_list.append(e.output)
        if not err_list:
            # run deploy.py
            try:
                subprocess.check_output("cd {0}; {1} deploy.py".format(
                    latest_version, python_executable()),
                                        stderr=subprocess.STDOUT,
                                        shell=True)
            except subprocess.CalledProcessError as e:
                err_list.append(e.output)

        if not err_list:
            if verbosity > 1:
                print('Reloading the site...')
            # reload the site.
            # it's a guessing game here - because we don't know what wsgi server the site is behind
            # and how exactly the site was set up
            try:
                subprocess.check_output(
                    "sudo reload %s" % os.path.basename(settings.PROJECT_ROOT),
                    stderr=subprocess.STDOUT,
                    shell=True)
            except subprocess.CalledProcessError as e:
                try:
                    subprocess.check_output(
                        "sudo sv kill tendenci_site && sv start tendenci_site",
                        stderr=subprocess.STDOUT,
                        shell=True)
                except subprocess.CalledProcessError as e:
                    err_list.append(e.output)

        if verbosity > 1:
            if err_list:
                print(
                    'Sorry, updating tendenci is not complete due to the following error(s):\n\n'
                )
                print('\n\n'.join(err_list))
            else:
                print("Update is done.")

        if request_user and request_user.email:
            # notify update is done
            if err_list:
                subject = 'Error on updating tendenci %s' % site_url
                body = 'Error(s) encountered on updating tendenci:\n\n'
                body += '\n\n'.join(err_list)
            else:
                subject = 'Update tendenci is done %s' % site_url
                body = 'Successfully updated tendenci for %s.\n\n' % site_url
                body += 'Tendenci version: %s\n\n' % latest_version
            body += "Thanks!\n%s\n\n" % get_setting('site', 'global',
                                                    'sitedisplayname')

            msg = EmailMessage(subject, body, settings.DEFAULT_FROM_EMAIL,
                               [request_user.email])
            msg.send()
Beispiel #6
0
    def handle(self, *args, **options):
        from tendenci.apps.site_settings.utils import get_setting
        from tendenci import __version__ as version
        from tendenci.apps.base.utils import get_latest_version

        verbosity = int(options['verbosity'])
        user_id = options['user_id']
        if user_id:
            [request_user] = User.objects.filter(pk=user_id)[:1] or [None]
        else:
            request_user = None
        site_url = get_setting('site', 'global', 'siteurl')

        # check what tendenci version we're on
        major_bit = int(version.split('.')[0])
        if major_bit < 7:
            if verbosity >1:
                print("No update for this version {}.".format(version))
                print("Please consider to upgrade https://tendenci.readthedocs.org/en/latest/")
            return

        project_root = settings.PROJECT_ROOT
        err_list = []

        # check the latest version
        latest_version = get_latest_version()
        if int(latest_version.split('.')[0]) < 7 or  version == latest_version:
            # STOP - NO UPDATE
            return
        if verbosity >1:
            print("Latest version: {}".format(latest_version))
            print("Your version: {}".format(version))
            print("Start updating...")

        # update requirements/tendenci.txt
        files_to_update = {'requirements/tendenci.txt': 'https://raw.githubusercontent.com/tendenci/tendenci-project-template/master/requirements/tendenci.txt'}
        for key, value in files_to_update.items():
            try:
                subprocess.check_output('curl {0} > {1}/{2}'.format(value, project_root, key),
                                        stderr=subprocess.STDOUT, shell=True)
            except subprocess.CalledProcessError as e:
                err_list.append(e.output)

        # update tendenci
        if not err_list:
            try:
                if verbosity >1:
                    print("Updating tendenci...")
                update_cmd = '{0} -m pip install -r {1}/{2} --upgrade'.format(python_executable(), project_root, 'requirements/tendenci.txt')
                subprocess.check_output('cd {}; {}'.format(project_root, update_cmd),
                                        stderr=subprocess.STDOUT, shell=True)
            except subprocess.CalledProcessError as e:
                err_list.append(e.output)

        if not err_list:
            # run migrate
            try:
                subprocess.check_output("cd {0}; {1} manage.py migrate".format(latest_version, python_executable()),

                                        stderr=subprocess.STDOUT, shell=True)
            except subprocess.CalledProcessError as e:
                known_error = "BadMigrationError: Migrated app 'djcelery' contains South migrations"
                known_error2 = 'relation "djcelery_crontabschedule" already exists'
                if known_error in e.output or known_error2 in e.output:
                    try:
                        subprocess.check_output("cd {0}; {1} manage.py migrate djcelery 0001 --fake".format(latest_version, python_executable()),
                                            stderr=subprocess.STDOUT, shell=True)
                        subprocess.check_output("cd {0}; {1} manage.py migrate".format(latest_version, python_executable()),
                                            stderr=subprocess.STDOUT, shell=True)
                    except subprocess.CalledProcessError as e:
                        err_list.append(e.output)
        if not err_list:
            # run collectstatic, etc via deploy
            try:
                call_command('deploy')
            except CommandError as e:
                err_list.append(e.output)

        if not err_list:
            if verbosity >1:
                print('Reloading the site...')
            # reload the site.
            # it's a guessing game here - because we don't know what wsgi server the site is behind
            # and how exactly the site was set up
            try:
                subprocess.check_output("sudo reload %s" % os.path.basename(settings.PROJECT_ROOT),
                                        stderr=subprocess.STDOUT, shell=True)
            except subprocess.CalledProcessError as e:
                try:
                    subprocess.check_output("sudo sv kill tendenci_site && sv start tendenci_site",
                                            stderr=subprocess.STDOUT, shell=True)
                except subprocess.CalledProcessError as e:
                    err_list.append(e.output)

        if verbosity >1:
            if err_list:
                print('Sorry, updating tendenci is not complete due to the following error(s):\n\n')
                print('\n\n'.join(err_list))
            else:
                print("Update is done.")

        if request_user and request_user.email:
            # notify update is done
            if err_list:
                subject = 'Error on updating tendenci %s' % site_url
                body = 'Error(s) encountered on updating tendenci:\n\n'
                body += '\n\n'.join(err_list)
            else:
                subject = 'Update tendenci is done %s' % site_url
                body = 'Successfully updated tendenci for %s.\n\n' % site_url
                body += 'Tendenci version: %s\n\n' % latest_version
            body += "Thanks!\n%s\n\n" % get_setting('site', 'global', 'sitedisplayname')

            msg = EmailMessage(subject, body, settings.DEFAULT_FROM_EMAIL, [request_user.email])
            msg.send()