added blog on registration and authentication in django using loginra…

…dius

Checklist

Please note that in case of below checklist not updated accordingly, the maintainers have the right to immediately close your pull request.

[x] You created a branch from dev branch.
[x] You PR is raised on dev branch and not onmaster.
[x] Blog follows Blog Guidelines.
[x] You have read the Contribution Guidlines before creating this PR.
[x] Checked for any duplicate blog entry.
[x] Checked for all grammatical errors in the blog.
[x] You have not published the blog content anywhere else on the internet on platforms like medium, dev.to etc.
[x] The content is not copy-pasted from anywhere else on the Internet.

Description of change

Author Details for Blog Post Entry

id: Taminoturoko Briggs
bio: An enthusiastic software developer conversant with Python and JavaScript.
github: https://github.com/Tammibriggs
stackoverflow: https://stackoverflow.com/users/15485047/tammibriggs?tab=topactivity
linkedin: https://www.linkedin.com/in/taminoturoko-briggs-b98251203/

Hi,
I have made the suggested changes.
Regards,
Taminoturoko Briggs.
On Fri, Jul 23, 2021, 8:22 AM Raghunath Reddy @.***>
wrote:

@.**** requested changes on this pull request.
Hi @Tammibriggs https://github.com/Tammibriggs
We have made suggestions to improve the article. Please review them and
make the necessary changes.
Thank you,
@raghunath-r-a https://github.com/raghunath-r-a
In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675322807
:

@@ -0,0 +1,522 @@

+---
+title: "Registration and Authentication in Django using LoginRadius"
+date: "2021-7-21"
+coverImage: "coverImage.png"
+author: "Taminoturoko Briggs"
+tags: "Django, auth"
⬇ Suggested change
-tags: "Django, auth"
+tags: "Django, Authentication, User Registration"

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675323476
:

@@ -0,0 +1,522 @@

+---
+title: "Registration and Authentication in Django using LoginRadius"
+date: "2021-7-21"
+coverImage: "coverImage.png"
+author: "Taminoturoko Briggs"
+tags: "Django, auth"
+description: "In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius"
⬇ Suggested change
-description: "In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius"
+description: "In this tutorial, you will learn how to implement user registration and authentication in Django using LoginRadius"

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675323755
:

+# Registration and Authentication in Django using LoginRadius

+In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius
⬇ Suggested change
-# Registration and Authentication in Django using LoginRadius
-In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675324359
:

@@ -0,0 +1,522 @@

+---
+title: "Registration and Authentication in Django using LoginRadius"
+date: "2021-7-21"
+coverImage: "coverImage.png"
+author: "Taminoturoko Briggs"
+tags: "Django, auth"
+description: "In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius"
+---

+# Registration and Authentication in Django using LoginRadius
+In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius

+## Prerequisite

+To follow up on this tutorial, you should be familiar with Python and Django a python framework.
⬇ Suggested change
-To follow up on this tutorial, you should be familiar with Python and Django a python framework.
+You should be familiar with Python and Django, a Python framework.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675325204
:

+coverImage: "coverImage.png"

+author: "Taminoturoko Briggs"
+tags: "Django, auth"
+description: "In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius"
+---

+# Registration and Authentication in Django using LoginRadius
+In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius

+## Prerequisite

+To follow up on this tutorial, you should be familiar with Python and Django a python framework.

+## Overview

+We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius
⬇ Suggested change
-We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius
+First, we briefly introduce LoginRadius, what it is. and some benefits of using it; then, will move over to see how to implement user registration and authentication in Django using LoginRadius.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675325405
:

+---

+# Registration and Authentication in Django using LoginRadius
+In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius

+## Prerequisite

+To follow up on this tutorial, you should be familiar with Python and Django a python framework.

+## Overview

+We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius

+## Introduction

+What is LoginRadius
⬇ Suggested change
-What is LoginRadius
+What is LoginRadius?

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675327764
:

+In this tutorial you will learn how to implement user registration and authentication in Django using loginRadius

+## Prerequisite

+To follow up on this tutorial, you should be familiar with Python and Django a python framework.

+## Overview

+We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius

+## Introduction

+What is LoginRadius

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.
⬇ Suggested change
-> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.
+LoginRadius is a SaaS-based CIAM platform. It offers simplified, robust features to manage customer identity, privacy, and access -- allowing developers and businesses to provide a seamless and secure digital experience for their customers.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675328359
:

+## Prerequisite

+To follow up on this tutorial, you should be familiar with Python and Django a python framework.

+## Overview

+We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius

+## Introduction

+What is LoginRadius

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.

+The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.
⬇ Suggested change
-The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.
+The developer-friendly CIAM provides a comprehensive set of APIs for registration, authentication, identity verification, single sign-on (SSO), and more.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675328993
:

+To follow up on this tutorial, you should be familiar with Python and Django a python framework.

+## Overview

+We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius

+## Introduction

+What is LoginRadius

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.

+The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.

+Benefits of using LoginRadius
⬇ Suggested change
-Benefits of using LoginRadius
+Why should we use LoginRadius?

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675329494
:

+## Overview

+We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius

+## Introduction

+What is LoginRadius

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.

+The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.

+Benefits of using LoginRadius

+- It provides scalable infrastructure.
⬇ Suggested change
-- It provides scalable infrastructure.
+- Dynamically scales to accommodate user growth.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675329859
:

+We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius

+## Introduction

+What is LoginRadius

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.

+The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.

+Benefits of using LoginRadius

+- It provides scalable infrastructure.
+- It provides  security of data and accounts.
⬇ Suggested change
-- It provides  security of data and accounts.
+- Offers built-in security features to enhance user account security and manage user data securely.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675330159
:

+We will start by giving a brief introduction to LoginRadius, what it is and some benefits of using LoginRadius, then will move over to see how we can implement user Registration and authentication in Django using LoginRadius

+## Introduction

+What is LoginRadius

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.

+The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.

+Benefits of using LoginRadius

+- It provides scalable infrastructure.
+- It provides  security of data and accounts.
+- Compliance with pricacy regulations.
⬇ Suggested change
-- Compliance with pricacy regulations.
+- Built-in features that help achieve compliance with privacy regulations.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675330644
:

+## Introduction

+What is LoginRadius

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.

+The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.

+Benefits of using LoginRadius

+- It provides scalable infrastructure.
+- It provides  security of data and accounts.
+- Compliance with pricacy regulations.
+- It provides advanced login options.
⬇ Suggested change
-- It provides advanced login options.
+- Advanced login options like Social SSO and Passwordless Login to enhance user expereince.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675331682
:

+What is LoginRadius

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.

+The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.

+Benefits of using LoginRadius

+- It provides scalable infrastructure.
+- It provides  security of data and accounts.
+- Compliance with pricacy regulations.
+- It provides advanced login options.

+These are just some of the benefits of using LoingRadius.
⬇ Suggested change
-These are just some of the benefits of using LoingRadius.
+LoginRadius offers many more benefits than above. You can learn more here.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675332804
:

+> LoginRadius is SaaS based CIAM platform that manages consumer identity and privacy, allowing businesses to customize a secure digital experience their consumers will love.

+The developer-friendly Identity Platform provides a comprehensive set of APIs to enable registration, authentication, identity verification, single sign-on and more.

+Benefits of using LoginRadius

+- It provides scalable infrastructure.
+- It provides  security of data and accounts.
+- Compliance with pricacy regulations.
+- It provides advanced login options.

+These are just some of the benefits of using LoingRadius.

+## Getting started

+To get started with LoginRadius, you have to first Create an account if you don't have one yet, then login to your LoginRadius dashboard.
⬇ Suggested change
-To get started with LoginRadius, you have to first Create an account if you don't have one yet, then login to your LoginRadius dashboard.
+To get started with LoginRadius, you have to first create a free developer account.

+If you already have an account, log into your LoginRadius dashboard.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675333410
:

+- Compliance with pricacy regulations.

+- It provides advanced login options.

+These are just some of the benefits of using LoingRadius.

+## Getting started

+To get started with LoginRadius, you have to first Create an account if you don't have one yet, then login to your LoginRadius dashboard.
+You will see a page like this:

+

+When you create an account, LoginRadius sets up a free app for you. This is the app we are going to integrate with Django. Here my app name is "tammibriggs".
+Click on your app and you will see a page like this:
⬇ Suggested change
-Click on your app and you will see a page like this:

+Click on your app, and you will see a page like this:

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675334287
:

+To get started with LoginRadius, you have to first Create an account if you don't have one yet, then login to your LoginRadius dashboard.
+You will see a page like this:

+

+When you create an account, LoginRadius sets up a free app for you. This is the app we are going to integrate with Django. Here my app name is "tammibriggs".
+Click on your app and you will see a page like this:

+

