Skip to content
Snippets Groups Projects
Commit d19e401c authored by Fawwaz Anugrah Wiradhika Dharmasatya's avatar Fawwaz Anugrah Wiradhika Dharmasatya
Browse files

feat: support annotation in requirements.txt

parent bbfc7751
Branches
No related merge requests found
......@@ -13,13 +13,44 @@ class FileReader:
self.project_path = project_path
self.supported_extensions = os.getenv("SUPPORTED_EXTENSION").split("|")
self.cfg_generator:CFGGenerator = CFGGenerator()
self.dependency_names = []
format_log("Project Context Gatherer initialized.")
def analyze_project(self):
format_log("Searching for annotation...")
# Baca requirements.txt
self.read_project_dependency()
# Baca files
potential_files:list[str] = self.get_potential_files()
project_information:ProjectInfo = self.search_annotation(potential_files)
return project_information
def read_project_dependency(self):
with open(f"{self.project_path}{PATH_SEPARATOR}requirements.txt") as req_file:
lines = req_file.readlines()
i = 0
while i < len(lines):
annotation_list = self.have_annotation(lines[i])
annotation = None if len(annotation_list)==0 else annotation_list[0]
if(annotation):
additional_context = []
if("@ACL" in annotation):
# Ini kelas acl
# Cek jika ada keterangan tambahan
match = re.search(r'\(.*\)',lines[i])
if match:
# Ada keterangan tambahan
additional_context = re.sub(r"[\(\) ]","",match.group(0)).split(",")
# Cari tahu jenis acl nya
i+=1
while re.search(FileReader.ANNOTATION_PATTERN,lines[i]):
#TODO handle kalau ketemu yang lain
i+=1
# Baca nama modul
# import_name:flask_login
module_name = additional_context[0].split(":")[1].strip()
self.dependency_names.append({"name":module_name,"ctx":additional_context})
i+=1
def search_annotation(self,files:list[str]):
project_info:ProjectInfo = ProjectInfo()
......@@ -150,6 +181,16 @@ class FileReader:
else:
# Ini kelas biasa
pass
elif re.search("\S*(from|import) +",lines[i]):
# ini modul yg diimport dan didefinisikan di requirement.txt
for lib in self.dependency_names:
if lib['name']==lines[i].split(" ")[1]:
# Bikin elemen
project_info.acl_class.append(ElementContext(lines[i],'library',file,lib['ctx']))
cfg,deps = self.cfg_generator.generate(project_info.acl_class[-1])
project_info.acl_class[-1].set_cfg(cfg)
# Daftarkan dependency
project_info.dependency_manager.add(deps)
i+=1
return project_info
......
......@@ -37,6 +37,7 @@ class MainMenu():
format_log("ACL data acquired.")
self.project_ctx = FileReader(self.project_path).analyze_project()
format_log("ACL and routes context gathered...")
print(self.project_ctx)
except FileNotFoundError:
format_log("File not found. Exiting...",status='error')
else:
......
# @ACL(login_required)
flask
\ No newline at end of file
# @ACL(import_name:flask_login,login_required)
Flask-Login
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment