Skip to main content

CDC Data Hub Lifecycle, Analysis and Visualization Accelerator Python

Project description

CDH-Python Project Documentation

  • Point of contact: John Bowyer
  • Organizational unit: OPHDST
  • Related projects: CDH
  • Related investments: Pending Public Release
  • Governance status: Pending Public Release
  • Program official: Sachin Agnihotri

Getting Started

Set up Local development environment for Python - with remote spark

Check if Python is installed

Run in bash or powershell

  1. Check Python Version

     ```sh
     python3 --version
     ```
     
     or
     
     ```sh
     python --version
     ```
    
    • Ensure it is python 3.9.9

Install Python 3.9

Run Install Python on Ubuntu or WSL (Primary)

    ```sh
    sudo apt update
    sudo apt install python3.9
    ```

Update Path

    ```sh
    nano ~/.bashrc
    export PATH="/usr/bin/python3.9:$PATH"
    source ~/.bashrc
    ```

Run Install Python on windows

Run Application

    Download: https://www.python.org/ftp/python/3.9.9/python-3.9.9-embed-amd64.zip
    Install as a non global user

Install Pip

Run Install Pip on Ubuntu or WSL (Primary)

    ```sh
    sudo apt update
    sudo apt-get install python3-pip
    ```

Run Install Pip on Windows

    ```sh
    py -m ensurepip --upgrade
    ```

Install Virtual Environment

Run Install Virtual Environment on Ubuntu or WSL (Primary)

See Virtual Environment Set Reference Article

If first virtual environment on desktop

  1. Open Terminal in home directory

     ```sh
     cd $HOME
     ```
    
  2. Create Directory for virtual environment

mkdir .virtualenv
  1. Ensure Pip is installed
sudo apt install python3-pip
  1. Validate pip is installed
pip3 --version
  1. Install virtualenv via pip3.
pip3 install virtualenv
  1. Validate virtualenv location
which virtualenv
  1. Install 3.9 venv
sudo apt install python3.9-venv
  1. Install Virtual Environments Wrapper
pip install virtualenvwrapper
pip3 install virtualenvwrapper
  1. Update path
export PATH="$HOME/.local/bin:$PATH"
export PATH="/usr/bin:$PATH"
echo WORKON_HOME="~/.virtualenvs" | sudo tee -a $HOME/.bashrc
echo VIRTUALENVWRAPPER_VIRTUALENV="$HOME/.local/bin/virtualenv" | sudo tee -a $HOME/.bashrc
echo "VIRTUALENVWRAPPER_PYTHON=$(which python3)" | sudo tee -a $HOME/.bashrc
echo "source $HOME/.local/bin/virtualenvwrapper.sh" | sudo tee -a $HOME/.bashrc
source $HOME/.bashrc

Run Install Virtual Environment on Windows

If second or later virtual environment on desktop

  1. Install virtualenv via pip3.
py -m pip install --user virtualenv
  1. Configure Environment Variables and Scripts:

For Windows, find where virtualenvwrapper is installed by running

pip show virtualenvwrapper

Look for the Location field in the output.

a. Add this path to your Environment Variables (usually under "System Properties" -> "Environment Variables"). b. You might need to add the Scripts directory within this location to your PATH as well.

  1. Configure Environment variables

In powershell

$env:WORKON_HOME = "C:\Users\<currentuser>\Envs"  # Replace with your desired directory
$env:VIRTUALENVWRAPPER_PYTHON = "C:\Users\<currentuser>\AppData\Local\Programs\Python\Python39\python.exe"  # Replace with your Python path
$env:VIRTUALENVWRAPPER_VIRTUALENV = "C:\Users\<currentuser>\AppData\Local\Programs\Python\Python39\Scripts\virtualenv.exe"  # Replace with your virtualenv path
. "C:\Users\<currentuser>\AppData\Local\Programs\Python\Python39\virtualenvwrapper.bat"  # Replace with your virtualenvwrapper.bat path

1a. Make Virtual Envs for UBUNUTU

mkvirtualenv WONDER_METADATA_DEV

1b. Make Virtual Env for Windows

cd C:\Users\<current_user>\Envs
py -m venv WONDER_METADATA_DEV
  1. If existing environment configured - deactivate
deactivate
sudo pip uninstall nodeenv
pip install nodeenv
workon {virtualenv name}
nodeenv -p

Example

deactivate
cd $HOME
# cleanup any existing node
sudo rm -rf node-v18.12.1-linux-x64.tar.xz
sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* ~/.npm
sudo rm -rf /usr/local/lib/node*
sudo rm -rf /usr/local/bin/node*
sudo rm -rf /usr/local/include/node*
sudo apt-get purge nodejs npm
sudo apt autoremove
sudo pip uninstall nodeenv

3a. Activate new virtual env for UBUNUTU