+There is one more thing LoginRadius authomatically creates for your, an Auth Page (IDX). This is a ready-to-use web page where features like Email and Password login, User registration, Forgot password, and Remember me, have already been implemented for you. We will utilize this web page for registration and authentication requirements in our Django application. Auth Page (IDX) reflects the configuration changes that you make in LoginRadius Dashboard. There is also room for customization, you can read more about that here: Auth Page (IDX) customization.
⬇ Suggested change
-There is one more thing LoginRadius authomatically creates for your, an Auth Page (IDX). This is a ready-to-use web page where features like Email and Password login, User registration, Forgot password, and Remember me, have already been implemented for you. We will utilize this web page for registration and authentication requirements in our Django application. Auth Page (IDX) reflects the configuration changes that you make in LoginRadius Dashboard. There is also room for customization, you can read more about that here: Auth Page (IDX) customization.
+There is one more thing LoginRadius automatically creates for you: an Auth Page (IDX). This is a ready-to-use web page where features -- like Email and Password login, User registration, Forgot password, and Remember me -- have already been implemented. We will utilize this web page for registration and authentication requirements in our Django application. Auth Page (IDX) reflects the configuration changes that you can make in LoginRadius Dashboard. There is also room for customization, you can read more about that here: Auth Page (IDX) customization.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675335230
:

+You will see a page like this:

+

+When you create an account, LoginRadius sets up a free app for you. This is the app we are going to integrate with Django. Here my app name is "tammibriggs".
+Click on your app and you will see a page like this:

+

+There is one more thing LoginRadius authomatically creates for your, an Auth Page (IDX). This is a ready-to-use web page where features like Email and Password login, User registration, Forgot password, and Remember me, have already been implemented for you. We will utilize this web page for registration and authentication requirements in our Django application. Auth Page (IDX) reflects the configuration changes that you make in LoginRadius Dashboard. There is also room for customization, you can read more about that here: Auth Page (IDX) customization.

+At this point we know what LoginRadius is, its benefits and how you can get started with LoginRadius. Now that we know all that, let’s see how we can integrate LoginRadius with a Django application.
⬇ Suggested change
-At this point we know what LoginRadius is, its benefits and how you can get started with LoginRadius. Now that we know all that, let’s see how we can integrate LoginRadius with a Django application.
+At this point, we know what LoginRadius is, its benefits, and how to get started with LoginRadius. Let’s see how to integrate LoginRadius with a Django application.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675335688
:

+

+When you create an account, LoginRadius sets up a free app for you. This is the app we are going to integrate with Django. Here my app name is "tammibriggs".
+Click on your app and you will see a page like this:

+

+There is one more thing LoginRadius authomatically creates for your, an Auth Page (IDX). This is a ready-to-use web page where features like Email and Password login, User registration, Forgot password, and Remember me, have already been implemented for you. We will utilize this web page for registration and authentication requirements in our Django application. Auth Page (IDX) reflects the configuration changes that you make in LoginRadius Dashboard. There is also room for customization, you can read more about that here: Auth Page (IDX) customization.

+At this point we know what LoginRadius is, its benefits and how you can get started with LoginRadius. Now that we know all that, let’s see how we can integrate LoginRadius with a Django application.

+## Integrating LoingRadius with Django application
⬇ Suggested change
-## Integrating LoingRadius with Django application
+## Integrating LoingRadius with a Django Application

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675335933
:

+When you create an account, LoginRadius sets up a free app for you. This is the app we are going to integrate with Django. Here my app name is "tammibriggs".

+Click on your app and you will see a page like this:

+

+There is one more thing LoginRadius authomatically creates for your, an Auth Page (IDX). This is a ready-to-use web page where features like Email and Password login, User registration, Forgot password, and Remember me, have already been implemented for you. We will utilize this web page for registration and authentication requirements in our Django application. Auth Page (IDX) reflects the configuration changes that you make in LoginRadius Dashboard. There is also room for customization, you can read more about that here: Auth Page (IDX) customization.

+At this point we know what LoginRadius is, its benefits and how you can get started with LoginRadius. Now that we know all that, let’s see how we can integrate LoginRadius with a Django application.

+## Integrating LoingRadius with Django application

+This section covers:

+- Installation of dependencies.
⬇ Suggested change
-- Installation of dependencies.
+- Installing dependencies.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675336462
:

+Click on your app and you will see a page like this:

+

+There is one more thing LoginRadius authomatically creates for your, an Auth Page (IDX). This is a ready-to-use web page where features like Email and Password login, User registration, Forgot password, and Remember me, have already been implemented for you. We will utilize this web page for registration and authentication requirements in our Django application. Auth Page (IDX) reflects the configuration changes that you make in LoginRadius Dashboard. There is also room for customization, you can read more about that here: Auth Page (IDX) customization.

+At this point we know what LoginRadius is, its benefits and how you can get started with LoginRadius. Now that we know all that, let’s see how we can integrate LoginRadius with a Django application.

+## Integrating LoingRadius with Django application

+This section covers:

+- Installation of dependencies.
+- Setting up a demo application that we will be integrating LoginRadius into.
⬇ Suggested change
-- Setting up a demo application that we will be integrating LoginRadius into.
+- Setting up a demo application, in which we will integrate LoginRadius.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675337009
:

+

+There is one more thing LoginRadius authomatically creates for your, an Auth Page (IDX). This is a ready-to-use web page where features like Email and Password login, User registration, Forgot password, and Remember me, have already been implemented for you. We will utilize this web page for registration and authentication requirements in our Django application. Auth Page (IDX) reflects the configuration changes that you make in LoginRadius Dashboard. There is also room for customization, you can read more about that here: Auth Page (IDX) customization.

+At this point we know what LoginRadius is, its benefits and how you can get started with LoginRadius. Now that we know all that, let’s see how we can integrate LoginRadius with a Django application.

+## Integrating LoingRadius with Django application

+This section covers:

+- Installation of dependencies.
+- Setting up a demo application that we will be integrating LoginRadius into.
+- It also covers LoginRadius integration with the Python and Flask demo application code.
⬇ Suggested change
-- It also covers LoginRadius integration with the Python and Flask demo application code.
+- Also, integrating LoginRadius with a Python and Flask demo application.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675338139
:

+At this point we know what LoginRadius is, its benefits and how you can get started with LoginRadius. Now that we know all that, let’s see how we can integrate LoginRadius with a Django application.

+## Integrating LoingRadius with Django application

+This section covers:

+- Installation of dependencies.
+- Setting up a demo application that we will be integrating LoginRadius into.
+- It also covers LoginRadius integration with the Python and Flask demo application code.

+> You must have python installed, and the minimum supported version is 2.7.

+Getting API Credentials
+Before using any of the APIs that LoginRadius provides, you need to get your App Name, API Key, and API Secret.
+On your LoginRadius app, navigate to
⬇ Suggested change
-On your LoginRadius app, navigate to

+On your LoginRadius app, navigate to Configuration > API Credentials

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675338379
:

+## Integrating LoingRadius with Django application

+This section covers:

+- Installation of dependencies.
+- Setting up a demo application that we will be integrating LoginRadius into.
+- It also covers LoginRadius integration with the Python and Flask demo application code.

+> You must have python installed, and the minimum supported version is 2.7.

+Getting API Credentials
+Before using any of the APIs that LoginRadius provides, you need to get your App Name, API Key, and API Secret.
+On your LoginRadius app, navigate to

+Configuration > API Credentials
⬇ Suggested change
-Configuration > API Credentials

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675339422
:

+Configuration > API Credentials

+

+You will find your API key under the API Key and Secret subsection.

+

