Merge branch 'update_poetry'

- Update poetry
- Fix OSX and Ubuntu installation
- Latest version wkhtmltopdf
- More documentation
This commit is contained in:
Mathieu Benoit 2024-12-01 04:58:15 -05:00
commit e96a83f036
20 changed files with 637 additions and 366 deletions

View file

@ -34,6 +34,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Script search class model can output into json format and support field information
- Improve Docker minimal installation docs in README for Ubuntu, test with Debian (https://github.com/ERPLibre/ERPLibre/issues/73)
- Statistic script to show evolution module into ERPLibre support Odoo 17 and Odoo 18
- Latest version wkhtmltopdf 0.12.6.1-3
### Fixed
@ -41,6 +42,7 @@ to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
- Improve python code writer efficience
- Config generator supporting space into ERPLibre directory
- Script to update Poetry support @ URL
- OSX and recent Ubuntu installation
## [1.5.0] - 2023-07-07

View file

@ -2,7 +2,7 @@
ERPLibre is a CRM/ERP platform including automated installation, maintenance, and development of open source modules of
the Odoo community version. It is a "soft-fork" of the Odoo Community Edition (OCE), meaning it aims at contributing back
upstream.
upstream.
It is based on a set of production-ready modules, supported by the Odoo Community Association (OCA) and an
ecosystem of specialized companies. This solution ensures digital sovereignty in a local environment while integrating
pre-trained Generative Transformers (GPT), bringing an additional dimension to data management and automation.
@ -17,7 +17,7 @@ Select a guide to install your environment.
This has been tested in Debian 12 and Ubuntu 24.04 LTS.
**Note** : This is meant for a test environment, on a local network or similar environment not directly exposed to the Internet.
**Note** : This is meant for a test environment, on a local network or similar environment not directly exposed to the Internet.
1. Make sure Docker and nginx web server are installed:<BR>
```sudo apt install docker docker-compose nginx```
@ -59,6 +59,7 @@ cd ERPLibre
Support Ubuntu 20.04, 22.04, 24.04 and OSX. The installation duration is more than 30 minutes.
```bash
make install_os
make install_odoo_16
```

View file

@ -286,3 +286,10 @@ Use [prettier](https://github.com/prettier/prettier)
```bash
./script/maintenance/prettier.sh --tab-width 4 ./addons/TechnoLibre_odoo-code-generator
```
# Pre-commit
You can install pre-commit to auto-format and check lint with OCA configuration. This
will run before commit with git.
Check https://github.com/OCA/maintainer-tools/wiki/Install-pre-commit

View file

@ -117,7 +117,7 @@
<project name="product-pack.git" path="addons.odoo14.0/OCA_product-pack" remote="OCA" groups="addons"/>
<project name="product-variant.git" path="addons.odoo14.0/OCA_product-variant" remote="OCA" groups="addons"/>
<project name="project-reporting.git" path="addons.odoo14.0/OCA_project-reporting" remote="OCA" groups="addons"/>
<project name="project-agile.git" path="addons.odoo14.0/OCA_project-agile" remote="OCA" groups="addons"/>
<project name="project-agile.git" path="addons.odoo14.0/OCA_project-agile" remote="ERPLibre" revision="14.0_dev" groups="addons"/>
<project name="project.git" path="addons.odoo14.0/OCA_project" remote="OCA" groups="addons"/>
<project name="purchase-workflow.git" path="addons.odoo14.0/OCA_purchase-workflow" remote="OCA" groups="addons"/>
<project name="queue.git" path="addons.odoo14.0/OCA_queue" remote="OCA" groups="addons"/>
@ -133,6 +133,7 @@
<project name="server-tools.git" path="addons.odoo14.0/OCA_server-tools" remote="ERPLibre" revision="14.0_dev" groups="addons"/>
<project name="server-ux.git" path="addons.odoo14.0/OCA_server-ux" remote="OCA" groups="addons"/>
<project name="social.git" path="addons.odoo14.0/OCA_social" remote="ERPLibre" revision="14.0_dev" groups="addons"/>
<project name="survey.git" path="addons.odoo14.0/OCA_survey" remote="OCA" groups="addons"/>
<project name="stock-logistics-warehouse.git" path="addons.odoo14.0/OCA_stock-logistics-warehouse" remote="OCA" groups="addons"/>
<project name="storage.git" path="addons.odoo14.0/OCA_storage" remote="OCA" groups="addons"/>
<project name="timesheet.git" path="addons.odoo14.0/OCA_timesheet" remote="OCA" groups="addons"/>

View file

@ -2,7 +2,7 @@
<manifest>
<remote name="CybroOdoo" fetch="https://github.com/CybroOdoo/"/>
<remote name="ERPLibre" fetch="https://github.com/ERPLibre/"/>
<remote name="MathBenTech" fetch="https://github.com/MathBenTech/"/>
<remote name="MathBenTech" fetch="https://github.com/ERPLibre/"/>
<remote name="Numigi" fetch="https://github.com/Numigi/"/>
<remote name="OCA" fetch="https://github.com/OCA/"/>
<remote name="OmniaGit" fetch="https://github.com/OmniaGit/"/>
@ -82,6 +82,7 @@
<project name="mis-builder.git" path="addons.odoo16.0/OCA_mis-builder" remote="OCA" groups="addons"/>
<project name="multi-company.git" path="addons.odoo16.0/OCA_multi-company" remote="OCA" groups="addons"/>
<project name="muk_web.git" path="addons.odoo16.0/muk-it_muk_web" remote="muk-it" groups="addons"/>
<project name="odoo-business-spending-management-quebec-canada.git" path="addons.odoo16.0/MathBenTech_odoo-business-spending-management-quebec-canada" remote="MathBenTech" groups="addons,base"/>
<project name="odoo-cloud-platform.git" path="addons.odoo16.0/camptocamp_odoo-cloud-platform" remote="camptocamp" groups="addons"/>
<project name="odoo-formio.git" path="addons.odoo16.0/novacode-nl_odoo-formio" remote="novacode-nl" groups="addons"/>
<project name="odoo-module-migrator.git" path="script/OCA_odoo-module-migrator" remote="OCA" revision="master" groups="odoo"/>
@ -114,7 +115,7 @@
<project name="server-tools.git" path="addons.odoo16.0/OCA_server-tools" remote="ERPLibre" revision="ERPLibre/16.0" groups="addons"/>
<project name="server-ux.git" path="addons.odoo16.0/OCA_server-ux" remote="OCA" groups="addons"/>
<project name="social.git" path="addons.odoo16.0/OCA_social" remote="OCA" groups="addons"/>
<project name="survey.git" path="addons.odoo16.0/OCA_survey" remote="ERPLibre" revision="16.0_survey_odoo_debranding" groups="addons"/>
<project name="survey.git" path="addons.odoo16.0/OCA_survey" remote="ERPLibre" revision="16.0_dev" groups="addons"/>
<project name="stock-logistics-warehouse.git" path="addons.odoo16.0/OCA_stock-logistics-warehouse" remote="OCA" groups="addons"/>
<project name="storage.git" path="addons.odoo16.0/OCA_storage" remote="OCA" groups="addons"/>
<project name="timesheet.git" path="addons.odoo16.0/OCA_timesheet" remote="OCA" groups="addons"/>

File diff suppressed because it is too large Load diff

View file

@ -24,7 +24,7 @@ argcomplete = "^3.5.1"
asana = "^5.0.10"
asn1crypto = "^1.5.1"
astor = "^0.8.1"
avalara = "^24.10.0"
avalara = "^24.11.2"
azure-identity = "1.13.0"
azure-storage-blob = "12.16.0"
babel = "2.9.1"
@ -38,7 +38,7 @@ cairosvg = "^2.7.1"
chardet = "4.0.0"
clicksend-client = "^5.0.78"
cloudflare = "^3.1.0"
cmake = "^3.30.5"
cmake = "^3.31.1"
colorama = "^0.4.6"
countryinfo = "^0.1.2"
cryptography = "3.4.8"
@ -52,7 +52,7 @@ dropbox = "^12.0.2"
ebaysdk = "2.1.5"
email-validator = "^2.2.0"
endesive = "^2.17.3"
extract-msg = "^0.51.1"
extract-msg = "^0.52.0"
ezdxf = "^1.3.4"
face-recognition = "^1.3.0"
factur-x = "^3.1"
@ -69,9 +69,9 @@ gitpython = "3.1.30"
giturlparse = "^0.12.0"
googletrans-py = "4.0.0"
greenlet = "1.1.2"
gst = "^0.1.0"
gst = "^0.1.2"
httpagentparser = "1.8.1"
hubspot-api-client = "^10.0.0"
hubspot-api-client = "10.0.0"
idna = "2.10"
iscompatible = "^0.1.1"
jinja2 = "2.11.3"
@ -80,25 +80,25 @@ libsass = "0.20.1"
linkedin = "^0.1.5"
lottie = "^0.7.1"
lxml = "4.6.5"
lxml-html-clean = "^0.3.1"
mako = "^1.3.5"
lxml-html-clean = "^0.4.1"
mako = "^1.3.6"
markupsafe = "1.1.1"
matplotlib = "^3.9.2"
mechanize = "^0.4.10"
messagebird = "^2.2.0"
mock = "^5.1.0"
mpld3 = "0.5.9"
mysqlclient = "^2.2.5"
mysqlclient = "^2.2.6"
nextcloud-api-wrapper = "^0.2.3"
num2words = "0.5.13"
numpy = ">=1.15"
numpy-financial = "<=1.0.0"
numpy-stl = "^3.1.2"
numpy-stl = "^3.2.0"
odoo-test-helper = "^2.1.1"
odoorpc = "^0.10.1"
ofxparse = "0.21"
ofxtools = "^0.9.5"
openai = "^1.52.0"
openai = "^1.55.2"
opencv-python = "^4.10.0.84"
openpyxl = "^3.1.5"
pandas = ">=0.25.3"
@ -107,10 +107,12 @@ passlib = "1.7.4"
pathspec = "^0.12.1"
pay-ccavenue = "^1.0.0"
pdf2image = "^1.17.0"
phonenumbers = "^8.13.47"
pdfminer = "^20191125"
phonenumbers = "^8.13.50"
pillow = "9.0.1"
plotly = "5.13.1"
polib = "1.1.0"
pre-commit = "^4.0.1"
premailer = "^3.10.0"
printnodeapi = "^0.2.0"
prometheus-client = "0.15.0"
@ -122,12 +124,12 @@ py3o-formats = "^0.3"
py3o-template = "^0.10.0"
pyaudio = "^0.2.14"
pycountry = "^24.6.1"
pydifact = "^0.1.7"
pydifact = "^0.1.8"
pydot = "1.4.2"
pyfcm = "^2.0.7"
pygithub = "^2.4.0"
pygithub = "^2.5.0"
pygobject = "3.44.1"
pyjwt = "^2.9.0"
pyjwt = "^2.10.1"
pymssql = "<=2.2.5"
pyncclient = "^0.7"
pyopenssl = "20.0.1"
@ -148,7 +150,7 @@ python-resize-image = "^1.1.20"
python-slugify = "^8.0.4"
python-stdnum = "1.16"
python-swiftclient = "4.1.0"
python-telegram-bot = "^21.6"
python-telegram-bot = "^21.7"
pytz = "^2024.2"
pyusb = "1.0.2"
pyyaml = "6.0"
@ -164,7 +166,7 @@ retrying = "^1.3.4"
rl-renderpm = "4.0.3"
roulier = "^1.1.1"
schwifty = "2024.4.0"
selenium = "^4.25.0"
selenium = "^4.27.1"
sentry-sdk = "<=1.9.0"
shapely = "^2.0.6"
simplejson = "^3.19.3"
@ -172,21 +174,22 @@ spacy = "^3.8.2"
speechrecognition = "3.10.0"
sqlalchemy = "^2.0.36"
statsd = "4.0.1"
telesign = "^2.2.3"
telesign = "^2.2.5"
telnyx = "^2.1.3"
todoist-python = "^8.1.4"
toml = "^0.10.2"
tweepy = "^4.14.0"
twilio = "^9.3.4"
twilio = "^9.3.7"
unidecode = "^1.3.8"
unidiff = "^0.7.5"
urllib3 = "1.26.5"
uvloop = "^0.21.0"
validate-email = "^1.3"
vobject = "0.9.6.1"
vonage = "^3.17.1"
vonage = "^4.0.0"
vonage-verify-v2 = "1.1.4"
werkzeug = "2.0.2"
wheel = "^0.44.0"
wheel = "^0.45.1"
xlrd = "1.2.0"
xlsxwriter = "1.4.5"
xlwt = "1.3.0"

View file

@ -16,6 +16,7 @@ cloudflare
selenium
# mmg # depend on weasyprint 59.0 and depend on old version pillow 9.0.1
uvloop
python-randomword-fr
# For OSX
cython
@ -45,6 +46,7 @@ PyPDF2
# For logical test and quality
git+https://github.com/psf/black.git@24.8.0
pre-commit
# For python 3.10 from odoo/requirements.txt, poetry_update.py cannot support python_version
cryptography==3.4.8
@ -72,3 +74,12 @@ xlrd==1.2.0
# Force python 3.10 over odoo/requirements.txt to remove warning
num2words==0.5.13
xlsxwriter==1.4.5
# Fix vonage package depend on vonage-verify-v2 1.1.3, but not exist into pip
vonage-verify-v2==1.1.4
# Fix poetry
hubspot-api-client==10.0.0
# Optional Odoo
pdfminer

View file

@ -119,9 +119,7 @@ def search_and_replace(
# new_file_content = (
# f'{f_lines[:t_index_second_quote]}"{models_name}"{f_lines[t_index_third_quote + len(second_char):]}'
# )
new_file_content = (
f'{f_lines[:t_index_second_quote]}"{models_name}"{f_lines[t_index_third_quote + len(second_char):]}'
)
new_file_content = f'{f_lines[:t_index_second_quote]}"{models_name}"{f_lines[t_index_third_quote + len(second_char):]}'
return new_file_content

View file

@ -240,7 +240,10 @@ def main():
# not finish to empty the queue
if dct_depend_image:
_logger.info("Missing dependencies, auto-run all image generation for last execution")
_logger.info(
"Missing dependencies, auto-run all image generation for last"
" execution"
)
for depend_image, lst_module in dct_depend_image.items():
lst_queue_parallel.append(lst_module)
# print command to execute

View file

@ -0,0 +1,28 @@
#!/bin/bash
# © 2021-2024 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
datetime=$(date +%Y-%m-%d_%H-%M-%S)
backup_dir="backup_$datetime"
mkdir -p "$backup_dir"
for dir in */; do
if [ -d "$dir/addons/addons" ]; then
mkdir -p "$backup_dir/$dir"
# Support when addons is a symlink, copy the target directory
if [ -L "$dir/addons/addons" ]; then
source_dir=$(readlink -f "$dir/addons/addons")
else
source_dir="$dir/addons/addons"
fi
echo $source_dir
# Copy directory of addons
cp -r "$source_dir" "$backup_dir/$dir/addons"
# Copy docker-compose.yml
cp "$dir/docker-compose.yml" "$backup_dir/$dir/"
fi
done

View file

@ -0,0 +1,11 @@
#!/bin/bash
# © 2021-2024 TechnoLibre (http://www.technolibre.ca)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl)
for dir in */; do
if [ -d "$dir/addons/addons" ]; then
echo "Directory : $dir"
find "$dir/addons/addons" -type f -print
fi
done

View file

@ -28,6 +28,16 @@ def get_config():
When auto_sync is enable:
Check zone and name on cloudflare and compare with public ip, update all old ip with new ip if different.
You need your profile in file ~/.cloudflare/cloudflare.cfg
Example:
[profil_name]
email=email@email.com
token=TOKEN
Configure locally a crontab and adapt it, crontab -e, specify an existing DNS
Example each 5 minutes:
*/5 * * * * USERNAME cd /home/USERNAME/ERPLibre && ./script/deployment/update_dns_cloudflare.py --profile profil_name --zone_name example.com --dns_name example.com --auto_sync
Example each minute:
* * * * * USERNAME cd /home/USERNAME/ERPLibre && ./script/deployment/update_dns_cloudflare.py --profile profil_name --zone_name example.com --dns_name example.com --auto_sync
""",
epilog="""\
""",

View file

@ -91,9 +91,9 @@ def edit_text(config):
if is_find:
key = "image:"
value = lst_docker_info[i]
lst_docker_info[
i
] = f"{value[:value.find(key) + len(key)]} {config.prod_version}\n"
lst_docker_info[i] = (
f"{value[:value.find(key) + len(key)]} {config.prod_version}\n"
)
break
if "ERPLibre" in docker_info:
is_find = True

View file

@ -13,9 +13,13 @@ EL_USER=${USER}
# Install PostgreSQL Server
#--------------------------------------------------
echo "\n---- Install PostgreSQL Server ----"
brew install postgresql@15
brew install postgis
brew services start postgresql@15
if which psql >/dev/null 2>&1; then
echo "postgresql is already installed, skipping"
else
brew install postgresql@15
brew install postgis
brew services start postgresql@15
fi
echo "\n---- Creating the ERPLibre PostgreSQL User ----"
sudo su - postgres -c "createuser -s ${EL_USER}" 2> /dev/null || true
@ -25,6 +29,7 @@ sudo su - postgres -c "CREATE EXTENSION postgis;\nCREATE EXTENSION postgis_topol
# Install Dependencies
#--------------------------------------------------
echo "\n--- Installing Python 3 + pip3 --"
#TODO is python@3.7 line here still usefull?? Should we get rid of it?
brew install git python@3.7 wget parallel mariadb
brew link git
brew link wget

View file

@ -12,18 +12,23 @@ EL_USER=${USER}
## https://github.com/odoo/odoo/wiki/Wkhtmltopdf ):
# Ubuntu 20.04
UBUNTU_VERSION=$(lsb_release -rs)
DEBIAN_VERSION=$(lsb_release -cs)
OS=$(lsb_release -si)
if [ "20.04" == "${UBUNTU_VERSION}" ]; then
if [ "24.04" == "${UBUNTU_VERSION}" ] || [ "24.10" == "${UBUNTU_VERSION}" ] || [ "23.10" == "${UBUNTU_VERSION}" ] || [ "23.04" == "${UBUNTU_VERSION}" ] || [ "22.10" == "${UBUNTU_VERSION}" ] || [ "22.04" == "${UBUNTU_VERSION}" ]; then
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
elif [ "20.04" == "${UBUNTU_VERSION}" ]; then
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.focal_amd64.deb
elif [ "22.04" == "${UBUNTU_VERSION}" ]; then
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
elif [ "18.04" == "${UBUNTU_VERSION}" ]; then
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.bionic_amd64.deb
elif [[ "${OS}" == "Debian" ]]; then
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.bullseye_amd64.deb
if [ "bookworm" == "${DEBIAN_VERSION}" ]; then
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bookworm_amd64.deb
else
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.bullseye_amd64.deb
fi
elif [[ "${OS}" == *"Ubuntu"* ]]; then
echo "Your version of Ubuntu is not supported, only support 18.04, 20.04 and 22.04"
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb
WKHTMLTOX_X64=https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb
else
echo "Your version of Ubuntu is not supported, only support 18.04, 20.04 and 22.04"
exit 1

View file

@ -106,7 +106,10 @@ if [[ ! -f ${VENV_REPO_PATH} ]]; then
fi
# Make .venv active
if [[ "${OSTYPE}" == "darwin"* ]]; then
echo -e "=======>source .venv/bin/activate here!!! <==============="
source .venv/bin/activate
fi
echo -e "\n---- Installing poetry dependency ----"
${VENV_PATH}/bin/pip install --upgrade pip
# Force python instead of changing env

View file

@ -67,6 +67,7 @@ def get_lst_requirements_txt():
def get_lst_manifest_py():
return get_file_from_glob("__manifest__.py")
def get_file_from_glob(glob_txt):
with open(".odoo-version") as txt:
odoo_version = txt.read()
@ -77,7 +78,9 @@ def get_file_from_glob(glob_txt):
a_dirname = os.path.dirname(a)
if a_dirname.startswith(".repo/") or a_dirname.startswith(".venv"):
continue
if a_dirname.startswith("addons") and not a_dirname.startswith(f"addons.odoo{odoo_version}"):
if a_dirname.startswith("addons") and not a_dirname.startswith(
f"addons.odoo{odoo_version}"
):
continue
lst_v.append(a)
return lst_v

View file

@ -38,13 +38,13 @@ def run(config, selenium_tool):
try:
connexion_button = selenium_tool.driver.find_element(
By.XPATH,
"/html/body/div/div/div/form/div[3]/button"
"/html/body/div/div/div/form/div[3]/button",
# '//button[contains(text(), "Log in")]'
)
except Exception:
connexion_button = selenium_tool.driver.find_element(
By.XPATH,
"/html/body/div/main/div/form/div[3]/button"
"/html/body/div/main/div/form/div[3]/button",
# '//button[contains(text(), "Connexion")]'
)

View file

@ -423,18 +423,16 @@ class Update:
os.rename(addons_path, addons_path + "TEMP")
# TODO need to be force if installation path is all good, return True
if self.config.is_in_installation:
if self.config.install_dev:
_logger.info("Installation.")
status = self.install_erplibre(
install_system=self.config.install,
install_dev=self.config.install_dev,
)
status = self.install_erplibre()
# Re-update if launch installation
self._update_directory_to_link(
VENV_FILE, self.expected_venv_name
)
# self._update_directory_to_link(ADDONS_PATH, self.expected_addons_name)
if self.config.install_dev:
self._update_directory_to_link(
VENV_FILE, self.expected_venv_name
)
# self._update_directory_to_link(ADDONS_PATH, self.expected_addons_name)
elif self.config.is_in_switch:
_logger.info("Switch")
self.execute_log.append(f"System update")
@ -485,17 +483,18 @@ class Update:
pycharm_is_installed = os.path.exists(".idea")
if not pycharm_is_installed or not self.execute_log:
return
os.system("./.venv/bin/python ./script/ide/pycharm_configuration.py --init")
os.system(
"./.venv/bin/python ./script/ide/pycharm_configuration.py --init"
)
def install_erplibre(self, install_system=False, install_dev=False):
status = 0
def install_erplibre(self):
self.execute_log.append(f"Dev installation")
status = os.system("./script/install/install_locally_dev.sh")
return status
if install_system:
self.execute_log.append(f"System installation")
status = os.system("./script/install/install_dev.sh")
if install_dev and not status:
self.execute_log.append(f"Dev installation")
status = os.system("./script/install/install_locally_dev.sh")
def install_system(self):
self.execute_log.append(f"System installation")
status = os.system("./script/install/install_dev.sh")
return status
def update_link_file(
@ -688,12 +687,20 @@ def main():
update.validate_version()
_logger.info("Validate environment")
status = update.validate_environment()
if update.config.force_install or not status:
status = 0
if update.config.install_dev or update.config.is_in_switch:
status = update.validate_environment()
if update.config.install:
status = update.install_system()
if (
update.config.force_install
or update.config.install_dev
or update.config.is_in_switch
) and not status:
update.update_environment()
update.print_log()
if update.config.is_in_installation:
if update.config.install_dev:
# Update pycharm configuration
update.pycharm_update()