skip to Main Content

I have an Azure Function in Python and I am trying to use the python-gnupg wrapper to invoke a GnuPG binary while doing local development.

This is the code I am trying out inside of the Azure Function with a HTTP Trigger.

import gnupg
import tempfile
import subprocess
import azure.functions as func
import logging

@app.route(route="PGPOne")
def PGPOne(req: func.HttpRequest, context: func.Context) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')

# Correctly obtaining the GPG binary path
gpg_path = r'C:PGPDdependenciesgpg.exe'

# Testing the GPG binary works
result = subprocess.run([gpg_path, '--version'], capture_output=True, text=True)
print(result.stdout)

# Creating a temporary directory for GPG home
temp_dir = tempfile.mkdtemp()
print(f"Temporary GPG home directory: {temp_dir}")

# Initializing GPG with the temporary home directory
gpg = gnupg.GPG(homedir=temp_dir, binary=gpg_path)

name = req.params.get('name')
if not name:
    try:
        req_body = req.get_json()
    except ValueError:
        pass
    else:
        name = req_body.get('name')

if name:
    return func.HttpResponse(f"Hello, {name}. This HTTP triggered function executed successfully.")
else:
    return func.HttpResponse(
         "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
         status_code=200

The code blocks [Testing the GPG binary works] and [Creating a temporary directory for GPG home] both work as expected and I get the following outputs for the respective print statements.

Temporary directory: C:Users<myusername>AppDataLocalTemptmpxacvv8_i
GPG binary path: C:PGPDdependenciesgpg.exe

But the invocation of

gnupg.GPG(homedir=temp_dir, binary=gpg_path)

results in an error starting with –

Python HTTP trigger function processed a request.
[2024-03-18T04:13:19.620Z] Creating directory: C:PGPD'C:Users<myusername>AppDataLocalTemptmpxacvv8_i'
[2024-03-18T04:13:19.658Z] [WinError 123] The filename, directory name, or volume label syntax is incorrect: "C:\PGPD\'C:"

Why is this part being prefixed in the invocation while Creating directory:

 C:PGPD'

What am I doing wrong and how to correct this?


This is while debugging the function locally using Function Core Tools and using Python 3.10 in a virtual env setting within VS Code.

And I have brought in the GnuPG binary dependency into the code folder structure as recommended by Microsoft docs.

2

Answers


  1. The code which worked for me is below and you can integrate into azure functions and I followed Document:

    import gnupg
    import tempfile
    import os
    import subprocess as rithsb
    
    rithgpg_path = r'C:Program Files (x86)GnuPGbingpg.exe'
    oute = rithsb.run([rithgpg_path, '--version'], capture_output=True, text=True)
    print(oute.stdout)
    rith_temp_dir = tempfile.mkdtemp()
    print(f"Temporary GPG home directory: {rith_temp_dir}")
    gpg = gnupg.GPG(gnupghome=os.path.abspath(rith_temp_dir))
    print(gpg)
    

    Output:

    enter image description here

    Login or Signup to reply.
  2. @gillivilla Are you able to solve this? @RithwikBojja I am working on the same. My code is working locally using httptrigger to decrypt the file but is not working from azure portal? Any help would be really appreciated.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search