+Whitelist your Domain
+For security reasons, LoginRadius processes the API calls that are received from the whitelisted domains. Local domains (http://localhost and http://<IP_ADDRESS>) are whitelisted by default. This means we don't have to worry about whitelisting our domain if we are running our application on Django's development server. But on a production environment, you definitely have to whitelist our domain.
+To whitelist your domain, in your LoginRadius Dashboard, navigate to
Would you please ensure that spaces and line breaks are formatted clearly?
If not taken care of, the blog may look cluttered once published.
In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675340116
:

+Whitelist your Domain
+For security reasons, LoginRadius processes the API calls that are received from the whitelisted domains. Local domains (http://localhost and http://<IP_ADDRESS>) are whitelisted by default. This means we don't have to worry about whitelisting our domain if we are running our application on Django's development server. But on a production environment, you definitely have to whitelist our domain.
+To whitelist your domain, in your LoginRadius Dashboard, navigate to

+Configuration > Whitelist Your Domain

+and add your domain name

+

+Installation of Dependencies
+We need to install the LoginRadius Python SDK. It provides functionalities that allow Python programs to communicate with LoginRadius APIs.
+Open Vscode, Pycharm or any other editor you may be using.
⬇ Suggested change
-Open Vscode, Pycharm or any other editor you may be using.
+Open VS Code, PyCharm, or any other editor you use in general.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675340415
:

+To whitelist your domain, in your LoginRadius Dashboard, navigate to

+Configuration > Whitelist Your Domain

+and add your domain name

+

+Installation of Dependencies
+We need to install the LoginRadius Python SDK. It provides functionalities that allow Python programs to communicate with LoginRadius APIs.
+Open Vscode, Pycharm or any other editor you may be using.
+In the terminal, type:

$ pip install LoginRadius-v2 requests cryptography pbkdf2

⬇ Suggested change

$ pip install LoginRadius-v2 requests cryptography pbkdf2

+$ pip install LoginRadius-v2 requests cryptography pbkdf2

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675340831
:

+Configuration > Whitelist Your Domain

+and add your domain name

+

+Installation of Dependencies
+We need to install the LoginRadius Python SDK. It provides functionalities that allow Python programs to communicate with LoginRadius APIs.
+Open Vscode, Pycharm or any other editor you may be using.
+In the terminal, type:

$ pip install LoginRadius-v2 requests cryptography pbkdf2

+these are the dependencies we will need to integrate LoginRadius into our Django application.
⬇ Suggested change
-these are the dependencies we will need to integrate LoginRadius into our Django application.
+These are the dependencies we need to integrate LoginRadius into our Django application.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675341178
:

+We need to install the LoginRadius Python SDK. It provides functionalities that allow Python programs to communicate with LoginRadius APIs.

+Open Vscode, Pycharm or any other editor you may be using.
+In the terminal, type:

$ pip install LoginRadius-v2 requests cryptography pbkdf2

+these are the dependencies we will need to integrate LoginRadius into our Django application.

+Setting up Django

+1. Install Django.
+2. Create a new project.
+3. Create an app inside the project.
+4. Migrate your project.
+5. Create a urls.py file in your app.
⬇ Suggested change
-5. Create a urls.py file in your app.
+5. Create a urls.py file in your app.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675342174
:

$ pip install LoginRadius-v2 requests cryptography pbkdf2

+these are the dependencies we will need to integrate LoginRadius into our Django application.

+Setting up Django

+1. Install Django.
+2. Create a new project.
+3. Create an app inside the project.
+4. Migrate your project.
+5. Create a urls.py file in your app.

+You can accomplish all this with the following commands in your terminal:

$ python -m pip install django

Use code blocks (``) wherever you have mentioned commands or code.
In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675342634
:

$ python -m pip install django

$ django-admin startproject radiusAuth

$ cd radiusAuth

$ python manage.py startapp radiusApp

$ python manage.py migrate

$ cd radiusApp

$ type nul > urls.py

+Here, I named my project radiusAuth and my app radiusApp but you can use any name you want.
So far, you have used we. But here you're saying I. Please ensure
consistency in this respect throughout the article.
In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675343422
:

$ cd radiusAuth

$ python manage.py startapp radiusApp

$ python manage.py migrate

$ cd radiusApp

$ type nul > urls.py

+Here, I named my project radiusAuth and my app radiusApp but you can use any name you want.
+You now have a radiusAuth project and radiusApp app setup.

+Configure Project
+You need to tell Django about the app you created and the location of the app's urls.py file.
⬇ Suggested change
-You need to tell Django about the app you created and the location of the app's urls.py file.
+You need to tell Django about the app you created and the location of the app's urls.py file.
File names shall be enclosed with single code block marks (``). Please
ensure this throughout the article.
In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675344160
:

+You need to tell Django about the app you created and the location of the app's urls.py file.

+First, let Django know the location of our app.
+In your radiusAuth project navigate to radiusAuth/settings.py, modify the INSTALLED_APPS:
+radiusAuth/settings.py

INSTALLED_APPS = [

   "django.contrib.admin",

   "django.contrib.auth",

   "django.contrib.contenttypes",

   "django.contrib.sessions",

   "django.contrib.messages",

   "django.contrib.staticfiles",

   "radiusApp",

]

+Once you have added it, go over to the urls.py file in the same directory and modify the urlpatterns and including to app url location.
Here, including to app
saying to doesn't make sense. Please double-check this.
In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675344736
:

+Once you have added it, go over to the urls.py file in the same directory and modify the urlpatterns and including to app url location.

+radiusAuth/urls.py

from django.contrib import admin

from django.urls import path, include

urlpatterns = [

   path('admin/', admin.site.urls),

   path('', include('radiusApp.urls'))

]

+## User Registration and Authentication

+Remember we said, there is a webpage LoginRadius automatically created for us, an Auth Page (IDX), which already has registration and authentication implemented. We are going to utilize this web page to meet our registration and authentication needs.
⬇ Suggested change
-Remember we said, there is a webpage LoginRadius automatically created for us, an Auth Page (IDX), which already has registration and authentication implemented. We are going to utilize this web page to meet our registration and authentication needs.
+Remember, we said that there is a webpage LoginRadius automatically created, an Auth Page (IDX), which already has registration and authentication implemented. We will utilize this web page to meet the registration and authentication needs.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675344946
:

+radiusAuth/urls.py

from django.contrib import admin

from django.urls import path, include

urlpatterns = [

   path('admin/', admin.site.urls),

   path('', include('radiusApp.urls'))

]

+## User Registration and Authentication

+Remember we said, there is a webpage LoginRadius automatically created for us, an Auth Page (IDX), which already has registration and authentication implemented. We are going to utilize this web page to meet our registration and authentication needs.
+How do we do that?.
⬇ Suggested change
-How do we do that?.
+How do we do that?

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675345482
:

+You can access your registration and login page with the following URLs.

+Registration Page URL:

https://{APP Name}.hub.loginradius.com/auth.aspx?action=register&return_url={Return http://hub.loginradius.com/auth.aspx?action=register&return_url={Return URL}

+Login Page URL:

https://{APP_NAME}.hub.loginradius.com/auth.aspx?action=login&return_url={RETURN_URL} http://hub.loginradius.com/auth.aspx?action=login&return_url={RETURN_URL}

+- The APP_NAME parameter is your LoginRadius app name, which we mentioned in the Get API Credentials section.
+- The RETURN_URL parameter refers to the URL where the user should be redirected to upon successful authentication.

+So what we will do now is to create links or buttons that users can click to access these URL.
⬇ Suggested change
-So what we will do now is to create links or buttons that users can click to access these URL.
+So, what we will do now is to create links or buttons that users can click to access these URLs.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675345705
:

+You can access your registration and login page with the following URLs.

+Registration Page URL:

https://{APP Name}.hub.loginradius.com/auth.aspx?action=register&return_url={Return http://hub.loginradius.com/auth.aspx?action=register&return_url={Return URL}

+Login Page URL:

https://{APP_NAME}.hub.loginradius.com/auth.aspx?action=login&return_url={RETURN_URL} http://hub.loginradius.com/auth.aspx?action=login&return_url={RETURN_URL}

+- The APP_NAME parameter is your LoginRadius app name, which we mentioned in the Get API Credentials section.
+- The RETURN_URL parameter refers to the URL where the user should be redirected to upon successful authentication.

+So what we will do now is to create links or buttons that users can click to access these URL.
+First, let's create a views that will be responsible for displaying our registration and login page.
⬇ Suggested change
-First, let's create a views that will be responsible for displaying our registration and login page.
+First, let's create a view that will be responsible for displaying our registration and login page.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675346050
:

+- The APP_NAME parameter is your LoginRadius app name, which we mentioned in the Get API Credentials section.
+- The RETURN_URL parameter refers to the URL where the user should be redirected to upon successful authentication.

+So what we will do now is to create links or buttons that users can click to access these URL.
+First, let's create a views that will be responsible for displaying our registration and login page.
+Edit the views.py file of the radiusApp application and add the following code:

+radiusApp/views.py

from django.shortcuts import render

def register_n_login(request):

   return render(request, 'index.html')

+all this views does is to render a html page as a response.
⬇ Suggested change
-all this views does is to render a html page as a response.
+All this view does is render an HTML page as a response.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675346264
:

+- The APP_NAME parameter is your LoginRadius app name, which we mentioned in the Get API Credentials section.

+- The RETURN_URL parameter refers to the URL where the user should be redirected to upon successful authentication.

+So what we will do now is to create links or buttons that users can click to access these URL.
+First, let's create a views that will be responsible for displaying our registration and login page.
+Edit the views.py file of the radiusApp application and add the following code:

+radiusApp/views.py

from django.shortcuts import render

def register_n_login(request):

   return render(request, 'index.html')

+all this views does is to render a html page as a response.
+Now we need to add the URL pattern for this views.
⬇ Suggested change
-Now we need to add the URL pattern for this views.
+Now, we need to add the URL pattern for this view.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675346636
:

   return render(request, 'index.html')

+all this views does is to render a html page as a response.
+Now we need to add the URL pattern for this views.

+In the urls.py file of your radiusApp application, add the following code:
+radiusApp/urls.py

from django.urls import path

from . import views

urlpatterns = [

   path('', views.register_n_login, name="access"),

]

+The register_n_login views can now be accessed by a URL. It's time to create a template for our views. But before we do that, let me introduce some basic styling we will use in our application.
⬇ Suggested change
-The register_n_login views can now be accessed by a URL. It's time to create a template for our views. But before we do that, let me introduce some basic styling we will use in our application.
+The register_n_login view can now be accessed by a URL. It's time to create a template for our views. But before we do that, let me introduce some basic styling we will use in our application.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675347167
:

.profile__details{

   width: 90%;

   margin: 0 auto;

   line-height: 35px;

   flex: 0.5;

}

.profile__details span{

   font-size: 1.2rem;

}

.label{

   color: hsl(210, 7%, 55%);

}

+Now lets create the template for our register_n_login views
⬇ Suggested change
-Now lets create the template for our register_n_login views
+Now, let's create the template for our register_n_login views

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675347766
:

           <div class="choice">

               <span>OR</span><br>

               <span>If you already have account</span>

           </div>

           <div class="access">

               <span>Log into your account</span>

               <button onclick="window.location.href='https://{APP_NAME}.hub.loginradius.com/auth.aspx?action=login&return_url=http://<IP_ADDRESS>:8000/profile/';">

                   Login

               </button>

           </div>

       </div>

   </body>

+We used an onclick event on both the register and login button, which when clicked changes the windows location to the Auth Page (IDX) register and login page respectively.
⬇ Suggested change
-We used an onclick event on both the register and login button, which when clicked changes the windows location to the Auth Page (IDX) register and login page respectively.
+We used an onclick event on both the register and login buttons, which when clicked changes the window's location to the Auth Page (IDX) register and login page respectively.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675347870
:

           <div class="access">

               <span>Log into your account</span>

               <button onclick="window.location.href='https://{APP_NAME}.hub.loginradius.com/auth.aspx?action=login&return_url=http://<IP_ADDRESS>:8000/profile/';">

                   Login

               </button>

           </div>

       </div>

   </body>

+We used an onclick event on both the register and login button, which when clicked changes the windows location to the Auth Page (IDX) register and login page respectively.

+> NOTE: Don’t forget to replace the {APP_NAME} placeholder with your LoginRadius app name.
+>
⬇ Suggested change
->

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675348386
:

               <button onclick="window.location.href='https://{APP_NAME}.hub.loginradius.com/auth.aspx?action=login&return_url=http://<IP_ADDRESS>:8000/profile/';">

                   Login

               </button>

           </div>

       </div>

   </body>

+We used an onclick event on both the register and login button, which when clicked changes the windows location to the Auth Page (IDX) register and login page respectively.

+> NOTE: Don’t forget to replace the {APP_NAME} placeholder with your LoginRadius app name.
+>

+Also, in the register and login link, we replaced the {RETURN_URL} parameter with http://<IP_ADDRESS>:8000/profile/, which is the users profile page we are going to create shortly.
⬇ Suggested change
-Also, in the register and login link, we replaced the {RETURN_URL} parameter with http://<IP_ADDRESS>:8000/profile/, which is the users profile page we are going to create shortly.
+Also, in the register and login link, we replaced the {RETURN_URL} parameter with http://<IP_ADDRESS>:8000/profile/, which is the user profile page we are going to create shortly.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675348726
:

+We used an onclick event on both the register and login button, which when clicked changes the windows location to the Auth Page (IDX) register and login page respectively.

+> NOTE: Don’t forget to replace the {APP_NAME} placeholder with your LoginRadius app name.
+>

+Also, in the register and login link, we replaced the {RETURN_URL} parameter with http://<IP_ADDRESS>:8000/profile/, which is the users profile page we are going to create shortly.

+Run the development server and open http://<IP_ADDRESS>:8000/, you will see a page like this:

+

+Now when you click the register or login button your will see a page like this:
⬇ Suggested change
-Now when you click the register or login button your will see a page like this:
+Now, when you click the register or login button, you will see a page like this:

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675349163
:

+>

+Also, in the register and login link, we replaced the {RETURN_URL} parameter with http://<IP_ADDRESS>:8000/profile/, which is the users profile page we are going to create shortly.

+Run the development server and open http://<IP_ADDRESS>:8000/, you will see a page like this:

+

+Now when you click the register or login button your will see a page like this:

+

+> When LoginRadius successfully authenticates a user, it attaches an access token in the query string as a token parameter to the REDIRECT_URL.

+we are going to retrieve the user's data from the access token.
⬇ Suggested change
-we are going to retrieve the user's data from the access token.
+We are going to retrieve the user's data from the access token.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675349927
:

+Open your terminal and type this command:

+radiusAuth/radiusApp

$ type nul > config.py

+Open the config.py file and add the following lines of code:

from LoginRadius import LoginRadius as LR

LR.API_KEY = "API_KEY"

LR.API_SECRET = "API_SECRET"

loginradius = LR()

+Replace API_KEY and API_SECRET with your respective LoginRadius API credentials.

+Now lets create the view that will be responsible for retrieving user data
⬇ Suggested change
-Now lets create the view that will be responsible for retrieving user data
+Now, let's create the view that will be responsible for retrieving user data.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675351317
:

+- We first checked if there is a token parameter attached to the request. If true,

+- We created a try and except block. In the try block we used the authentication.get_profile_by_access_token method to retrieve the user data from the access token and assigned it to a variable called user_data while in the except block we returned a HttpResponse of the error that occurred if the try block fails.
⬇ Suggested change
-- We first checked if there is a token parameter attached to the request. If true,
-- We created a try and except block. In the try block we used the authentication.get_profile_by_access_token method to retrieve the user data from the access token and assigned it to a variable called user_data while in the except block we returned a HttpResponse of the error that occurred if the try block fails.
+- We first checked if there is a token parameter attached to the request.
+- If true, we created a try and except block. In the try block, we used the authentication.get_profile_by_access_token method to retrieve the user data from the access token and assigned it to a variable called user_data; while in the except block, we returned a HttpResponse of the error that occurred if the try block fails.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675351741
:

   if request.GET.get('token'):

       try:

           user_data = loginradius.authentication.get_profile_by_access_token(request.GET.get('token'))

       except Exception as inst:

           return HttpResponse(inst)

   else:

       return redirect('access')

   return render(request, 'profile.html', {'user_data':user_data})

+In this code snippet, we imported the initialized LoginRadius class from the config.py file and also imported redirect and HttpResponse from there respective modules.
+We also introduced a new function called profile. In this function we did the following:

+- We first checked if there is a token parameter attached to the request. If true,
+- We created a try and except block. In the try block we used the authentication.get_profile_by_access_token method to retrieve the user data from the access token and assigned it to a variable called user_data while in the except block we returned a HttpResponse of the error that occurred if the try block fails.
+- If the try block successfully retrieved the user's data, we rendered a profile.html page, and also attached the user_data variable to the response.
⬇ Suggested change
-- If the try block successfully retrieved the user's data, we rendered a profile.html page, and also attached the user_data variable to the response.
+- If the try block successfully retrieved the user's data, we rendered a profile.html page and also attached the user_data variable to the response.

In
content/registration-and-authentication-in-django-using-loginRadius/index.md
https://github.com/LoginRadius/engineering-portal/pull/713#discussion_r675352310
:

                   <span>

                   <span class="label">Provider: </span> {{user_data.Provide


Support of Github/Github enterprise for ConfigRepository

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
Currently, config repository is expected to be in CodeCommit.    Our (and many others, I speculate) rely on github for GitOPS and  switching LZA config repository to github would really improve (and comply with existing) change processes.
Describe the feature you'd like
I am looking for a supported way to point pipeline to github for configuration repository.
Additional context
Add any other context or screenshots about the feature request here.
Concerned that if i modify the pipeline updating the lza/pipeline itself will become too problematic.

As a work around, take a look at tsgit18/sync-up-to-codecommit-action and zulhfreelancer/aws-codepipeline-action actions. You can use these in a GitHub Actions workflow drive GitOps from your GHE repo.
+1 for the feature request though.

Just an fyi.. basically ended up doing the following via github actions
      - name: Push github repo  to codecommit
        run: |
          RepositoryName="${{ env.CODECOMMIT_REPO }}"
          AwsRegion="${{ env.AWS_REGION }}"
          CodeCommitUrl="https://git-codecommit.${AwsRegion}.amazonaws.com/v1/repos/${RepositoryName}"

          git config --global --add safe.directory /github/workspace
          git config --global credential.'https://git-codecommit.*.amazonaws.com'.helper '!aws codecommit credential-helper $@'
          git config --global credential.UseHttpPath true
          git remote add sync ${CodeCommitUrl}
          git push sync --mirror --verbose

      - name: Release updates in codepipeline.
        run: |
          aws codepipeline start-pipeline-execution --name "${{ env.CODEPIPELINE }}"

Interesting, seems like this would achieve the same thing as the two actions we are using as a shortcut. Will take a look at this, thanks.

Hello, and thank you for the feedback!
We understand that users may want more flexibility for upstream repositories. However, at this time the LZA team is not evaluating additional sources for the configuration or source code repositories, as these connections to CodePipeline require the CodeStar service which is not currently available in all regions and partitions. Including these options would limit the number of regions our solution is supported in.
As discussed in this thread, a workaround is to automate the mirroring of your configuration changes between your repository of choice and the solution-provided CodeCommit repository.
Thank you for your support of the LZA solution! I will mark this issue as resolved, but please don’t hesitate to reach out with additional feedback.


faq-accordion json broken

I have some trouble with this FAQ view format.
What should happen is a list of FAQs which should be possible to click and open to see the answer.
What is happening now is that it is only the answer which is appearing. When searching in the JSON I am unable to find the Question culumn.
Can anyone help me out?

I'm seeing the same thing.  Looks like the code doesn't include the Question column.  Maybe it got deleted by accident.

I've gotten it to show the Questions by using the Group by Question in the view.  Still working on the "Show More"

@mbMenzel You have to apply the grouping on "Question" column from list view settings.

@Christy-Vera @ganesh-sanap thank you very much. With the group by setting applied it works perfectly.


Chaneged color of social media icons in footer

Fixes Issue

Changes proposed

Screenshots

Before

After

Note to reviewers

I did this using in-line style like this style = {{ Some : 'CSS'}} is it okay?

Ok, no problem


WSL prevents Xilinx ISE running on windows.

Version
Microsoft Windows [Version 10.0.19045.2311]
WSL Version

[X] WSL 2
[ ] WSL 1

Kernel Version
No response
Distro Version
Ubuntu 22.04.1
Other Software
No response
Repro Steps
Windows v 22H2, with all windows updates applied.
Xilinx webpack installed on WINDOWS.
WSL installed from Microsoft store.
WSL is enabled in Control Panel->Programs and Features->Turn windows features on or off
Xilinx tools (ise.exe, impact.exe) will not launch, they hang during launching and can only be killed from task manager.
Disabling WSL in control panel allows them to launch successfully.
This only seems to happen once update KB5020030 is installed, before this update WSL and Xilinx programs worked together correctly.
Expected Behavior
Xilinx tools launch correctly.
Actual Behavior
Hang during launch of Xilinx programs.
Diagnostic Logs
No response

Can you take logs while reproducing this?
/logs

WslLogs-2022-12-14_18-15-20.zip
Logs whilst triggering the problem.
Cheers.
Phill.

I stumbled upon this github issue after experiencing this problem myself. I found an explanation and solution here, which I figured I might as well share here to potentially save some headaches for anyone else who finds this page first.
https://www.exxosforum.co.uk/forum/viewtopic.php?p=95884#p95884
The gist is that libportability.dll (one of xilinx's) barfs when enumerating network shares once it gets to the \wsl shares.


next-link generator using updated_at not changed_at

https://github.com/DFE-Digital/manage-courses-backend/blob/633a421f40e0dae2fb1663120eb69e3daec825b4/app/controllers/concerns/next_link_header.rb#L10

For anyone else watching, and for @timabell tomorrow when he's forgotten why he put that here, the problem here is that providers uses this code to generate a 'next link' header using updated_at when it should be changed_at.

done https://github.com/DFE-Digital/manage-courses-backend/pull/163/files#diff-fbd37db29fb3c6cac18d9b8b94d7f9a0


feat(lidar_centerpoint_tvm): remove package

Description
See https://github.com/autowarefoundation/autoware.universe/pull/7702

Tests performed
See https://github.com/autowarefoundation/autoware.universe/pull/7702
Effects on system behavior
See https://github.com/autowarefoundation/autoware.universe/pull/7702
Interface changes
None

Pre-review checklist for the PR author
The PR author must check the checkboxes below when creating the PR.

[ ] I've confirmed the contribution guidelines.
[ ] The PR follows the pull request guidelines.

In-review checklist for the PR reviewers
The PR reviewers must check the checkboxes below before approval.

[ ] The PR follows the pull request guidelines.

Post-review checklist for the PR author
The PR author must check the checkboxes below before merging.

[ ] There are no open discussions or they are tracked via tickets.

After all checkboxes are checked, anyone who has write access can merge the PR.

Thank you for the review!
@xmfcx @mitsudome-r Would you merge this PR?


Not updating with apt-get update && upgrade

When using apt-get update && apt-get upgrade, update is hitting http://v.s.cz stable InRelease however their is no upgrade option. I find using apt-get install --reinstall nightly updates to the latest build. Is their something I should switch on my end?
bg using the repo deb http://repo.vitexsoftware.cz $(lsb_release -sc) main

Thank you for issue. I fix it soon as possible.

http://repo.vitexsoftware.cz/ was updated. Please confirm that everything is OK now.

Getting a release file issue now. Tried remove and readdnig repo with the same issue
E: The repository 'http://repo.vitexsoftware.cz sid Release' does not have a Release file.

Ah! Sorry. The sid was not supported yet.
Now is is: http://repo.vitexsoftware.cz/pool/sid/main/n/nightly/
If you confirm me functionality i close this issue.

Fixed thank you sir

@jeefmaze  I'm still fighting with freight-cache by  https://github.com/freight-team/freight .  Sorry for some 404.
Unsure why it does not works well for all distros.

The bug was issued:
https://github.com/freight-team/freight/issues/96https://github.com/freight-team/freight/issues/96
I must thing about it on next release.


Cleanup Markdown lint pipeline according to updates done to reusable workflow

I am updating reusable workflow of markdown lint and the parameters name will change. Since this repo is calling the reusable workflow with a config file that isnt even valid since the ruling set in the config file is a rule for markdown lint, but the reusable workflow uses the given config file for the dead links markdown check. The config file is also only specifying ruling for line length which is already the default value in the markdown lint check.
Reference issue : https://github.com/ai-cfia/github-workflows/issues/89
Reference PR : https://github.com/ai-cfia/github-workflows/pull/111
Once PR 111 is merged i can update this PR to point to main and merge.

312 markdown lint errors will be fixed with https://github.com/ai-cfia/dev-rel-docs/issues/126


skip the lookup and tag_on_failure when ip is private

since version 3.0.0 this plugin tags a failed lookup with tag_on_failure.
However this tagging does not differentiate between a failed lookup for a private ip (which will always fail and it's OK), and a public ip (which may require further action).
we could add an option called skip_private_ips => false, which would skip the lookup for any ip in private network ranges, and not tag as a failure.

This would be a great feature to have. For the record, I'm currently working around this with the CIDR plugin, doing the following:

Using CIDR, check if address is a private block (currently defined as rfc1918, link-local, multicast, on either IPv4 or v6). If so, add tag skip_geoip_lookup
If skip_geoip_lookup is not in tags, then do the lookup
Else, remove skip_geoip_lookup

Works like a charm but is a little ugly - a built in solution would do wonders.

An even better enhancement would be to support GEOIP lookups of private IPs from a csv or JSON file.
I had looked into customizing the GEOIP2 database, but I can't find any decent tools for customizing the new MMDB format.

we could add an option called skip_private_ips => false

private may not be the correct word to use. We could have a setting to skip over address ranges we know would never appear in a maxmind data, such as: RFC1918, Class D and E ranges, <IP_ADDRESS>/8, broadcast (<IP_ADDRESS>), etc?
Alternately, we could make a new setting that allows users to specify CIDR notation for address ranges they want to skip?

@bufordt13 I have heard of folks makking their own geoip2 data files, but I have no advice for you on how to achieve this.
If you want custom lookups from csv or json, check out the translate filter which lets you do this.

I realize that I can create my own translate filter, and that's probably the route I'm going down, but custom mapping of private IPs seems like a natural feature for geoip to have.
It would be nicer to just have a single plugin that handles all the geoip tasks instead of having 1 for public IPs and a completely different one for Private IPs.

@bufordt13 if you want to provide custom data, you are certainly welcome to do so! This filter only supports Maxmind's GeoIP data file formats. Adding other formats is outside of the scope of the filter and another filter could be created (or reused, as in translate filter) to serve your needs.

Any progress on this? I assume skipping the lookup entirely for IPs not in maxmind db would add performance gains.

No news to report. We will keep this ticket updated with any newsz
On Mon, May 1, 2017 at 5:06 PM Allen Chan<EMAIL_ADDRESS>wrote:

Any progress on this? I assume skipping the lookup entirely for IPs not in
maxmind db would add performance gains.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
https://github.com/logstash-plugins/logstash-filter-geoip/issues/99#issuecomment-298464664,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAIC6nQO1jPyZZ2Cm9ekhI7p5Ar8n5fSks5r1nN3gaJpZM4K1JsI
.

I assume skipping the lookup entirely for IPs not in maxmind db would add performance gains.

The way you phrased this is a bit confusing. In order to skip a lookup for IPs not in maxmind db, we have to actually determine the answer to "not in maxmind db?" which requires a lookup in order to answer this..

For this idea, we need to also consider ipv6, not just ipv4.

I currently handle this using the cidr filter with something like...
cidr {
    address => [ "%{[conn][dst_addr]}" ]
    network => [ "<IP_ADDRESS>/32", "<IP_ADDRESS>/8", "<IP_ADDRESS>/12", "<IP_ADDRESS>/16", "fc00::/7", "<IP_ADDRESS>/8", "::1/128","<IP_ADDRESS>/16", "fe80::/10","<IP_ADDRESS>/4", "ff00::/8","<IP_ADDRESS>/32" ]
    add_field => { "[conn][dst_locality]" => "private" }
}

I can then use this result to decide whether to perform the geoip lookup. There is no waste in this in my use-case as I also leverage the resulting locality field in dashboards to allow user to filter on public or private network traffic data.
I assume the ask here is do the equivalent check inside the geoip filter code prior to the actual geoip lookup up. What would this gain us? If the cidr check is considerably faster than the geoip lookup itself, then there could be an efficiency boost. But would it be faster than using the cidr filter and a conditional in the Logstash pipeline as I do it today?
Either way in my case this wins me nothing as I still have to do the cidr matching for other reasons. Additionally, by leveraging the cidr filter I have control over the exact IPs that are looked up in the geoip DB (for example I may want to ignore some public IPs too). If there was code inside the geoip filter, everyone would have to be aware of it or would get unexpected results (would also need to be able to override this behaviour or risk a breaking change for those who depended on a failure tag in their pipeline logic).
IMO, this is an example of a "best practice" or "pattern"... using the cidr and geoip filters together. There is definitely a need for better documentation of such patterns. I can still remember the pains I went through until it all started to click. The foo => bar examples in the docs are a hurdle here... no real world context. But that is a different topic to be debated (and contributed to) elsewhere.
Rather than add additional logic to the geoip filter, I would rather see the cidr filter made part of the of the out-of-the-box logstash config, as it is currently only a community-supported plugin which must be manually installed. I think this would be a wise move since these two are used so often together.
Additionally, I would be happy to contribute a blog that explains the patterns for using these two plugins together, including plenty of real world context.
Just my 2 cents.
Rob

@robcowart Thank you for your detailed example and response. I agree with you that a good approach to solving this is to use the existing cidr filter.

Documenting this better would be good, but skipping lookups for reserved IPs when someone supplies a custom database that allows lookups of those IPs would be bad. The assumption that a lookup of a reserved IP will always fail is false.

I have roughed out some code in Go to merge our RFC1918 addresses into the MMDB files.   I did this with a plan to use them in @robcowart 's Elastiflow project.    Once I had built the MMDB, I assumed I was over the hump.
Is there a flag/option I can use with the geoip plugin so that it will NOT skip on these addresses?

@hkelley did you test your files only with ElastiFlow or with a small test pipeline? I ask because ElastiFlow will only query the GeoIP City and ASN DBs for public IPs. Depending where you added the lookups for your DBs the other ElastiFlow logic may be preventing the lookup from happening.

Yes,  I'm using a test with only a snippet lifted from 20_filter_90_post_process.logstash.conf.
		geoip {
		  source => "[source][ip]"
		  database => "${ELASTIFLOW_GEOIP_DB_PATH:/etc/logstash/elastiflow/geoipdbs}/GeoLite2-City.mmdb"
		  cache_size => "${ELASTIFLOW_GEOIP_CACHE_SIZE:8192}"
		  target => "[metadata][geoip_src]"
		  fields => [ "city_name", "location" ]
		}

What I've discovered is that even though I am only asking for city name and location,  the plugin's retrieveCityGeoData() method makes MaxMind API calls for several other attributes,  including Subdivisions.
From org.logstash.filters.GeoIPFilter
  private Map<String,Object> retrieveCityGeoData(InetAddress ipAddress) throws GeoIp2Exception, IOException {
    CityResponse response = databaseReader.city(ipAddress);
    Country country = response.getCountry();
    City city = response.getCity();
    Location location = response.getLocation();
    Continent continent = response.getContinent();
    Postal postal = response.getPostal();
    Subdivision subdivision = response.getMostSpecificSubdivision();
    Map<String, Object> geoData = new HashMap<>();

I see this error when I crank up the logging level for that class.
[DEBUG][org.logstash.filters.GeoIPFilter][main] GeoIP2 Exception. exception=com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token
 at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.maxmind.geoip2.model.CityResponse["subdivisions"]), field=[source][ip],

My DIY network records worked fine with the MmdbInspect test tool but I now suspsect I am either missing some mandatory fields or have another formatting error in the JSON structures I am adding.   I am reworking my MMDB builder now to test further.
@robcowart ,  regarding your observation about the public/private logic in ElastiFlow,   I assume I should put my if-private geoip  logic in a new 20_filter_95_post_process.logstash.conf or similar.   I'm open to suggestions there but first need to solve the MMDB issue and can then take up that question in the ElastiFlow project.


Generic print method

I'm going to write more generic print method, but don't know what to do with .Next and .Error. I cannot just call signal |> print(.Next) or signal |> print(.Error). These cases need to be called with arguments. Could you please help? Should I implement additional enum?
See the actual code below.
public func print<T, E>(_ event: Event<T, E>? = nil)(signal: SignalProducer<T, E>) -> SignalProducer<T, E> {
    return signal
        |> on(event: { aEvent in
            if let event = event {
                switch (aEvent, event) {
                case (.Next, .Next):
                    println(aEvent)

                case (.Error, .Error):
                    println(aEvent)

                case (.Completed, .Completed):
                    println(aEvent)

                case (.Interrupted, .Interrupted):
                    println(aEvent)

                default:
                    break
                }
            } else {
                println(aEvent)
            }
        })
}

I don't see the value here over the existing printNext, printError, especially since it can't be done without a secondary custom enum to act as the filter.

My idea of generic method is connected with RAC flatten and flatMap signatures. I would like to follow RAC approach and conventions.

Those functions are the exception and not the rule. They are defined in that way so consumers make a conscience decision about how inner signals should be flattened (cf ReactiveCocoa/ReactiveCocoa#1768). In the previous versions of RAC most people blindly chose flattenMap without realizing concat or switchToLatest were available for signals-of-signals.


Malediction of Occultist doesn't seem to be functioning properly

I love PoB. I use it more than POE itself!
I just wanted to report that the Malediction node in Occultist doesn't seem to function properly. I don't see many aspects of the node calculating in a way that makes sense to me...whether it's the taking 10% extra damage, extra damage per curse, or seeing the added chaos damage on my skill.
Sorry if this post isn't correct and it is working as intended. But I've scoured everything and can't seem to make it function correctly.
Thanks again for the amazing program!

Any update on this?
For example my Soulrend does 410k dps and choosing Malediction in Occultist Ascendancy definitely doesn't include the 10% extra damage.

As far as I can tell, all parts of that node are working correctly. Could you give me your build?

As far as I can tell, all parts of that node are working correctly. Could you give me your build?

Here it is. Maybe it's some setting causing it, but I can't figure it out. Hopefully you can :)
https://pastebin.com/d2NSDpgY
Seems that neither Soulrend Hit/DoT DPS is receiving the Malediction bonus.

The Malediction bonus is applying correctly. However, since it is additive with other sources of "x% increased Damage Taken", it may not actually give a 10% increase; in your case, you have 90% increased Chaos Damage Taken from Wither, and 15% increased Damage Taken from Aspect of the Spider, so Malediction will give much less than 10%.

Heh, this game is sometimes too complicated. I was 99% sure that "enemies take increased damage" is same as extra damage.
Well, thanks for the help !

I'll go ahead and close this, since I'm quite sure everything is working.

Hey Openarl,
Congrats on being an employee of GGG!
I originally posted this last July because Malediction wasn't adding DPS to
my skills in the Calcs screen...namely Vortex. Here's my build:
https://pastebin.com/7MpdN3ga (I know a lot has changed since then). The
original issues has been fixes for a while. Before, Malediction wouldn't
show up in any "hover" menu. Now it does.
One thing it still doesn't does is ignore the DoT damage when highlighting
a specific curse's checkmark in the Skills screen. If you use the pastebin
above, Highlighting either Enfeelble or Temporal Chains' check mark only
considers Vortex's Hit, not it's Dot. As far as I understand it, the DoT
should be considered.
Thanks again for such a great program. I spend so much time in it.
(Did you make the Mobile version?)
On Fri, 29 Mar 2019 at 17:10, Openarl<EMAIL_ADDRESS>wrote:

Closed #1110 https://github.com/Openarl/PathOfBuilding/issues/1110.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/Openarl/PathOfBuilding/issues/1110#event-2240704328,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AnEWG8ODLrHMabqE8kZgT7C024_sDGuUks5vbqtZgaJpZM4VG2Af
.

Hey Openarl,
Congrats on being an employee of GGG!
I originally posted this last July because Malediction wasn't adding DPS to my skills in the Calcs screen...namely Vortex. Here's my build: https://pastebin.com/7MpdN3ga (I know a lot has changed since then). The original issues has been fixes for a while. Before, Malediction wouldn't show up in any "hover" menu. Now it does.
One thing it still doesn't does is ignore the DoT damage when highlighting a specific curse's checkmark in the Skills screen. If you use the pastebin above, Highlighting either Enfeelble or Temporal Chains' check mark only considers Vortex's Hit, not it's Dot. As far as I understand it, the DoT should be considered.
Thanks again for such a great program. I spend so much time in it.
(Did you make the Mobile version?)

I didn't realize my email would show up on on a closed post. Sorry for the double post.


Do not capture whitespace between ATX heading's marker and content

Problem
The heading_content of ATX headings would include the whitespace between the heading marker and the heading text.
Example
Given an example file
# Top Heading

Some contents

Executing the query
(section (atx_heading (atx_h1_marker) heading_content: (inline) @heading))

results in
pattern: 0
  capture: 0 - heading, start: (0, 1), end: (0, 13), text: ` Top Heading`

Changes
A new $_atx_heading_content rule allows optional whitespace before the line content that is captured in heading_content.
For the given example, the query now returns
pattern: 0
  capture: 0 - heading, start: (0, 2), end: (0, 13), text: `Top Heading`

Looks good and is going to make this node a bit more consistent. Thank you!

Thank you @MDeiml! In a related note, would it be possible to release a new version and publish it to crates.io? We're currently depending on the commit, but cargo is much slower with these than with releases, and we also cannot release our own crate if we want.

Hi @hendrikvanantwerpen! is it possible for you to implement a similar fix for #41?

@petobens I'm not able to do that at the moment. Perhaps my PR will give you an idea of how to try it?

Would love to but I'm afraid it's beyond my skill set.

As mentioned in the issue this change is a lot more complex than the one for ATX heading markers, but the workaround described there should be enough for almost all use cases.


Graph sorting should be internal to the graph

See discussion in #1757. For example this is needed when we include turn costs, because we also need to sort the TurnCostExtension (related: #1398). This is a bit tricky right now, because BaseGraph only 'sees' the GraphExtension interface, see #1772.

What exactly is necessary here? Implementing something like graph.sort()? The problem I see with this is that currently sorting requires a new graph and cannot be done inplace (which would be very tricky).

Well first of all the method that does the sorting needs to have access to everything that needs to be sorted. Right now this is not the case because it is missing the turn cost storage for example. Second, this will not work the same way for the BaseGraph and the CHGraph, so first these should be decoupled (#1780). Creating a (sorted) copy of the graph I think should be ok, because it will not take more memory than for example CH preparation.


Update connecting-your-database.md

adding key size support to the docs

@schottj looks like some of your changes have already been incorporated via #1183. I went ahead and merged in those changes as best as I could. Does the current change make grammatical sense as one sentence?


fix(material/chips): fix ripple element opacity when using CSS variable theming

Fixes a bug in the Angular Material chips component where ripple element doesn't have opacity when CSS variables are used to make a dynamic theme
Fixes #17577

The changes look good, but some of the CI checks are failing.

Thanks for the review. I will take a look again at these tests, but I had some issues with executing them.

The test failures look like flakes so you should be able to resolve them by rebasing. The lint failure looks real though.

Thank you.
Lint failure is some trailing whitespace (most likely). I will look into it. :)

@googlebot I fixed it.

The CLA error is because you pushed the commits from two separate email addresses.

It looks like similar changes got merged in #17649, we can either rebase this one and merge it to extract the separate mixin, or just close it.
@jelbourn @crisbeto

@JoakimZebic this passes Google's internal presubmit, just needs a rebase

@jelbourn I took care of it


Could not find types for 'x' message for types created via plugins

Hello, I wanted to know if this package supports types created by plugins, such as the 'markdown' plugin.
Here are some steps to reproduce:

sanity install markdown
(add a type of 'markdown' to a field in a schema file, ie.

...
{   name: "show_notes",
    title: "Show Notes",
    type: "markdown",
},
...

Run code gen:

npx sanity-codegen
Could not find types for: "Markdown". Ensure they are present in your schema. Future versions of sanity-codegen will allow you to type them separately.

Has anyone found a solution to this?


CSS for alignment.

Added CSS rules at EOF to help with alignment issues when either inventory and/or vault is nearly empty. Ideally data should be laid out horizontally, but I'm no NG whiz and I don't know how to go about it. Feel free to move the additions to a place that makes more sense to you. Love the project, BTW!

Anything I can do to improve this?

Can you add some screenshots to show how this helps?  Thanks.

Hey, sorry I wasn't on Github this weekend but saw the update! Love it!


switchSourceHeader false positive header result

clangd with the switchSourceHeader extension is providing a header unrelated to the source file.
See https://bugreports.qt.io/browse/QTCREATORBUG-27753 and https://bugreports.qt.io/browse/QTCREATORBUG-27977
In the case of latter for tst_fsengine.cpp it caused Qt Creator to open qtmetamacros.h.
System information
Output of clangd --version:  14.0.3
Editor/LSP plugin: Qt Creator 8.0.0
Operating system: Windows / Linux.

As it turns out switchSourceHeader has two ways to operate:

via file system
via AST

And the callback doesn't provide a way for the client to differentiate between them:
void ClangdServer::switchSourceHeader(
    PathRef Path, Callback<llvm::Optional<clangd::Path>> CB) {
  // We want to return the result as fast as possible, strategy is:
  //  1) use the file-only heuristic, it requires some IO but it is much
  //     faster than building AST, but it only works when .h/.cc files are in
  //     the same directory.
  //  2) if 1) fails, we use the AST&Index approach, it is slower but supports
  //     different code layout.
  if (auto CorrespondingFile =
          getCorrespondingHeaderOrSource(Path, TFS.view(llvm::None)))
    return CB(std::move(CorrespondingFile));
  auto Action = [Path = Path.str(), CB = std::move(CB),
                 this](llvm::Expected<InputsAndAST> InpAST) mutable {
    if (!InpAST)
      return CB(InpAST.takeError());
    CB(getCorrespondingHeaderOrSource(Path, InpAST->AST, Index));
  };
  WorkScheduler->runWithAST("SwitchHeaderSource", Path, std::move(Action));
}

So an IDE can't warn the user that the second AST version is innacurate.

Does there exist a "correct" header to open in this case (and if so, at what path)?

Does there exist a "correct" header to open in this case (and if so, at what path)?

This is no "correct" header in this case. The IDE shouldn't open any header file, but one header is promoted as valid. In this case I expect no header result.


IllegalStateException: stream != null

Fatal Exception: java.lang.IllegalStateException: stream != null
       at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:155)
       at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127)
       at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:97)
       at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:289)
       at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:241)
       at okhttp3.RealCall.getResponse(RealCall.java:240)
       at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198)
       at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160)
       at okhttp3.RealCall.access$100(RealCall.java:30)
       at okhttp3.RealCall$AsyncCall.execute(RealCall.java:127)
       at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
       at java.lang.Thread.run(Thread.java:841)

