import logging
import logging.handlers
# flake8: noqa
[docs]def init_conda_arcpy_env():
"""
Initialize conda environment with Arcgis Pro
"""
# Try importing lxml
try:
from lxml import etree
except ImportError:
import os
import sys
if "python" in sys.executable:
root_dir = os.path.dirname(sys.executable)
else:
import subprocess
try:
conda_env_list = subprocess.run(
"conda env list", capture_output=True, shell=True, encoding="UTF-8"
).stdout
conda_env_list = conda_env_list.split("\n")
curr_env = [env for env in conda_env_list if "*" in env][0]
root_dir = [elem for elem in curr_env.split(" ") if elem][-1]
except IndexError:
os_file = os.__file__
root_dir = os.path.dirname(os.path.dirname(os_file))
except Exception:
raise ImportError(
"Cannot import lxml. Please try 'pip uninstall lxml -y' then 'pip install lxml'."
)
os.environ["PATH"] = root_dir + r"\Library\bin;" + os.environ["PATH"]
print(f"Missing lxml DLLs. Completing PATH: {os.environ['PATH']}")
from lxml import etree # Try again
[docs]class ArcPyLogHandler(logging.handlers.RotatingFileHandler):
"""
Custom logging class that bounces messages to the arcpy tool window as well
as reflecting back to the file.
"""
[docs] def emit(self, record):
"""
Write the log message
"""
import arcpy
try:
msg = record.msg % record.args
except:
try:
msg = record.msg.format(record.args)
except:
msg = record.msg
if record.levelno >= logging.ERROR:
arcpy.AddError(msg)
elif record.levelno >= logging.WARNING:
arcpy.AddWarning(msg)
elif record.levelno >= logging.INFO:
arcpy.AddMessage(msg)
super(ArcPyLogHandler, self).emit(record)