77 test_regex_pattern , test_format_conditions ,
88 check_delete_constraints , filename_to_display )
99from ..db import add_format_to_renames , remove_format_from_renames , is_format_in_renames
10+ from .cache import data_cache
1011
1112logger = logging .getLogger (__name__ )
1213logger .setLevel (logging .INFO )
1617@bp .route ('/<string:category>' , methods = ['GET' ])
1718def retrieve_all (category ):
1819 try :
19- directory = get_category_directory (category )
20- files = [f for f in os .listdir (directory ) if f .endswith ('.yml' )]
21- logger .debug (f"Found { len (files )} files in { category } " )
22-
23- if not files :
24- return jsonify ([]), 200
25-
26- result = []
27- errors = 0
28- for file_name in files :
29- file_path = os .path .join (directory , file_name )
30- try :
31- content = load_yaml_file (file_path )
32- # Add metadata for custom formats
33- if category == 'custom_format' :
34- content ['metadata' ] = {
35- 'includeInRename' :
36- is_format_in_renames (content ['name' ])
20+ # Use cache instead of reading from disk
21+ items = data_cache .get_all (category )
22+
23+ # Add metadata for custom formats
24+ if category == 'custom_format' :
25+ for item in items :
26+ if 'content' in item and 'name' in item ['content' ]:
27+ item ['content' ]['metadata' ] = {
28+ 'includeInRename' : is_format_in_renames (item ['content' ]['name' ])
3729 }
38- result .append ({
39- "file_name" :
40- file_name ,
41- "content" :
42- content ,
43- "modified_date" :
44- get_file_modified_date (file_path )
45- })
46- except yaml .YAMLError :
47- errors += 1
48- result .append ({
49- "file_name" : file_name ,
50- "error" : "Failed to parse YAML"
51- })
52-
53- logger .info (
54- f"Processed { len (files )} { category } files ({ errors } errors)" )
55- return jsonify (result ), 200
30+
31+ logger .info (f"Retrieved { len (items )} { category } items from cache" )
32+ return jsonify (items ), 200
5633
5734 except ValueError as ve :
5835 logger .error (ve )
@@ -127,6 +104,10 @@ def handle_item(category, name):
127104
128105 # Then delete the file
129106 os .remove (file_path )
107+
108+ # Update cache
109+ data_cache .remove_item (category , file_name )
110+
130111 return jsonify (
131112 {"message" : f"Successfully deleted { file_name } " }), 200
132113 except OSError as e :
@@ -226,32 +207,62 @@ def handle_item(category, name):
226207 return jsonify ({"error" : "An unexpected error occurred" }), 500
227208
228209
210+ @bp .route ('/regex/verify' , methods = ['POST' ])
211+ def verify_regex ():
212+ """Verify a regex pattern using .NET regex engine via PowerShell"""
213+ try :
214+ data = request .get_json ()
215+ if not data :
216+ return jsonify ({"error" : "No JSON data provided" }), 400
217+
218+ pattern = data .get ('pattern' )
219+ if not pattern :
220+ return jsonify ({"error" : "Pattern is required" }), 400
221+
222+ from .utils import verify_dotnet_regex
223+
224+ success , message = verify_dotnet_regex (pattern )
225+
226+ if success :
227+ return jsonify ({"valid" : True , "message" : "Pattern is valid" }), 200
228+ else :
229+ return jsonify ({"valid" : False , "error" : message }), 200
230+
231+ except Exception as e :
232+ logger .exception ("Error verifying regex pattern" )
233+ return jsonify ({"valid" : False , "error" : str (e )}), 500
234+
235+
229236@bp .route ('/<string:category>/test' , methods = ['POST' ])
230237def run_tests (category ):
231238 logger .info (f"Received test request for category: { category } " )
232239
233240 try :
234241 data = request .get_json ()
235242 if not data :
236- logger .warning ("Rejected test request - no JSON data provided " )
243+ logger .warning ("Test request rejected: no JSON data" )
237244 return jsonify ({"error" : "No JSON data provided" }), 400
238245
239246 tests = data .get ('tests' , [])
240247 if not tests :
241- logger .warning ("Rejected test request - no test cases provided" )
248+ logger .warning ("Test request rejected: no tests provided" )
242249 return jsonify ({"error" :
243250 "At least one test case is required" }), 400
244251
245252 if category == 'regex_pattern' :
246253 pattern = data .get ('pattern' )
247- logger .info (f"Processing regex test request - Pattern: { pattern } " )
248254
249255 if not pattern :
250- logger .warning ("Rejected test request - missing pattern" )
256+ logger .warning ("Test request rejected: missing pattern" )
251257 return jsonify ({"error" : "Pattern is required" }), 400
252258
253259 success , message , updated_tests = test_regex_pattern (
254260 pattern , tests )
261+
262+ if success and updated_tests :
263+ passed = sum (1 for t in updated_tests if t .get ('passes' ))
264+ total = len (updated_tests )
265+ logger .info (f"Tests completed: { passed } /{ total } passed" )
255266
256267 elif category == 'custom_format' :
257268 conditions = data .get ('conditions' , [])
@@ -274,10 +285,8 @@ def run_tests(category):
274285 return jsonify (
275286 {"error" : "Testing not supported for this category" }), 400
276287
277- logger .info (f"Test execution completed - Success: { success } " )
278-
279288 if not success :
280- logger .warning (f"Test execution failed - { message } " )
289+ logger .error (f"Test execution failed: { message } " )
281290 return jsonify ({"success" : False , "message" : message }), 400
282291
283292 return jsonify ({"success" : True , "tests" : updated_tests }), 200
0 commit comments