I was researching this one, but haven't found anything yet. @hamberluo do you know if you're using Http1 or Http2 when this exception happened?

I've not been able to reproduce this one. I believe the cause would be related to a response not being closed prior to making a follow up request. The only thing I came up with is to create a 'misbehaving' network interceptor that wrapped the response, but didn't close it properly.

Thanks for investigating this Dave. I also tried to isolate this, but my investigation wasn’t very deep! I ended up with this, which discovered that cache bug I fixed last week.
https://gist.github.com/swankjesse/ae7315037362e284edc7

(I’d like to eventually tidy that up and check it in. If you want to take it over, please do!)

Oh interesting, I'll have a look.

@dave-r12 i'm using Http1

Cool thanks. As a follow up, are you doing anything fancy like wrapping the Response with a network interceptor?

@dave-r12 yes, but i'm not sure it's the real cause. i remove those codes in next app version to verify my thoughts.

Hi guys,
We have this issue in our application. I've added some logs to find out the root cause and found a way to reproduce the problem. It seems the issue comes from multiple redirect on same host. In that case the StreamAllocation doesn't release the stream and will throw IllegalStateException on the next redirect call.

@tguerin good find. I'll take a look. I assume you're using the latest release?

@swankjesse yes

I figured out a way to reproduce this. We want to release the stream by doing this:
      closeQuietly(userResponse.body());

