diff --git a/edx_repo_tools/codemods/django42/script_to_update_pymemcache.sh b/edx_repo_tools/codemods/django42/script_to_update_pymemcache.sh new file mode 100644 index 00000000..4c5dd128 --- /dev/null +++ b/edx_repo_tools/codemods/django42/script_to_update_pymemcache.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Function to recursively find and replace the cache backend in files +function update_cache_backend() { + local root_dir=$1 + find "$root_dir" -type f -exec perl -i -pe 's/django\.core\.cache\.backends\.memcached\.MemcachedCache/django.core.cache.backends.memcached.PyMemcacheCache/g' {} + +} + +# Function to find and append "pymemcache" to base.in files +function append_pymemcache() { + local root_dir=$1 + find "$root_dir" -type f -name "base.in" -exec sh -c 'echo "pymemcache" >> "$0"' {} \; +} + +# Function to find and remove the line containing "python-memcached==" +function remove_python_memcached() { + local root_dir=$1 + find "$root_dir" -type f -exec perl -i -ne 'print unless /^python-memcached==.*$/' {} + +} + +# Get the current directory +current_dir=$(pwd) + +# Update cache backend in the project +echo "Updating cache backend in project: $current_dir" +update_cache_backend "$current_dir" +echo "Cache backend update completed in project: $current_dir" + +# Append "pymemcache" to base.in files +echo "Appending 'pymemcache' to base.in files in project: $current_dir" +append_pymemcache "$current_dir" +echo "Appending 'pymemcache' completed in project: $current_dir" + +# Remove lines containing "python-memcached==" +echo "Removing 'python-memcached' lines in project: $current_dir" +remove_python_memcached "$current_dir" +echo "Removal of 'python-memcached' lines completed in project: $current_dir" diff --git a/edx_repo_tools/codemods/django42/update_pymemcache.py b/edx_repo_tools/codemods/django42/update_pymemcache.py new file mode 100644 index 00000000..343a03e2 --- /dev/null +++ b/edx_repo_tools/codemods/django42/update_pymemcache.py @@ -0,0 +1,16 @@ +import click +import subprocess + + +def main(): + """ + Function to call the bash script which is replacing all + django.core.cache.backends.memcached.MemcachedCache references with + django.core.cache.backends.memcached.PyMemcacheCache in the whole + project and adding pymemcache and removing python-memcached in requirements + """ + subprocess.run(['./edx_repo_tools/codemods/django42/script_to_update_pymemcache.sh']) + + +if __name__ == '__main__': + main() diff --git a/setup.py b/setup.py index f808d8c6..e85b4833 100644 --- a/setup.py +++ b/setup.py @@ -111,6 +111,7 @@ def is_requirement(line): 'tag_release = edx_repo_tools.release.tag_release:main', 'modernize_tox_django42 = edx_repo_tools.codemods.django42.tox_moderniser_django42:main', 'modernize_github_actions_django42 = edx_repo_tools.codemods.django42.github_actions_modernizer_django42:main', + 'update_cache = edx_repo_tools.codemods.django42.update_pymemcache:main', ], }, package_data={