deactivate
cd $HOME
# cleanup any existing node
sudo rm -rf node-v18.12.1-linux-x64.tar.xz
# sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* ~/.npm
# sudo rm -rf /usr/local/lib/node*
# sudo rm -rf /usr/local/bin/node*
# sudo rm -rf /usr/local/include/node*
sudo apt-get purge nodejs npm
sudo apt autoremove
sudo pip uninstall nodeenv
workon VIRTUAL_ENV
# EXAMPLE:
workon WONDER_METADATA_DEV
cd $VIRTUAL_ENV
# install node
wget https://nodejs.org/dist/v18.12.1/node-v18.12.1-linux-x64.tar.xz
tar -xf node-v18.12.1-linux-x64.tar.xz
sudo mv node-v18.12.1-linux-x64/bin/* ./bin/
sudo mv node-v18.12.1-linux-x64/lib/node_modules/ ./lib/node_modules/
# Verify installation using
node -v
npm -v
npm install npm@9.1.1
pip install --upgrade pip
pip install nodeenv
cd $VIRTUAL_ENV/lib/node_modules/npm
nodeenv -p
cd $VIRTUAL_ENV/lib
npm install @mermaid-js/mermaid-cli --registry=https://registry.npmjs.org
cdvirtualenv bin
echo "export PATH='$PATH:$VIRTUAL_ENV/lib/node_modules/.bin'" | sudo tee -a activate
source activate
# Test client
mmdc -h

3b. Activate Virtual Env for Windows

cd C:\Users\<current_user>\Envs
.\WONDER_METADATA_DEV\Scripts\activate

Remove local Virtual Environment

Run remove virtual environment on Ubuntu or WSL (Primary)

Run

deactivate
rmvirtualenv WONDER_METADATA_DEV

For global

sudo rm -rf venv

For local

rm -rf WONDER_METADATA_DEV

Run Unit Test Coverage Report

Run Unit Test Coverage Report on Ubuntu or WSL (Primary)

Run the following command

cd cdh_dav_python
pytest --cov-report html tests/

Set up Local development environment for Docker

Install Docker without License on Ubuntu or WSL (Primary)

Reference 1: Install Docker Engine without Docker Desktop Reference 2: Install Docker for WSL

Option 1: Convenience Script

Docker provides a convenience script at Docker Script to install Docker into development environments non-interactively. The convenience script isn't recommended for production environments, but it's useful for creating a provisioning script tailored to your needs.

  1. Run command
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
Note: You will have to wait 20 seconds
  1. Build and Run Image
cd .devcontainerlocal
sudo docker build -t WONDER_METADATA_DEV .
sudo docker run -it --rm --name WONDER_METADATA_DEV WONDER_METADATA_DEV

Option 2: Manual Install

  1. Check that you have WSL version 2
wsl --set-default-version 2
  1. Remove any old docker images
sudo apt remove docker docker-engine docker.io containerd runc
  1. Install/Upgrade dependencies
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
  1. Add Docker's official GPG key
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Add Docker's stable repository
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Install Docker Engine and Docker Compose
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Verify Docker Install
sudo docker run hello-world

Install Docker without Desktop License on Windows

Docker CLI is required for managing images. It is available for install at

Set up Local development environment for EcPaas

Install Openshift

The OC Client is used to manage all resources in a project and can be downloaded from

  1. Install OC Client

The OCP Web sh can also be used to perform most of the project administration tasks. Additional OC information is available at OpenShift Client

Install OpenShift Postgres Setup

OpenShift Client Postgres connection

Steps to follow:

Run

 oc
  • Login to: Openshift
  • Select AAD to log in.
  • Once logged in, Select "Copy Login command"
  • top right menu. This opens another login screen,
  • select AAD
  • click "Open token"
  • Copy login token to cmd oc screen
  • Run login command
  • Change to correct project:
oc project "ddt-ops-center"
  • Port-forward using
oc port-forward nccdphp-postgresql-test-32-btxvk 5432
  • (if the pod has changed, find the correct pod name using the commands below)Get list of pods using:
oc get po
oc get po|grep post (if you are using git bash as your shell)
oc get po| findstr "post" (select only PostgreSQL pods)
  • While this is running connect via Azure Data Studio Credentials sent seperately

OpenShift Client Postgres connection Troubleshooting

  • if stuck on forwarding
  • click on server name in azure data studio

Set up Local development environment for Node Web Applications

Install Node on Windows

  1. Run Node 18.12.1 Installation MSI
  2. Run Update Node to latest version
npm install -g npm

Install Poetry

Run Install Poetry on Ubuntu or WSL (Primary)

Reference: StackOverflow: Poetry with Docker

  1. Install Poetry
cd $VIRTUAL_ENV
curl -sSL https://install.python-poetry.org | python3 -
  1. Copy poetry to local bin
cp $VIRTUAL_ENV/bin/poetry ~/.local/bin

Run Install Poetry on Windows

(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -

Activate Virtual Environment

Run activate virutal environment

workon WONDER_METADATA_DEV

Update Libraries with Poetry

Prerequisites for Run Update Libraries on Ubuntu or WSL

  1. Clone Repository
  2. Open Repository in VS Code
  3. Set Python environment to a virtual environment such WONDER_METADATA_DEV
  4. Open Terminal in WSL

Run Update Libraries on Ubuntu or WSL (Primary)

cd cdh_dav_python\cdh_dav_python
poetry update

Run Update Libraries on Windows

cd cdh_dav_python\cdh_dav_python
poetry update

VS Code Python Settings

  1. Go to VS Code -> File -> Preferences -> Settings -> Workspace Settings -> Python Configuration
  2. Click Edit in settings.json
  3. Search for each of the following settings to update
  4. Add this line to your settings: "python.linting.pep8Args": ["--max-line-length=120"],
  5. Add this line to your settings: "python.linting.pep8Args": ["--ignore=E402,F841,F401,E302,E305"],
  6. Add this line to your settings: "python.analysis.typeCheckingMode": "basic"

VS Code Markdown Settings

For the markdown all in one exension

  1. Set markdown.extension.toc.levels to 2..6 to skip header

Set up Local Environment .NET Core for Web API Dev

Developer/Data Engineer Project Quick Start

  1. Decide on two part name of project
    • Root Project: Example: ocio
    • Individual Project: Example: cdh
  2. Get access to center SharePoint and set up clone initial SharePoint lists if this is the first LAVA project in the center
    • codes/value_sets
    • columns
    • datasets
    • environments
    • jobs
    • pipelines
    • projects
    • reports
    • users
    • user_roles
  3. Create GitHub repository in GitHub CDCEnt organization named {root_project}_{individual_project}: Example: ocio_cdh
  4. Clone GitHub repository to local machine and open in VSCode
  5. Create docs directory in root of project and copy standard files
    • conf.py
    • davt_t.docx
    • davt_t.pptx
    • index.rst
    • lua_word.lua
    • lua_pdf.lua
    • lua_html_pptx.lua
    • lua_md.lua
  6. Request top level a storage container in EDAV if this is the first EDAV project in the center
  7. Configure top level project folder in EDAV storage container
    • Set up top level foder: example:
      • ocio_cdh
    • Set up dev and qa subfolders: example:
      • ocio_cdh/dev
    • Set up ingress, archive and config subfolders: example:
      • ocio_cdh/dev/ingress
      • ocio_cdh/dev/archive
      • ocio_cdh/dev/config

Developer/Data Engineer Troubleshoot Problems and Errors

Problem: Java: Windows ignores JAVA_HOME

Symptom: Windows ignores JAVA_HOME

Resolution:

The Java installer will put a copy of java.exe (but no libraries) in the C:\Program Files (x86)\Common Files\Oracle\Java\javapath directory and add that directory to the beginning of the PATH variable.

If you don"t use a full path, the copy of java.exe to run is found by using the PATH system variable. Since this directory doesn"t contain the DLLs of a particular Java runtime version, one is located one by looking at the registry.

So, you either need to modify the registry, or replace the javapath entry with the version of Java you want in your PATH system (not user) variable.

Recommend setting registry

    Computer\HKEY_CURRENT_USER\Environment\JAVA_HOME
    C:\apps\Java\jdk1.8.0_333

Reference: Stack Overflow

Problem: Node: Unable to remove existing node_modules

Problem: Unable to remove existing local node_modules

Solution:

Run Command

cd path_with_modules
find . -name 'node_modules' -type d -prune -exec rm -rf '{}' +

Problem: Unable to remove all existing global node_modules

Solution:

Run Command

npm ls -gp --depth=0 | awk -F/ '/node_modules/ && !/\/npm$/ {print $NF}' | xargs npm -g rm

Problem: Python: Unable to remove existing python packages

Problem: Unable remove existing python packages

Solution: Run from elevated command prompt to removes all local packages in your environment

pip freeze | xargs pip uninstall -y

Problem: NPM Won't Run After Upgrade

Problem: NPM Won't Run After Upgrade using a manual install

Reference: Stack Overflow

Solution:

If npm is no longer installed in /usr/bin/npm, then chances are good bash(1) has hashed the executable name. The hashing saves repeated searches of all directories in your PATH every time you execute common programs. Since programs almost never change directories, this is usually a great idea. To fix this isue, remove the hash by running the following command:

hash -r.

Problem: WSL: Ubuntu: Unable to reset WSL root password in Ubuntu

Symptom: Unable to reset WSL root password in Ubuntu

Reference: AskUbuntu

Solution:

  1. Open cmd.exe
  2. Type:
wsl -u root
  1. Change the password:
passwd username
  1. Type:
exit
  1. Type:
wsl
  1. Confirm the new password works:
sudo echo hi
spark.conf.set("spark.databricks.pyspark.enablePy4JSecurity", "false")

Error: Azure B2C: The subscription is not registered to use namespace 'Microsoft.AzureActiveDirectory'

Symptom: Receive error when creating an Azure B2C tenant: The subscription is not registered to use namespace 'Microsoft.AzureActiveDirectory'. See https://aka.ms/rps-not-found for how to register subscriptions.

Reference: Blog

Resolution:

  1. Login to azure. Start up a shell and type the following command.

    az login
    

    This will start up a browser and you will need to log into Azure.

  2. Get subscription list. If you have one subscription then the default will be selected. If not then you will need to check your subscriptions and then set the right one. Using the account list command you can get a list of your subscriptions.

    az account list
    

    You will get a list of subscriptions that you have access to. You can then set the subscription you want to work on.

  3. Set the subscription to work on.

    az account set --subscription "ZFI4-PERSONAL-DEV"
    
  4. Register the namespace provider

    az provider register --namespace Microsoft.AzureActiveDirectory
    

Error: Azure: ClientSecret: Secret should be an Azure Active Directory application's client secret

Symptom: Receive error: secret should be an Azure Active Directory application's client secret when calling function: credential = ClientSecretCredential(tenant_id, client_id, client_secret)

Resolution:

    - If running from local jupyter notebook ensure you have set the local python environment for your project: Example: OD_NHANES_DEV
    - Use the client secret of the service principal, not the client secret of the app registration.
    - Ensure that the client secret of the service principal is set in the system environment variable for your application: Example: LAVA_OD_NHANES_DEV_AZURE_CLIENT_SECRET

Error: Databricks: Spark: Cannot find catalog plugin class for catalog "spark_catalog": org.apache.spark.sql.delta.catalog.DeltaCatalog

Problem: org.apache.spark.SparkException: Cannot find catalog plugin class for catalog "spark_catalog": org.apache.spark.sql.delta.catalog.DeltaCatalog

Resolution:

From your virtual environment. You can select using workon venv_name

Run

pyspark --packages io.delta:delta-core_2.12:1.0.0 --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog"

or

Copy io.delta:delta-core_2.12:1.0.0 JAR file to $SPARK_HOME/lib and restart

This should make error go away.

Reference: Stack Overflow

Error: Databricks: Error in SQL statement: SecurityException: User does not have permission SELECT on any file

Symptom: Table creation fails in Databricks with security exception: Error in SQL statement: SecurityException: User does not have permission SELECT on any file.

Reference: Databricks KB

Solution:

Run the following command:

GRANT SELECT ON ANY FILE TO `user1`

Warning

It is important to understand the security implications of granting ANY FILE permissions on a filesystem. You should only grant ANY FILE to privileged users. Users with lower privileges on the cluster should never access data by referencing an actual storage location. Instead, they should access data from tables that are created by privileged users, thus ensuring that Table ACLS are enforced.

In addition, if files in the Databricks root and data buckets are accessible by the cluster and users have MODIFY privileges, the admin should lock down the root.

Error: Databricks: Spark: Illegal character in path

Problem: Spark illegal character in path

Resolution:

run

spark-class org.apache.spark.deploy.master.Master

then

spark-shell --master spark://ip_and_port_from_step_above

example

spark-shell --master spark://192.168.86.27:7077

Reference: Stack Overflow

Error: Databricks: Spark: Cannot find catalog plugin class

Symptom: Receive error: Cannot find catalog plugin class for catalog "spark_catalog"

Resolution:

Copy delta-core_2.13-2.1.0 JAR file to $SPARK_HOME/lib and restart, this error goes away.

Error: Databricks: Spark: WARN ProcfsMetricsGetter

Symptom: Receive errror: Encountering "WARN ProcfsMetricsGetter: Exception when trying to compute pagesize" error when running Spark

Resolution

Adding PYTHONPATH environment variable with value as:

%SPARK_HOME%\python;%SPARK_HOME%\python\lib\py4j-<version>-src.zip;%PYTHONPATH%

Reference: Stack Overflow

Error: Databricks: Spark: py4j: Constructor public com.databricks.backend.daemon.dbutils.FSUtilsParallel(org.apache.spark.SparkContext) is not whitelisted

Problem: Error: py4j.security.Py4JSecurityException: Constructor public com.databricks.backend.daemon.dbutils.FSUtilsParallel(org.apache.spark.SparkContext) is not whitelisted when connecting from Databricks to ADSL from Datascience Cluster

Reference: Databricks Community Q and A

Solution:

Update function setup_spark_configuration in environment_metadata class

spark.conf.set("spark.databricks.pyspark.enablePy4JSecurity", "false")

Error: Databricks: SQL: Table creation fails with security exception

Problem: Table creation fails with security exception

Reference: Databricks KB

Solution:

GRANT SELECT ON ANY FILE TO `user1`

Warning

It is important to understand the security implications of granting ANY FILE permissions on a filesystem. You should only grant ANY FILE to privileged users. Users with lower privileges on the cluster should never access data by referencing an actual storage location. Instead, they should access data from tables that are created by privileged users, thus ensuring that Table ACLS are enforced.

In addition, if files in the Databricks root and data buckets are accessible by the cluster and users have MODIFY privileges, the admin should lock down the root.

Error: Docker: ERROR: failed to solve: error getting credentials - err: docker-credential-desktop.exe resolves to executable in current directory (./docker-credential-desktop.exe), out

Symptom: During Docker Build Receive ERROR: failed to solve: error getting credentials - err: docker-credential-desktop.exe resolves to executable in current directory (./docker-credential-desktop.exe), out:

Reference: Stack Overflow

Solution:

  1. Run command:

        code ~/.docker/config.json
    
  2. Change credsStore to credStore

  3. Save

Error: Docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

Symptom: Receiving error: "Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? " when trying to run a docker build command

Reference: Stack Overflow

Solution:

Run command:

sudo dockerd

Error: Docker: During connect receive message: This error may indicate that the docker daemon is not running

Symptom: Receive error: error during connect: This error may indicate that the docker daemon is not running.: when attempting to run docker image

Reference: Stack Overflow

Details:

  • The error is related to message: In the default daemon configuration on Windows, the docker client must be run elevated to connect

Resolution with Docker Desktop:

  1. Verify that Docker Desktop application is running. If not, launch it: that will run the docker daemon (just wait few minutes).
  2. If the error still persists, you can try to switch Docker daemon type, as explained below:

Resolution with Powershell:

  1. Open Powershell as administrator
  2. Launch command: & 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchDaemon

Resolution with CMD:

  1. Open cmd as administrator
  2. Launch command: "C:\Program Files\Docker\Docker\DockerCli.exe" -SwitchDaemon

Error: Git: remote: error: File x is 296.35 MB; this exceeds GitHub's file size limit of 100.00 MB

Symptom: Receive error: git push origin dev-zfi4:dev-zfi4 remote: warning: File cdh/cdh_ocio_ingress/ehr/encounters.csv is 87.59 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB remote: error: Trace: 2c8fbfed93d4f4c52468dde090cd8d14a1a311d13a6aa58ea35cb9cb8c5d2577 remote: error: See http://git.io/iEPt8g for more information. remote: error: File cdh/cdh_ocio_ingress/ehr/observations.csv is 296.35 MB; this exceeds GitHub's file size limit of 100.00 MB remote: error: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com. To https://github.com/cdcent/data-ecosystem-services.git ! [remote rejected] dev-zfi4 -> dev-zfi4 (pre-receive hook declined)

Reference: Stack Overflow

Solution:

git filter-branch --tree-filter 'rm -rf path/to/your/file' HEAD
git push

Error: Git: Support for password authentication was removed. Please use a personal access token instead

Symptom: Receive error: Support for password authentication was removed. Please use a personal access token instead. when trying to push to a remote repository

Reference: Stack Overflow

Solution:

For Ubuntu:

For Linux, you need to configure the local GIT client with a username and email address,

git config --global user.name "your_github_user_id"
git config --global user.email "your_github_email"
git config -l

Error: Git: Tag: Would clobber existing tag

Symptom: CICD or VS Code Tag give error "would clobber existing tag"

Solution:

Run Git

git fetch --tags -f

Then pull again.

Reference: Stack Overflow

Error: Git: fatal: mmap failed: Invalid argument

Symptom: Receiving error: Git fatal: mmap failed: Invalid argument

Reference: Stack overflow

Solution:

  1. Log into OneDrive
  2. Finish synch

Error: Java: Gateway process exited before sending its port number

Problem: "Java gateway process exited before sending its port number"

Resolution:

On All OS:

Check that the following environment variable is set where 1 is the number of processors

export PYSPARK_SUBMIT_ARGS="--master spark:192.168.86.27:7077"

or

export PYSPARK_SUBMIT_ARGS="--master local[1] pyspark-shell"

On Ubuntu: install openjdk-8-jdk package

sudo apt-get install openjdk-8-jdk-headless -qq

On MacOs: run:

java -version

Verify Resolution In Python:

from pyspark import SparkContext
sc = SparkContext.getOrCreate()

# check that it really works by running a job
# example from http://spark.apache.org/docs/latest/rdd-programming-guide.html#parallelized-collections
data = range(10000)
distData = sc.parallelize(data)
distData.filter(lambda x: not x&1).take(10)

OR

Reference: Stack Overflow

Error: Java: Maven: javax.net.ssl.SSLHandshakeException: PKIX path building failed

Symptom: Server access error at url Maven URL (javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target)

Resolution:

Run:

From cli change dir to jre\bin

  1. First of all you copy the URL that you are connecting to and paste it in your browser. Just paste the url in the address bar and press enter. Example: Maven Repo
  2. Now click on the lock button on the left of the url to see Certificate (valid)
  3. Click on View Certificate to open up the following popup
  4. Click on the Certification Path tab, where you will see the certificate chain
  5. Double click on the parent certificate
  6. Check keystore (file found in C:\apps\jdk-8.0.342.07-hotspot\jre\lib\security directory) a. cd C:\apps\jdk-8.0.342.07-hotspot\bin b. keytool -list -keystore cacerts c. Password is changeit d. Download and save all certificates in chain from needed server.
  7. Remove "read-only" attribute on file ..\lib\security\cacerts),
  8. Copy repo1.maven.org.crt to "C:\apps\Java\jdk1.8.0_333\lib\security\repo1.maven.org.crt" and "C:\Users\zfi4\OneDrive - CDC\LAVA Analytics\davt-dev-jcbowyer_templates\certs\repo1.maven.org.crt"
  9. Add certificates
keytool -import -alias repo1_maven_org -keystore C:\apps\jdk-8.0.342.07-hotspot\jre\lib\security\cacerts -file  "C:\Users\zfi4\OneDrive - CDC\LAVA Analytics\davt-dev-jcbowyer\_templates\certs\repo1.maven.org.crt"

keytool -import -alias repo_spark_packages_org -keystore C:\apps\jdk-8.0.342.07-hotspot\jre\lib\security\cacerts -file  "C:\Users\zfi4\OneDrive - CDC\LAVA Analytics\davt-dev-jcbowyer\_templates\certs\repos.spark-packages.org.crt"
  1. Run the keytool command again to verify that your private root certificate was adde
keytool -list -keystore C:\apps\Java\jdk1.8.0_333\lib\security\cacerts

Reference: Stack Overflow Reference: Java Samples

Error: Logic Apps: O365 User Name and Password Entry Window Disappears on SharePoint Connector Setup

The pop-up window for user name and password entry may close immediately when Cached Credentials expired.

  1. Try deleting your cached O365 credentials in Credentials Manager.
  2. If clearing O365 casched credentials does not work, try deleting certificates.
  3. If neither deleting you cached O365 credentials nor deleting ceritifates works, try deleting the identities folder that may still be cached:
  • Close all office applications
  • Press Win+R and type regedit to open Registry Editor
  • From Registry Editor, browse to: KEY_CURRENT_USER\Software\Microsoft\Office\16.0\Common\Identity\Identities
  • Delete the identities folder.
  • Open Office and sign in again to check if the same problem will occur.

Error: Logic Apps: Save logic app failed: 'Execute_JavaScript_Code' of type 'JavaScriptCode'

Symptom: Receive Error: Failed to save logic app logic-sps-list-export-all-environments. The workflow must be associated with an integration account to use the workflow run action 'Execute_JavaScript_Code' of type 'JavaScriptCode'.

Reference: Stack Overflow

Resolution: To run the inline code action you need an integration account. These have some different pricing tiers. You only need to create it and then on the Logic App Workflow settings associate it.

Error: Mermaid: Expecting 'NEWLINE', 'SPACE', 'GRAPH', got 'ALPHA'

Problem: Mermaid raises error Expecting 'NEWLINE', 'SPACE', 'GRAPH', got 'ALPHA' when it encounters bracket.

Reference: GitHub

The issue seems to be, that mermaid.cli ships with an old version of mermaid.min.js which doesn't support these kinds of node types/attributes.

Resolution:

Explicitly install mermaid and then copy dist/mermaid.min.js into the mermaid.cli folder within node_modules

Version is avaialble at unpkg.com-mermaid

Error: Node: NPM: PhantomJS not found on PATH

Symptom: Receiving error: "PhantomJS not found on PATH" when running npm install

Reference: StackOverflow

Solution:

  1. Run command
sudo npm uninstall phantomjs
  1. Run command
sudo npm install phantomjs -g
  1. If fails global install try local install
sudo npm install phantomjs -s

Error: Python: Virtualenv - workon command not found

Symptom: workon command not found

Reference: StackOverflow

Details:

The workon command is not available if you have restarted the shell.

If you want this to work with each shell, you'll need to add these to your ~/.bashrc file

Solution:

  1. Run
export PATH="$HOME/.local/bin:$PATH"
echo "export WORKON_HOME=$HOME/.virtualenvs" | sudo tee -a $HOME/.bashrc
echo "VIRTUALENVWRAPPER_PYTHON='/usr/lib/python3.9'" | sudo tee -a $HOME/.bashrc
echo "source $HOME/.local/bin/virtualenvwrapper.sh" | sudo tee -a $HOME/.bashrc
source $HOME/.bashrc

Error: Puppeteer: can't launch chromium, missing shared library libgbm.so

Symptom: Receiving error: "Error: Failed to launch the browser process! /usr/bin/chromium: error while loading shared libraries: libgbm.so.1: cannot open shared object file: No such file or directory"

Details: Puppeteer is a Node library which provides a high-level API to control headless Chrome or Chromium over the DevTools Protocol. It can also be configured to use full (non-headless) Chrome or Chromium. It is not launching when running mermaid-cli.

Reference: GitHub

Solution:

Add the lgm package to the Dockerfile/Setup process

sudo apt-get update
sudo apt-get install -y libgbm-dev

Error: Python: Current Python version (3.8.10) is not allowed by the project (^3.9)

Symptom: Error: Python: Current Python version (3.8.10) is not allowed by the project (^3.9). Current Python version (3.8.10) is not allowed by the project (^3.9). Please change python executable via the "env use" command.

Reference: Stack Overflow

Details: Please change python executable via the "env use" command.

Solution:

  1. You can get the path to your Python version by running
which python3.9
  1. To update your environment to latest path run
poetry env use /usr/bin/python3.9

Error: React: NodeJS: Ubuntu: Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/node-sass/build'

Symptom: Receiving Error when running npm link command: Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/node-sass/build'

Reference: Stack Overflow

Details: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/node-sass/build'

Solution:

Change the ownership of folder node_modules, because you use sudo npm install -g node-sass, so its ownership is set to root.

sudo chown -R root:$(whoami) /usr/local/lib/node_modules/
sudo chmod -R 775 /usr/local/lib/node_modules/

Error: Sphinx: WARNING: dot command 'dot' cannot be run (needed for graphviz output), check the graphviz_dot setting

Symptom: Receiving error: "WARNING: dot command 'dot' cannot be run (needed for graphviz output), check the graphviz_dot setting" when building HTML Sphinx documentation

Reference: Stack Overflow Reference: Blog

Details: The problem could be referred to an incorrect configuration of "dot" executable from GraphViz PATH.

Solution:

Adding the PATH using the export command, such as:

export PATH=$PATH:~/opt/bin

Error: Ubuntu: InRelease is not valid yet (invalid for another 1d 21h 40min 43s). Updates for this repository will not be applied

Symptom: Ubuntu: InRelease is not valid yet (invalid for another 1d 21h 40min 43s). Updates for this repository will not be applied. occurs when running sudo apt-get update

Reference: StackOverflow

Details: Occurs when the system clock in Ubuntu is not Correct

Solution: Run the following command to fix the issue:

sudo date -s "$(wget -qSO- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z"
sudo apt update

Error: Ubuntu: System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down

Symptom: Receiving error: "System has not been booted with systemd as init system (PID 1). Can't operate. Failed to connect to bus: Host is down" when running : sudo systemctl daemon-reload

Reference: Github Gist

Solution: Run the following command to fix the issue:

sudo apt-get update && sudo apt-get install -yqq daemonize dbus-user-session fontconfig
sudo daemonize /usr/bin/unshare --fork --pid --mount-proc /lib/systemd/systemd --system-unit=basic.target
exec sudo nsenter -t $(pidof systemd) -a su - $LOGNAME

Error: Ubuntu: APT: Release file for Ubuntu File is not valid yet

Symptom: Receiving error: "Release file for Ubuntu File is not valid yet" during apt-get update

Reference: How2Shout

Solution:

  1. Check your date and time settings. If they are not correct, then you can fix them by running the following command:
sudo dpkg-reconfigure tzdata

Error: VS Code Ubuntu/Docker/Web Server: Failed to bind to address already in use

Symptom: Deploying a project to a local web server return error message: VS Code Ubuntu/Docker/Web Server: Failed to bind to address already in use

Reference: Stack Overflow

Solution:

  1. Determine which ports are blocked

    lsof -i: <port number>
    

    example:

    lsof -i: 5001
    
  2. Kill the process that is blocking the port

    kill -9 <process number>
    

    example:

    kill -9 1600
    

Error: Ubuntu: APT: Permission Denied when calling apt-get update from WSL

Symptom: Permission Denied when calling apt-get updatee from WSL

Details:

  1. Run wsl command from ubuntu

  2. Receive Error

    Reading package lists... Done E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied) E: Unable to lock directory /var/lib/apt/lists/

Reference: AskUbuntu

This line says you are not authorized to install/update. You need to be root to do it....

Resolution with WSL:

Add sudo before apt-get or you can do sudo -s to be root.

sudo apt-get update

or

Run the following command to promote the current terminal to run as root until the terminal is closed.

sudo -s
apt-get update

Error: Ubuntu: ImportError: No module named pip ' right after installing pip

Symptom: Receive error: "ImportError: No module named pip" right after installing pip

Reference: Stack Overflow

Details: /home/jcbow/.virtualenvs/WONDER_METADATA_DEV/bin/python: No module named pip

Resolution:

First, ensure that python is included in the PATH variable, then run Then run the following

python -m ensurepip

Error: Ubuntu: Failed to call method: org.freedesktop.DBus.Properties.Get: object_path= /org/freedesktop/UPower: org.freedesktop.DBus.Error.ServiceUnknown

Problem: When browsing https://127.0.0.1:5000 receive error: SSL: Handshake failed. while not logged into ZScaler

Solution:

Here are the steps you can follow to fix this error:

  1. Check if the UPower daemon is installed on your system by running the following command in the terminal:

    systemctl status upower.service
    

    If the command output shows that the UPower service is not running or is not installed, you can install it using the package manager for your system (e.g. apt-get for Ubuntu/Debian, dnf for Fedora, pacman for Arch Linux, etc.).

  2. Install the UPower daemon using the package manager. For example, on Ubuntu/Debian, you can run the following command:

    sudo apt-get install upower
    

    This command installs the upower package, which provides the UPower daemon.

  3. After installing the UPower daemon, start the service using the following command:

    sudo systemctl start upower.service
    
  4. Verify that the UPower daemon is now running by checking the status using the following command:

systemctl status upower.service
  1. Restart your Flask application and try again. The error message should no longer appear.

Note that the specific steps for installing and starting the UPower daemon may vary depending on your system and distribution. You may need to consult the documentation or package manager for your system to find the appropriate package and commands to install and start the UPower daemon.

Error: Ubuntu: SSL: Handshake failed error when browsing local web site in google-chrome from Ubuntu

Problem: When browsing https://127.0.0.1:5000 receive error: SSL: Handshake failed. when logged into ZScaler

[39102:39117:0503/091443.791015:ERROR:ssl_client_socket_impl.cc(992)] handshake failed; returned -1, SSL error code 1, net_error -202 [39102:39117:0503/091447.197078:ERROR:ssl_client_socket_impl.cc(992)] handshake failed; returned -1, SSL error code 1, net_error -202 [39102:39117:0503/091447.998238:ERROR:ssl_client_socket_impl.cc(992)] handshake failed; returned -1, SSL error code 1, net_error -202 [39062:39086:0503/091448.177119:ERROR:cert_issuer_source_aia.cc(134)] AiaRequest::OnFetchCompleted got error -301 [39062:39086:0503/091448.178211:ERROR:cert_issuer_source_aia.cc(134)] AiaRequest::OnFetchCompleted got error -301 [42678:42704:0503/093402.088689:ERROR:cert_verify_proc_builtin.cc(677)] CertVerifyProcBuiltin for clientservices.googleapis.com failed: ----- Certificate i=2 (CN=NCA-DPI1,OU=ITSO,O=Centers for Disease Control and Prevention,L=Atlanta,ST=Georgia,C=US) ----- ERROR: No matching issuer found

[39062:39086:0503/091448.178351:ERROR:cert_verify_proc_builtin.cc(677)] CertVerifyProcBuiltin for optimizationguide-pa.googleapis.com failed: ----- Certificate i=2 (CN=NCA-DPI1,OU=ITSO,O=Centers for Disease Control and Prevention,L=Atlanta,ST=Georgia,C=US) ----- ERROR: No matching issuer found

Solution:

  1. Verify that your Python installation has a valid CA bundle that can be used to verify the SSL/TLS certificate. You can do this by running the following command in your terminal:
python -c "import ssl; print(ssl.get_default_verify_paths())"

This should print out the paths to the CA bundle and the OpenSSL configuration file used by Python. If the paths are not found or are invalid, you may need to update your Python installation or install a valid CA bundle.

Path should return

/usr/lib/ssl/certs
  1. Download the missing CA certificate from the server that issued the certificate. You can use the openssl s_client command to retrieve the certificate, like this:
cd $HOME
openssl s_client -showcerts -connect clientservices.googleapis.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM > clientservices.googleapis.com.crt
openssl s_client -showcerts -connect optimizationguide-pa.googleapis.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM >  optimizationguide-pa.googleapis.com.crt
openssl s_client -showcerts -connect safebrowsing.googleapis.com.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM >  safebrowsing.googleapis.com.crt
openssl s_client -showcerts -connect accounts.google.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM >  accounts.google.com.crt
openssl s_client -showcerts -connect update.googleapis.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM >  update.googleapis.com.crt
openssl s_client -showcerts -connect www.google.com:443 </dev/null 2>/dev/null | openssl x509 -outform PEM >  www.google.com.crt
 dns.google
  1. Install the CA certificate in your system's trusted CA store by copying it to the /usr/local/share/ca-certificates/ directory:
sudo cp clientservices.googleapis.com.crt /usr/local/share/ca-certificates/
sudo cp optimizationguide-pa.googleapis.com.crt /usr/local/share/ca-certificates/
sudo cp  safebrowsing.googleapis.com.crt /usr/local/share/ca-certificates/
sudo cp accounts.google.com.crt /usr/local/share/ca-certificates/
sudo cp update.googleapis.com.crt /usr/local/share/ca-certificates/
sudo cp www.google.com.crt /usr/local/share/ca-certificates/
  1. Update the CA bundle by running the following command:
sudo update-ca-certificates

Error: Ubuntu: CURL: SSL: Certificate problem: unable to get local issuer certificate when installing docker

Symptom: Receive error: curl: (60) SSL certificate problem: unable to get local issuer certificate when installing docker

Reference: Stack Overflow

Details:

The problem may be related to the way the firewall is handling certificates. The certificate of the firewall may be untrusted/unknown from within the wsl environment.

Resolution:

Option 1:

  1. If logged into zscaler, log out
  2. Try Again

Option 2:

Export the firewall certificate.

  1. Export the firewall certificate from the windows certmanager (certmgr.msc).
  2. The certificate may be located at "Trusted Root Certification Authorities\Certifiactes"
  3. Export the certificate ZScaler Root CA as a DER coded x.509 and save it under e.g. "_templates/certs/zscaler.cer".

Configure WSL.

    open wsl terminal from VS Code : should default to Ubuntu: directory "/Users/zfi4/OneDrive - CDC/LAVA Analytics/davt-dev-jcbowyer"
wsl
openssl x509 -inform DER -in _templates/certs/zscaler.cer -out ./zscaler.crt
sudo cp zscaler.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

Error: Ubuntu: Python installation error: ImportError: No module named apt_pkg

Problem: Python installation error: ImportError: No module named apt_pkg occurs when running sudo apt-get update

Reference: Stack Overflow

Solution:

```sh
sudo apt remove python3-apt
sudo apt autoremove
sudo apt autoclean
sudo apt install python3-apt
```

Error: Ubuntu: NPM can't find module "semver" error in Ubuntu 19.04

Problem: NPM can't find module "semver" error in Ubuntu 19.04 when installing nodejs upgrade

Reference: AskUbuntu

Solution:

Run the following commands to uninstall node:

cd $HOME
sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* ~/.npm
sudo rm -rf /usr/local/lib/node*
sudo rm -rf /usr/local/bin/node*
sudo rm -rf /usr/local/include/node*
sudo apt-get purge nodejs npm
sudo apt autoremove

Run the following commands to reinstall node:

workon WONDER_METADATA_DEV
cd $VIRTUAL_ENV
rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* ~/.npm
rm -rf /usr/local/lib/node*
rm -rf /usr/local/bin/node*
rm -rf /usr/local/include/node*

# install node with nvm - node version manager
# wget https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh
# chmod +x install.sh
# ./install.sh
# source ~/.bashrc
# nvm list-remote

# install node with wget
wget https://nodejs.org/dist/v18.12.1/node-v18.12.1-linux-x64.tar.xz
tar -xf node-v18.12.1-linux-x64.tar.xz
rsync -av  node-v18.12.1-linux-x64/bin/* ./bin
rsync  -av  node-v18.12.1-linux-x64/lib/node_modules/ ./lib/node_modules/
cd $VIRTUAL_ENV/bin

hash -r

# Verify installation using
node -v
npm -v

npm install puppeteer
npm install npm@9.1.2
npm install  @mermaid-js/mermaid-cli

sudo apt-get update
sudo apt-get install -y libgbm-dev

Error: VSCode: End of line character is invalid

Symptom: Receiving error: "End of line character is invalid"

Reference: Boot.dev Blog

Solution for One File:

Unless you work on a Windows-only team, the answer is almost always to change all your code to the Unix default of LF.

  1. Open VS Code and go the the bottom right of the screen in VS Code
  2. Click the button that says LF or CRLF and change to LF (most all cases)

Soulution for All New Files:

For Workspace Tab

  1. Open VS Code
  2. Open File Menu > Preferences > Settings
  3. Search for CRLF
  4. Change Files: EOL Setting to LF

For User Tab

  1. Open VS Code
  2. Open File Menu > Preferences > Settings
  3. Search for CRLF
  4. Change Files: EOL Setting to LF

Solution for All Existing Files

  1. Download VS Code Exntension: Change LF to CRLF

Problem: WSL: Github clone fails: "fatal: unable to access 'https://github.com/cdcent/data-ecosystem-services.git': Could not resolve host: github.com':"

Symptom: Trying to clone a github repository and receive error: "fatal: unable to access Could not resolve host: github.com "

Reference: Stack Overflow

Resolution:

Option 1:

  1. Restart Wifi

Option 2:

  1. Run terminal command in WSL:
git config --global --unset https.proxy
  1. Restart Terminal in WSL:

Option 3:

  1. Log Off ZScaler
  2. Try again

Option 4:

  1. Log Back into ZScaler
  2. Try again

Option 5:

Fix wrong/empty /etc/resolv.conf file.

To view contents of /etc/resolv.conf file:

code  /etc/resolv.conf

To fix:

sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'
sudo chattr +i /etc/resolv.conf

Problem: WSL: "Logon failure: the user has not been granted the requested logon type at this computer."

Symptom: Trying to connect to WSL from Windows Terminal and receive error: "Logon failure: the user has not been granted the requested logon type at this computer."

Reference: Stack Overflow

Solution:

  1. Open Powershell as Administrator
  2. Run the following command:
Get-Service vmcompute | Restart-Service

Problem: WSL: Windows: Shell Script keeps exiting unexpectedly

Symptom: WSL windows keeps exiting unexpectedly

Reference: SuperUser

Details:

  1. Examine your wsl -l -v output
  2. It may show that the docker-desktop-data instance got set as the default when you uninstalled Ubuntu.
  3. Docker-desktop-data is not a bootable instance, since it has no /init in it.

Resolution with Powershell or CMD:

wsl --set-default Ubuntu-20.04

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cdh_dav_python-202402.0.20.tar.gz (18.0 MB view hashes)

Uploaded Source

Built Distribution

cdh_dav_python-202402.0.20-py3-none-any.whl (18.2 MB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page