But if a network interceptor is involved, it’s possible that closing that doesn’t accomplish what we want. For example, consider this:
    OkHttpClient client = new OkHttpClient.Builder().addNetworkInterceptor(new Interceptor() {
      @Override public Response intercept(Chain chain) throws IOException {
        Response response = chain.proceed(chain.request());
        return response.newBuilder()
            .body(ResponseBody.create(null, "HELLO"))
            .build();
      }
    }).build();

@tguerin, @hamberluo are you using any network interceptors?

@swankjesse i use the stetho in debug build instead of release, yet it also crash in release.

@swankjesse The only network interceptor we have was used to workaround this issue

@swankjesse i also use okhttp ws lib.

@tguerin are you using web sockets?

@dave-r12 Yes, why ?


RecycleView self.rv.data.insert acts randomly

Software Versions

Python: 3.7
OS: windows 10
Kivy: 1.11.1
Kivy installation method: anaconda

Describe the bug
I've been having a really hard time inserting a dictionary of more than one value in my recycle view data and that's the simplest way to recreate my issue: In the following code click "populate list" and then put whatever input you want in the "Insert new item" input box and click the button. You'll see that the new item was created but it affected other items as well. If you scroll the list you'll see more.
from random import sample
from string import ascii_lowercase

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout

kv = """
<Row@BoxLayout>:
    canvas.before:
        Color:
            rgba: 0.5, 0.5, 0.5, 1
        Rectangle:
            size: self.size
            pos: self.pos
    value: ''
    value2: ''
    Label:
        text: root.value
	Label:
		text: root.value2

<Test>:
    canvas:
        Color:
            rgba: 0.3, 0.3, 0.3, 1
        Rectangle:
            size: self.size
            pos: self.pos
    rv: rv
    orientation: 'vertical'
    GridLayout:
        cols: 3
        rows: 2
        size_hint_y: None
        height: dp(108)
        padding: dp(8)
        spacing: dp(16)
        Button:
            text: 'Populate list'
            on_press: root.populate()
        Button:
            text: 'Sort list'
            on_press: root.sort()
        Button:
            text: 'Clear list'
            on_press: root.clear()
        BoxLayout:
            spacing: dp(8)
            Button:
                text: 'Insert new item'
                on_press: root.insert(new_item_input.text)
            TextInput:
                id: new_item_input
                size_hint_x: 0.6
                hint_text: 'value'
                padding: dp(10), dp(10), 0, 0
        BoxLayout:
            spacing: dp(8)
            Button:
                text: 'Update first item'
                on_press: root.update(update_item_input.text)
            TextInput:
                id: update_item_input
                size_hint_x: 0.6
                hint_text: 'new value'
                padding: dp(10), dp(10), 0, 0
        Button:
            text: 'Remove first item'
            on_press: root.remove()

    RecycleView:
        id: rv
        scroll_type: ['bars', 'content']
        scroll_wheel_distance: dp(114)
        bar_width: dp(10)
        viewclass: 'Row'
        RecycleBoxLayout:
            default_size: None, dp(56)
            default_size_hint: 1, None
            size_hint_y: None
            height: self.minimum_height
            orientation: 'vertical'
            spacing: dp(2)
"""

