Skip to content

Commit 99724bd

Browse files
committed
fix: file path -> import loop, linting
1 parent 62102ba commit 99724bd

File tree

11 files changed

+392
-279
lines changed

11 files changed

+392
-279
lines changed

app.py

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,41 @@
1-
21
import os
2+
from pathlib import Path
3+
34
import certifi
45
import pandas as pd
5-
from pathlib import Path
66
from dotenv import load_dotenv
7-
8-
from fastapi import FastAPI, Request, UploadFile, File
9-
from fastapi.responses import Response
7+
from fastapi import FastAPI, File, Request, UploadFile
108
from fastapi.middleware.cors import CORSMiddleware
9+
from fastapi.responses import Response
1110
from fastapi.templating import Jinja2Templates
12-
from starlette.responses import RedirectResponse
13-
from uvicorn import run
14-
1511
from pymongo.mongo_client import MongoClient
1612
from pymongo.server_api import ServerApi
13+
from starlette.responses import RedirectResponse
14+
from uvicorn import run
1715

18-
from src.utils.utils import load_object
19-
from src.utils.estimator import NetworkModel
20-
from src.pipeline.training_pipeline import TrainingPipeline
2116
from src.constant.training_pipeline import (
22-
DATA_INGESTION_DATABASE_NAME,
2317
DATA_INGESTION_COLLECTION_NAME,
18+
DATA_INGESTION_DATABASE_NAME,
2419
)
25-
2620
from src.exception.exception import CustomException
27-
from src.logging.logging import logging
21+
from src.logger.logger import logging
22+
from src.pipeline.training_pipeline import TrainingPipeline
23+
from src.utils.estimator import NetworkModel
24+
from src.utils.utils import load_object
2825

2926
load_dotenv()
3027

31-
uri = os.getenv('MONGO_URL')
32-
logging.info('MONGODB is set and ready to use')
28+
uri = os.getenv("MONGO_URL")
29+
logging.info("MONGODB is set and ready to use")
3330

3431
client = MongoClient(
3532
uri,
3633
tls=True,
3734
tlsCAFile=certifi.where(),
3835
tlsAllowInvalidCertificates=False,
39-
server_api=ServerApi('1'),
40-
serverSelectionTimeoutMS=10000
41-
)
36+
server_api=ServerApi("1"),
37+
serverSelectionTimeoutMS=10000,
38+
)
4239

4340
database = client[DATA_INGESTION_DATABASE_NAME]
4441
collection = database[DATA_INGESTION_COLLECTION_NAME]
@@ -47,28 +44,31 @@
4744
origin = ["*"]
4845

4946
app.add_middleware(
50-
CORSMiddleware,
51-
allow_origins = origin,
52-
allow_methods = ["*"],
53-
allow_headers = ["*"],
47+
CORSMiddleware, # type: ignore[arg-type]
48+
allow_origins=["*"],
49+
allow_methods=["*"],
50+
allow_headers=["*"],
5451
)
5552

5653
templates = Jinja2Templates(directory="./templates")
5754

55+
5856
@app.get("/", tags=["authentication"])
5957
async def index():
6058
return RedirectResponse(url="/docs")
6159

60+
6261
@app.get("/train")
6362
async def train():
6463
try:
6564
train_pipeline = TrainingPipeline()
6665
train_pipeline.run_pipeline()
6766
return Response("Training is Successful")
68-
67+
6968
except Exception as e:
7069
raise CustomException(e) from e
71-
70+
71+
7272
@app.get("/predict")
7373
async def predict_route(request: Request, file: UploadFile = File(...)):
7474
try:
@@ -83,15 +83,18 @@ async def predict_route(request: Request, file: UploadFile = File(...)):
8383
y_pred = Network_model.predict(df)
8484
print(y_pred)
8585

86-
df['predicted_column'] = y_pred
87-
print(df['predicted_column'])
86+
df["predicted_column"] = y_pred
87+
print(df["predicted_column"])
8888

8989
df.to_csv("prediction_output/output.csv")
90-
index_html = df.to_html(classes='table table-stripped')
91-
return templates.TemplateResponse("index.html", {"request": request, "table": index_html})
90+
index_html = df.to_html(classes="table table-stripped")
91+
return templates.TemplateResponse(
92+
"index.html", {"request": request, "table": index_html}
93+
)
9294

9395
except Exception as e:
9496
raise CustomException(e) from e
9597

98+
9699
if __name__ == "__main__":
97-
run(app, host='localhost', port=8000)
100+
run(app, host="localhost", port=8000)

main.py

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,51 @@
11
from src.components.data_ingestion import DataIngestion
22
from src.components.data_transformation import DataTransformation
3-
from src.exception.exception import CustomException
4-
from src.logging.logging import logging
53
from src.components.data_validation import DataValidation
64
from src.components.model_trainer import ModelTrainer, ModelTrainerConfig
75
from src.entity.config import (
86
DataIngestionConfig,
9-
TrainingPipelineConfig,
7+
DataTransformationConfig,
108
DataValidationConfig,
11-
DataTransformationConfig
9+
TrainingPipelineConfig,
1210
)
11+
from src.exception.exception import CustomException
12+
from src.logger.logger import logging
1313

1414
if __name__ == "__main__":
1515
try:
1616
training_pipeline_config = TrainingPipelineConfig()
1717
data_ingestion_config = DataIngestionConfig(training_pipeline_config)
1818
data_ingestion = DataIngestion(data_ingestion_config)
19-
logging.info('Initiate the data Ingestion')
19+
logging.info("Initiate the data Ingestion")
2020

2121
data_ingestion_artifact = data_ingestion.initiate_data_ingestion()
22-
logging.info('Data Initialization completed')
22+
logging.info("Data Initialization completed")
2323
print(data_ingestion_artifact)
2424

2525
data_validation_config = DataValidationConfig(training_pipeline_config)
26-
data_validation = DataValidation(data_ingestion_artifact, data_validation_config)
27-
logging.info('Initiate the data validation')
26+
data_validation = DataValidation(
27+
data_ingestion_artifact, data_validation_config
28+
)
29+
logging.info("Initiate the data validation")
2830

2931
data_validation_artifact = data_validation.initiate_data_validation()
30-
logging.info('Data validation completed')
32+
logging.info("Data validation completed")
3133
print(data_validation_artifact)
3234

3335
data_transformation_config = DataTransformationConfig(training_pipeline_config)
34-
data_transformation = DataTransformation(data_validation_artifact, data_transformation_config)
35-
data_transformation_artifact = data_transformation.initiate_data_transformation()
36-
logging.info('Data Transformation Complete')
36+
data_transformation = DataTransformation(
37+
data_validation_artifact, data_transformation_config
38+
)
39+
data_transformation_artifact = (
40+
data_transformation.initiate_data_transformation()
41+
)
42+
logging.info("Data Transformation Complete")
3743
print(data_transformation_artifact)
3844

3945
model_trainer_config = ModelTrainerConfig(training_pipeline_config)
4046
model_trainer = ModelTrainer(model_trainer_config, data_transformation_artifact)
4147
model_trainer_artifact = model_trainer.initiate_model_trainer()
42-
logging.info('Model Training Complete')
48+
logging.info("Model Training Complete")
4349
print(model_trainer_artifact)
4450

4551
except Exception as e:

mongo.py

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,75 @@
1-
2-
import os
31
import json
2+
import os
3+
from pathlib import Path
4+
45
import certifi
56
import pandas as pd
6-
from pathlib import Path
7+
from dotenv import load_dotenv
78
from pymongo.mongo_client import MongoClient
89
from pymongo.server_api import ServerApi
9-
from dotenv import load_dotenv
1010

1111
from src.exception.exception import CustomException
12-
from src.logging.logging import logging
12+
from src.logger.logger import logging
1313

1414
load_dotenv()
1515

1616
# Create a new client and connect to the server
1717
# client = MongoClient(uri, server_api=ServerApi('1'))
1818

19-
uri = os.getenv('MONGO_URL')
20-
logging.info('MONGODB is set and ready to use')
19+
uri = os.getenv("MONGO_URL")
20+
logging.info("MONGODB is set and ready to use")
2121

22-
class NetworkDataExtract():
22+
23+
class NetworkDataExtract:
2324
def __init__(self):
2425
try:
2526
pass
26-
27+
2728
except Exception as e:
2829
raise CustomException(e)
29-
30+
3031
def convert_csv_to_json(self, file_path: Path):
3132
try:
3233
data = pd.read_csv(file_path)
3334
data.reset_index(drop=True, inplace=True)
3435
records = list(json.loads(data.T.to_json()).values())
35-
logging.info('records are ready')
36+
logging.info("records are ready")
3637
return records
37-
38+
3839
except Exception as e:
3940
raise CustomException(e)
40-
41+
4142
def insert_data_to_mongo(self, records, database, collections):
4243
try:
4344
self.records = records
4445
self.database = database
4546
self.collections = collections
4647
self.mongo_client = MongoClient(
47-
uri,
48-
tls=True,
49-
tlsCAFile=certifi.where(),
50-
tlsAllowInvalidCertificates=False,
51-
server_api=ServerApi('1'),
52-
serverSelectionTimeoutMS=10000
53-
)
48+
uri,
49+
tls=True,
50+
tlsCAFile=certifi.where(),
51+
tlsAllowInvalidCertificates=False,
52+
server_api=ServerApi("1"),
53+
serverSelectionTimeoutMS=10000,
54+
)
5455
self.database = self.mongo_client[self.database]
5556
self.collections = self.database[self.collections]
5657
self.collections.insert_many(records)
57-
logging.info('collections is ready')
58+
logging.info("collections is ready")
5859

