59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
|
|
import re
|
|
|
|
with open('core/views.py', 'r') as f:
|
|
content = f.read()
|
|
|
|
with open('core/patch_views_vat.py', 'r') as f:
|
|
new_func = f.read()
|
|
|
|
# Regex to find the function definition
|
|
# It starts with @csrf_exempt\ndef create_sale_api(request):
|
|
# And ends before the next function definition (which likely starts with @ or def)
|
|
pattern = r"@csrf_exempt\s+def create_sale_api(request):.*?return JsonResponse({'success': False, 'error': 'Invalid request'}, status=405)"
|
|
|
|
# Note: The pattern needs to match the indentation and multiline content.
|
|
# Since regex for code blocks is tricky, I will use a simpler approach:
|
|
# 1. Read the file lines.
|
|
# 2. Find start line of create_sale_api.
|
|
# 3. Find the end line (start of next function or end of file).
|
|
# 4. Replace lines.
|
|
|
|
lines = content.splitlines()
|
|
start_index = -1
|
|
end_index = -1
|
|
|
|
for i, line in enumerate(lines):
|
|
if line.strip() == "def create_sale_api(request):":
|
|
# Check if previous line is decorator
|
|
if i > 0 and lines[i-1].strip() == "@csrf_exempt":
|
|
start_index = i - 1
|
|
else:
|
|
start_index = i
|
|
break
|
|
|
|
if start_index != -1:
|
|
# Find the next function or end
|
|
# We look for next line starting with 'def ' or '@' at top level
|
|
for i in range(start_index + 1, len(lines)):
|
|
if lines[i].startswith("def ") or lines[i].startswith("@"):
|
|
end_index = i
|
|
break
|
|
if end_index == -1:
|
|
end_index = len(lines)
|
|
|
|
# Replace
|
|
new_lines = new_func.splitlines()
|
|
# Ensure new lines have correct indentation if needed (but views.py is top level mostly)
|
|
|
|
# We need to preserve the imports and structure.
|
|
# The new_func is complete.
|
|
|
|
final_lines = lines[:start_index] + new_lines + lines[end_index:]
|
|
|
|
with open('core/views.py', 'w') as f:
|
|
f.write('\n'.join(final_lines))
|
|
print("Successfully patched create_sale_api")
|
|
else:
|
|
print("Could not find create_sale_api function")
|