Builder.load_string(kv)

class Test(BoxLayout):

    def populate(self):
        self.rv.data = [{'value': ''.join(sample(ascii_lowercase, 6))}
                        for x in range(50)]

    def sort(self):
        self.rv.data = sorted(self.rv.data, key=lambda x: x['value'])

    def clear(self):
        self.rv.data = []

    def insert(self, value):
        self.rv.data.insert(0, {'value': value, 'value2':value or 'default value'})

    def update(self, value):
        if self.rv.data:
            self.rv.data[0]['value'] = value or 'default new value'
            self.rv.refresh_from_data()

    def remove(self):
        if self.rv.data:
            self.rv.data.pop(0)

class TestApp(App):
    def build(self):
        return Test()

if __name__ == '__main__':
    TestApp().run()

Expected behavior
I was expecting only one item to be added at the top of the list with 2 same values as inputed. One on the left, and one on the right. I got that correctly, but it messed up other items randomly.
To Reproduce
Run the above code with the instructions and keep in mind, this code is from kivy's official examples. I just added
        value2: ''
	Label:
		text: root.value2

and modified the insert section to look like this:
    def insert(self, value):
        self.rv.data.insert(0, {'value': value, 'value2':value or 'default value'})

Code and Logs and screenshots

Additional context
As one can see, that "jmxwhi" should be empty on the right as the other items, instead it has "what is this" next to it which is the newly inserted item. Even if I clear the list and populate it again, I get random values with "what is this" next to them.