5960
return len(self.records)
60-
61+
6162
except Exception as e:
6263
raise CustomException(e)
63-
64+
65+
6466
if __name__ == "__main__":
65-
FILE_PATH = Path('data/phisingData.csv')
66-
DATABASE = 'NetworkDatabase'
67-
Collections = 'NetworkData'
67+
FILE_PATH = Path("data/phisingData.csv")
68+
DATABASE = "NetworkDatabase"
69+
Collections = "NetworkData"
6870
nde = NetworkDataExtract()
6971
records = nde.convert_csv_to_json(FILE_PATH)
70-
no_of_records = nde.insert_data_to_mongo(records=records, database=DATABASE, collections=Collections)
71-
print(no_of_records)
72+
no_of_records = nde.insert_data_to_mongo(
73+
records=records, database=DATABASE, collections=Collections
74+
)
75+
print(no_of_records)

src/components/data_ingestion.py

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
11
import os
2+
from pathlib import Path
3+
24
import numpy as np
35
import pandas as pd
4-
from pathlib import Path
56
from dotenv import load_dotenv
67
from pymongo.mongo_client import MongoClient
78
from sklearn.model_selection import train_test_split
89

9-
from src.entity.config import DataIngestionConfig
1010
from src.entity.artifact import DataIngestionArtifact
11+
from src.entity.config import DataIngestionConfig
1112
from src.exception.exception import CustomException
12-
from src.logging.logging import logging
13+
from src.logger.logger import logging
1314

1415
load_dotenv()
1516

16-
MONGO_URL = os.getenv('MONGO_URL')
17+
MONGO_URL = os.getenv("MONGO_URL")
18+
1719

1820
class DataIngestion:
1921
def __init__(self, data_ingestion_config: DataIngestionConfig):
2022
try:
2123
self.data_ingestion_config = data_ingestion_config
2224
except Exception as e:
2325
raise CustomException(e)
24-
26+
2527
def export_collection_as_dataframe(self) -> pd.DataFrame:
2628
"""Fetch collection data from MongoDB and return it as a DataFrame."""
2729
try:
@@ -38,24 +40,24 @@ def export_collection_as_dataframe(self) -> pd.DataFrame:
3840

3941
df.replace({"na": np.nan}, inplace=True)
4042
return df
41-
43+
4244
except Exception as e:
4345
raise CustomException(e)
44-
46+
4547
def export_data_into_feature_store(self, dataframe: pd.DataFrame) -> pd.DataFrame:
4648
"""Save the fetched data into a local feature store CSV."""
4749
try:
4850
feature_store_file_path = self.data_ingestion_config.feature_store_file_path
4951
feature_store_file_path.parent.mkdir(parents=True, exist_ok=True)
50-
52+
5153
dataframe.to_csv(feature_store_file_path, index=False, header=True)
5254
logging.info(f"Feature store saved at: {feature_store_file_path}")
53-
55+
5456
return dataframe
55-
57+
5658
except Exception as e:
5759
raise CustomException(e)
58-
60+
5961
def split_data_into_test_train(self, dataframe: pd.DataFrame) -> None:
6062
"""Split the dataset into train and test sets and store them."""
6163
try:
@@ -76,23 +78,25 @@ def split_data_into_test_train(self, dataframe: pd.DataFrame) -> None:
7678
train_set.to_csv(train_path, index=False, header=True)
7779
test_set.to_csv(test_path, index=False, header=True)
7880

79-
logging.info(f"Train and test data exported:\nTrain → {train_path}\nTest → {test_path}")
81+
logging.info(
82+
f"Train and test data exported:\nTrain → {train_path}\nTest → {test_path}"
83+
)
8084

8185
except Exception as e:
8286
raise CustomException(e)
83-
87+
8488
def initiate_data_ingestion(self) -> DataIngestionArtifact:
8589
"""Main pipeline that runs data fetching, storing, and splitting."""
8690
try:
8791
dataframe = self.export_collection_as_dataframe()
8892
dataframe = self.export_data_into_feature_store(dataframe)
8993
self.split_data_into_test_train(dataframe)
90-
94+
9195
artifact = DataIngestionArtifact(
9296
train_file_path=self.data_ingestion_config.training_file_path,
9397
test_file_path=self.data_ingestion_config.testing_file_path,
9498
)
95-
99+
96100
logging.info("Data ingestion completed successfully.")
97101
return artifact
98102

0 commit comments

Comments
 (0)