Code is now functional but untidy and in need of refactoring and commenting

This commit is contained in:
Fred Boniface 2024-11-02 21:11:22 +00:00
parent e2ded85833
commit a6a4c75577
4 changed files with 53 additions and 23 deletions

1
.gitignore vendored
View File

@ -3,6 +3,7 @@ auto_matched.txt
organised_for_processing.txt
validated.txt
output.txt
output_file.txt
output
*.sh

View File

@ -1,5 +1,6 @@
import requests
import base64
import json
from urllib.parse import urljoin, urlencode
class GiteaConnector:
@ -28,11 +29,9 @@ class GiteaConnector:
if response.status_code == 200:
try:
data = response.json() # Parse JSON response
print(data)
if isinstance(data, list): # Confirm it's a list
# Extract 'title' from each item in the list
existing_titles = [item['title'] for item in data if 'title' in item]
print(existing_titles)
return existing_titles
else:
print("Unexpected response format: Expected a list.")
@ -82,36 +81,27 @@ class GiteaConnector:
## Create new branch in the repo
def create_branch(self, branch_name):
BASE_BRANCH = "main"
base_branch_url = urljoin(self.repo_url, f"branch/{BASE_BRANCH}")
branch_response = requests.get(base_branch_url, headers=self.header)
if branch_response.status_code == 200:
base_sha = branch_response.json()['commit']['id']
create_branch_url = urljoin(self.repo_url, "git/refs")
branch_data = {
"ref": f"refs/heads/{branch_name}",
"sha": base_sha,
}
create_branch_response = requests.post(create_branch_url, headers=self.header, data=json.dumps(branch_data))
if create_branch_response.status_code == 201:
print(f"Branch {branch_name} created successfully")
return True
else:
print(f"Failed to create branch: ", branch_name, create_branch_response.status_code, create_branch_response.text)
return False
create_branch_url = urljoin(self.repo_url, "branches")
branch_data = {
"new_branch_name": branch_name,
"old_branch_name": BASE_BRANCH,
}
create_branch_response = requests.post(create_branch_url, headers=self.header, data=json.dumps(branch_data))
if create_branch_response.status_code == 201:
print(f"Branch {branch_name} created successfully")
return True
else:
print("Failed to retreive branch SHA: ", branch_response.status_code, branch_response.text)
print(f"Failed to create branch: ", branch_name, create_branch_response.status_code, create_branch_response.text)
return False
## Create a new file in the repo
def create_pis_file(self, branch, filename, file_content):
file_path = f"pis/{filename}"
encoded_content = base64.encode(file_content.encode('utf-8'))
encoded_content = base64.b64encode(file_content.encode('utf-8')).decode('utf-8')
create_file_url = url_multijoin(self.repo_url, f'contents/{file_path}')
create_file_url = urljoin(self.repo_url, f'contents/{file_path}.yaml')
file_data = {
"content": encoded_content,

View File

@ -7,6 +7,8 @@ import json
import parse_pdf
import train_detail
import validate
import pis_file
from gitea import GiteaConnector
# List all PDF files in the given directory
def list_pdf_files(directory):
@ -120,6 +122,18 @@ def main():
validated = validate.check_and_validate_against_owlboard(auto_matched)
output_file = pis_file.create_new_pis_file(validated)
## Create new branch and post output_file
gitea_client = GiteaConnector("https://git.fjla.uk/api/v1/repos/owlboard/data/", "fred.boniface", os.getenv("GITEA_PASS"))
BRANCH_NAME = f"auto-dgp2-{datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S')}"
branch = gitea_client.create_branch(BRANCH_NAME)
if not branch:
print("Branch creation failed. Unable to continue")
os.exit()
gitea_client.create_pis_file(BRANCH_NAME, BRANCH_NAME, output_file)
# print(trains)
out = open("organised_for_processing.txt", "w")
@ -131,6 +145,9 @@ def main():
out = open("validated.txt", "w")
out.write(json.dumps(validated, indent=4, default=str))
out.close()
out = open("output_file.txt", "w")
out.write(output_file)
out.close()
if __name__ == "__main__":
main()

View File

@ -1,3 +1,25 @@
## Produces a PIS YAML file in the OwlBoard/data format
## and pushes it to a new branch for review
def create_new_pis_file(input):
file_content = "# File produced by DGP2\n\nFor Review before merging\nXXXX\n\n"
for train in input:
file_content += f"""\n
- code: {train.get('diagram_pis_code', 'N/A')}
# diagramDate: {train.get('diagram_date', 'N/A')}
# diagramHeadcode: {train.get('train_headcode', 'N/A')}
# diagram_time1: {train.get('diagram_time1', 'N/A')}
# diagram_time2: {train.get('diagram_time2', 'N/A')}
"""
for entry in train.get('timetable_entries', []):
file_content += f"""
stops: {",".join(stop.lower() for stop in entry.get('stops', []))}
# stpIndicator: {entry.get('stpIndicator', 'N/A')}
# trainUid: {entry.get('trainUid', 'N/A')}
# scheduleStart: {entry.get('scheduleStart', 'N/A')}
# scheduleEnd: {entry.get('scheduleEnd', 'N/A')}
# daysRun: {",".join(day.upper() for day in entry.get('daysRun', []))}
# trainStartTime: {entry.get('trainStartTime', 'N/A')}
"""
return file_content