That's because you neglected to set value2 to something in your data dictionary when populating the data originally so it's reusing whatever value the widget had last..

That's because you neglected to set value2 to something in your data dictionary when populating the data originally so it's reusing whatever value the widget had last..

If that's the expected behavior shouldn't it apply to all items? Why is it being applied to them randomly? Why when I clear the list and repopulate it the old value appears again randomly on the right side of some randomly selected widgets?

I'm not sure that the bug has been understood correctly so please watch the demo video:
here
this bug is very important as it affects table data insertion cuz all tables with large data are done with recycle view. I'm surprised nobody else has come across it yet.

Yes, this actually is very much expected. A RV works by creating a cache of widgets used to display the data. These widgets are re-used for the currently visible rv items. So when scrolling, some widgets will have been re-used from that new inserted data item and only those widgets will have have the "incorrect" label because you didn't set it explicitly in the data.
So the correct thing is to set in the data list all the properties that are used by the view widgets.


Specified diagnostic for iterating known array type without --downlevelIteration

Fixes #16022
If an entity can't be iterated for lack of a [Symbol.iterator] and is one of a few known array-like types that would receive it in --downlevelIteration, a more specific error message indicating so is now emitted.
I think an ideal solution would have been to check whether the type would be iterable in a higher output target, but I couldn't find prior art in code for doing so. Is there a better way to check for this case, or an existing or larger list of known names?
Refactors the big multi-level ternary previously used to generate the diagnostic message because it would have been even more multi-level from this change. Teeny improvement: yieldType isn't calculated unless it's needed now.

@sandersn were you still going to merge this?

@sandersn were you still going to merge this?

Sorry, I forgot about this. I merged from master, and I'll merge the PR when tests finish running.


Deprecated kubeadm flags on k8s 1.15

2019-07-24 15:48:30 [DEBG] [/berk.can/sealos/install/utils.go:90] command result is: Flag --experimental-upload-certs has been deprecated, use --upload-certs instead

OK, I will fix this later

Are you using 1.15.0? I test 1.15.0 work fine


decode body to utf-8 before json.loads

In Python 3 json.loads() will only accept a unicode string
also see: http://stackoverflow.com/a/29781023/4158804
fixes:
298, in on_message
   decoded = json.loads(body)
 File "/usr/lib/python3.5/json/__init__.py", line 312, in loads
   s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'

superseded by https://github.com/ByteInternet/python-events/pull/6, pr on the pypi branch


grunt-svgmin: using folder option

Can anybody tell me to option to process a folder of svg files with the grunt task? Or do I have to specify each file separate a files array?

I tried the **/*.svg method, but it doesn't seem to work.
I'm currently listing the files individually. Please tell me you were you able to get it working.

This is waht my files array looks like. It only handles svgs directly in the icons folder (no deeper steps)
{
    expand: true,
    cwd: 'icons/',
    src: '*.svg',
    dest: 'icons/optimized',
    ext: '.svg',
    extDot: 'first'
}

Hi,
What is your config file ? don't work for me :(

@LeG3nDz, you have to write an array of plugins:
    plugins: [
        { removeViewBox: false },
        { removeUselessStrokeAndFill: false }
    ]

@GreLI Thank you, it's okay :)


[Localize ObjectFifo] Don't crash when scf.forall has no mapping

While we probably don't expect an scf.forall without either a thread or block mapping, it's better if this pass can handle the case.

The original code:
 if (isa<mlir::gpu::GPUThreadMappingAttr>(
          *forallOp.getMapping()->getValue().begin())) {

doesn't check if if forallOp even has a mapping, an optional attribute. So there is a segfault on getValue().
This PR is exactly equivalent to just adding a has_value() check in. The rest of the change is replacing recursion.

The original code:
 if (isa<mlir::gpu::GPUThreadMappingAttr>(
          *forallOp.getMapping()->getValue().begin())) {

doesn't check if forallOp has a mapping, an optional attribute. So there is a segfault on getValue().
This PR is exactly equivalent to just adding a has_value() check in. The rest of the change is replacing recursion.

But it won't throw an error?

The original code:
 if (isa<mlir::gpu::GPUThreadMappingAttr>(
          *forallOp.getMapping()->getValue().begin())) {

doesn't check if forallOp has a mapping, an optional attribute. So there is a segfault on getValue().
This PR is exactly equivalent to just adding a has_value() check in. The rest of the change is replacing recursion.

But it won't throw an error?

Not sure I understand question, are you suggesting I make a change to the logic? All this PR does is what was done in
https://github.com/nod-ai/iree-amd-aie/commit/883ee07732ece0b3cccdcd871c1b7d4c3eeebed2
w.r.t. mapping on scf.forall.

The original code:
 if (isa<mlir::gpu::GPUThreadMappingAttr>(
          *forallOp.getMapping()->getValue().begin())) {

doesn't check if forallOp has a mapping, an optional attribute. So there is a segfault on getValue().
This PR is exactly equivalent to just adding a has_value() check in. The rest of the change is replacing recursion.

But it won't throw an error?

Not sure I understand question, are you suggesting I make a change to the logic? All this PR does is what was done in
883ee07
w.r.t. mapping on scf.forall.

Yeah, the PR says 'Don't crash when scf.forall has no mapping '. I agree there shouldn't be a segfault, but now the pass will just continue and then at some point there will be an error/crash again, at a point where it might not be clear that this is the root issue? I think the correct behaviour would be to throw an error in this pass if no scf.forall ops with thread mapping were found.

The original code:
 if (isa<mlir::gpu::GPUThreadMappingAttr>(
          *forallOp.getMapping()->getValue().begin())) {

doesn't check if forallOp has a mapping, an optional attribute. So there is a segfault on getValue().
This PR is exactly equivalent to just adding a has_value() check in. The rest of the change is replacing recursion.

But it won't throw an error?

Not sure I understand question, are you suggesting I make a change to the logic? All this PR does is what was done in
883ee07
w.r.t. mapping on scf.forall.

Yeah, the PR says 'Don't crash when scf.forall has no mapping '. I agree there shouldn't be a segfault, but now the pass will just continue and then at some point there will be an error/crash again, at a point where it might not be clear that this is the root issue? I think the correct behaviour would be to throw an error in this pass if no scf.forall ops with thread mapping were found.

I agree with your overall design idea, but this PR doesn't change the behavior. It is exactly equivalent to https://github.com/nod-ai/iree-amd-aie/pull/669/files

This isn't about the case where there is no scf.forall with a thread mapping, it's about the case where there is an scf.forall with no mapping (thread or block).

Ah, I see, like a case with some scf.forall ops with mapping and others without?

This isn't about the case where there is no scf.forall with a thread mapping, it's about the case where there is an scf.forall with no mapping (thread or block).

Ah, I see, like a case with some scf.forall ops with mapping and others without?

Yes, that's the edge case being fixed


Dart : Wrong Color Generation

The Primary Container generated by this package is Different from the color generated from Website

Can you please provide more details? Will help me investigate :)

Can you please provide more details? Will help me investigate :)

Sure, I am busy now so I will give details tomorrow.

Well...
Here is the screenshot of FAB android using the colors generated by web

Now I tries to use material 3 color scheme by using this library. If I provide the same color used to generate on web and apply primary container on flutter I get the following result
.
After deeply studying the docs at material website I found that It may be a problem of web but I can't give surety as I don't have an android 12 device

What is the provided color?

#9C4247

Thanks, I've filed an internal issue b/210455181 and will close this one

Thanks, I've filed an internal issue b/210455181 to update the theme builder and will close this one

Thanks

210455181

@guidezpl How do I follow up with this issue

It's internal-only, unfortunately. But this here issue is linked there so once it's resolved myself of someone else will comment here

Fixed upstream

Thank you