rafaldembski commited on
Commit
8aac70d
verified
1 Parent(s): 90ae917

Update utils/functions.py

Browse files
Files changed (1) hide show
  1. utils/functions.py +95 -106
utils/functions.py CHANGED
@@ -12,12 +12,6 @@ from sqlalchemy import create_engine, Column, String, Integer, DateTime
12
  from sqlalchemy.ext.declarative import declarative_base
13
  from sqlalchemy.orm import sessionmaker
14
 
15
- from dotenv import load_dotenv
16
-
17
- # Za艂aduj zmienne 艣rodowiskowe z pliku .env (je艣li u偶ywasz)
18
- # W Streamlit Spaces Secrets s膮 automatycznie dost臋pne
19
- load_dotenv()
20
-
21
  # Konfiguracja logowania
22
  logging.basicConfig(
23
  filename='app.log',
@@ -55,20 +49,15 @@ class Stats(Base):
55
  total_analyses = Column(Integer, default=0)
56
  total_frauds_detected = Column(Integer, default=0)
57
 
58
- # Tworzenie tabel w bazie danych
59
  Base.metadata.create_all(bind=engine)
60
 
61
  # Funkcje pomocnicze
62
 
63
- def get_db():
64
- db = SessionLocal()
65
- try:
66
- yield db
67
- finally:
68
- db.close()
69
-
70
- # Dodanie numeru telefonu do bazy danych
71
  def add_fake_number(phone_number):
 
 
 
72
  db = SessionLocal()
73
  try:
74
  existing_number = db.query(FakeNumber).filter(FakeNumber.phone_number == phone_number).first()
@@ -89,8 +78,10 @@ def add_fake_number(phone_number):
89
  finally:
90
  db.close()
91
 
92
- # Sprawdzenie, czy numer telefonu jest w bazie danych
93
  def is_fake_number(phone_number):
 
 
 
94
  db = SessionLocal()
95
  try:
96
  exists = db.query(FakeNumber).filter(FakeNumber.phone_number == phone_number).first() is not None
@@ -102,8 +93,89 @@ def is_fake_number(phone_number):
102
  finally:
103
  db.close()
104
 
105
- # Funkcja do weryfikacji numeru telefonu
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  def get_phone_info(phone_number):
 
 
 
107
  try:
108
  parsed_number = phonenumbers.parse(phone_number, None)
109
  country = geocoder.description_for_number(parsed_number, 'pl')
@@ -114,8 +186,10 @@ def get_phone_info(phone_number):
114
  logging.error(f"Nie uda艂o si臋 przetworzy膰 numeru telefonu {phone_number}: {e}")
115
  return None, None
116
 
117
- # Proste sprawdzenia heurystyczne wiadomo艣ci
118
  def simple_checks(message, language):
 
 
 
119
  warnings = []
120
  # Baza s艂贸w kluczowych (polski, niemiecki, angielski)
121
  scam_keywords = {
@@ -134,8 +208,10 @@ def simple_checks(message, language):
134
  warnings.append("Wiadomo艣膰 zawiera pro艣b臋 o poufne informacje.")
135
  return warnings
136
 
137
- # Funkcja do analizy wiadomo艣ci za pomoc膮 API SambaNova
138
  def analyze_message(message, phone_number, additional_info, api_key, language):
 
 
 
139
  if not api_key:
140
  logging.error("Brak klucza API.")
141
  return "Brak klucza API.", "Brak klucza API.", "Brak klucza API."
@@ -269,90 +345,3 @@ Provide your analysis and conclusions following the guidelines above."""
269
  except Exception as e:
270
  logging.error(f"API Connection Error: {e}")
271
  return f"API Connection Error: {e}", "Analysis Error.", "Analysis Error."
272
-
273
- # Inicjalizacja pliku statystyk
274
- def init_stats_file():
275
- db = SessionLocal()
276
- try:
277
- stats = db.query(Stats).first()
278
- if not stats:
279
- new_stats = Stats()
280
- db.add(new_stats)
281
- db.commit()
282
- logging.info("Utworzono nowe statystyki.")
283
- except Exception as e:
284
- db.rollback()
285
- logging.error(f"Nie uda艂o si臋 zainicjalizowa膰 statystyk: {e}")
286
- finally:
287
- db.close()
288
-
289
- # Pobranie statystyk
290
- def get_stats():
291
- db = SessionLocal()
292
- try:
293
- stats = db.query(Stats).first()
294
- if stats:
295
- logging.info("Statystyki zosta艂y pobrane pomy艣lnie.")
296
- return {"total_analyses": stats.total_analyses, "total_frauds_detected": stats.total_frauds_detected}
297
- else:
298
- logging.info("Brak statystyk w bazie danych.")
299
- return {"total_analyses": 0, "total_frauds_detected": 0}
300
- except Exception as e:
301
- logging.error(f"Nie uda艂o si臋 pobra膰 statystyk: {e}")
302
- return {"total_analyses": 0, "total_frauds_detected": 0}
303
- finally:
304
- db.close()
305
-
306
- # Aktualizacja statystyk analizy
307
- def update_stats(fraud_detected=False):
308
- db = SessionLocal()
309
- try:
310
- stats = db.query(Stats).first()
311
- if not stats:
312
- stats = Stats()
313
- db.add(stats)
314
-
315
- stats.total_analyses += 1
316
- if fraud_detected:
317
- stats.total_frauds_detected += 1
318
-
319
- db.commit()
320
- logging.info(f"Statystyki zosta艂y zaktualizowane: Analiz {stats.total_analyses}, Oszustw {stats.total_frauds_detected}.")
321
- except Exception as e:
322
- db.rollback()
323
- logging.error(f"Nie uda艂o si臋 zaktualizowa膰 statystyk: {e}")
324
- finally:
325
- db.close()
326
-
327
- # Dodanie wpisu do historii analiz
328
- def add_to_history(message, phone_number, analysis, risk, recommendations):
329
- db = SessionLocal()
330
- try:
331
- new_entry = AnalysisHistory(
332
- message=message,
333
- phone_number=phone_number,
334
- analysis=analysis,
335
- risk_assessment=risk,
336
- recommendations=recommendations
337
- )
338
- db.add(new_entry)
339
- db.commit()
340
- logging.info(f"Dodano wpis do historii analiz dla numeru {phone_number}.")
341
- except Exception as e:
342
- db.rollback()
343
- logging.error(f"Nie uda艂o si臋 zapisa膰 historii analiz dla numeru {phone_number}: {e}")
344
- finally:
345
- db.close()
346
-
347
- # Pobranie historii analiz
348
- def get_history():
349
- db = SessionLocal()
350
- try:
351
- history = db.query(AnalysisHistory).order_by(AnalysisHistory.timestamp.desc()).all()
352
- logging.info("Historia analiz zosta艂a pobrana pomy艣lnie.")
353
- return history
354
- except Exception as e:
355
- logging.error(f"Nie uda艂o si臋 pobra膰 historii analiz: {e}")
356
- return []
357
- finally:
358
- db.close()
 
12
  from sqlalchemy.ext.declarative import declarative_base
13
  from sqlalchemy.orm import sessionmaker
14
 
 
 
 
 
 
 
15
  # Konfiguracja logowania
16
  logging.basicConfig(
17
  filename='app.log',
 
49
  total_analyses = Column(Integer, default=0)
50
  total_frauds_detected = Column(Integer, default=0)
51
 
52
+ # Tworzenie tabel w bazie danych (je艣li jeszcze nie istniej膮)
53
  Base.metadata.create_all(bind=engine)
54
 
55
  # Funkcje pomocnicze
56
 
 
 
 
 
 
 
 
 
57
  def add_fake_number(phone_number):
58
+ """
59
+ Dodaje numer telefonu do bazy danych jako fa艂szywy, je艣li jeszcze go tam nie ma.
60
+ """
61
  db = SessionLocal()
62
  try:
63
  existing_number = db.query(FakeNumber).filter(FakeNumber.phone_number == phone_number).first()
 
78
  finally:
79
  db.close()
80
 
 
81
  def is_fake_number(phone_number):
82
+ """
83
+ Sprawdza, czy dany numer telefonu jest oznaczony jako fa艂szywy w bazie danych.
84
+ """
85
  db = SessionLocal()
86
  try:
87
  exists = db.query(FakeNumber).filter(FakeNumber.phone_number == phone_number).first() is not None
 
93
  finally:
94
  db.close()
95
 
96
+ def add_to_history(message, phone_number, analysis, risk, recommendations):
97
+ """
98
+ Dodaje wpis do historii analiz.
99
+ """
100
+ db = SessionLocal()
101
+ try:
102
+ new_entry = AnalysisHistory(
103
+ message=message,
104
+ phone_number=phone_number,
105
+ analysis=analysis,
106
+ risk_assessment=risk,
107
+ recommendations=recommendations
108
+ )
109
+ db.add(new_entry)
110
+ db.commit()
111
+ logging.info(f"Dodano wpis do historii analiz dla numeru {phone_number}.")
112
+ except Exception as e:
113
+ db.rollback()
114
+ logging.error(f"Nie uda艂o si臋 zapisa膰 historii analiz dla numeru {phone_number}: {e}")
115
+ finally:
116
+ db.close()
117
+
118
+ def update_stats(fraud_detected=False):
119
+ """
120
+ Aktualizuje statystyki analiz w bazie danych.
121
+ """
122
+ db = SessionLocal()
123
+ try:
124
+ stats = db.query(Stats).first()
125
+ if not stats:
126
+ stats = Stats()
127
+ db.add(stats)
128
+
129
+ stats.total_analyses += 1
130
+ if fraud_detected:
131
+ stats.total_frauds_detected += 1
132
+
133
+ db.commit()
134
+ logging.info(f"Statystyki zosta艂y zaktualizowane: Analiz {stats.total_analyses}, Oszustw {stats.total_frauds_detected}.")
135
+ except Exception as e:
136
+ db.rollback()
137
+ logging.error(f"Nie uda艂o si臋 zaktualizowa膰 statystyk: {e}")
138
+ finally:
139
+ db.close()
140
+
141
+ def get_stats():
142
+ """
143
+ Pobiera statystyki analiz z bazy danych.
144
+ """
145
+ db = SessionLocal()
146
+ try:
147
+ stats = db.query(Stats).first()
148
+ if stats:
149
+ logging.info("Statystyki zosta艂y pobrane pomy艣lnie.")
150
+ return {"total_analyses": stats.total_analyses, "total_frauds_detected": stats.total_frauds_detected}
151
+ else:
152
+ logging.info("Brak statystyk w bazie danych.")
153
+ return {"total_analyses": 0, "total_frauds_detected": 0}
154
+ except Exception as e:
155
+ logging.error(f"Nie uda艂o si臋 pobra膰 statystyk: {e}")
156
+ return {"total_analyses": 0, "total_frauds_detected": 0}
157
+ finally:
158
+ db.close()
159
+
160
+ def get_history():
161
+ """
162
+ Pobiera histori臋 analiz z bazy danych.
163
+ """
164
+ db = SessionLocal()
165
+ try:
166
+ history = db.query(AnalysisHistory).order_by(AnalysisHistory.timestamp.desc()).all()
167
+ logging.info("Historia analiz zosta艂a pobrana pomy艣lnie.")
168
+ return history
169
+ except Exception as e:
170
+ logging.error(f"Nie uda艂o si臋 pobra膰 historii analiz: {e}")
171
+ return []
172
+ finally:
173
+ db.close()
174
+
175
  def get_phone_info(phone_number):
176
+ """
177
+ Weryfikuje numer telefonu i zwraca informacje o kraju i operatorze.
178
+ """
179
  try:
180
  parsed_number = phonenumbers.parse(phone_number, None)
181
  country = geocoder.description_for_number(parsed_number, 'pl')
 
186
  logging.error(f"Nie uda艂o si臋 przetworzy膰 numeru telefonu {phone_number}: {e}")
187
  return None, None
188
 
 
189
  def simple_checks(message, language):
190
+ """
191
+ Przeprowadza proste sprawdzenia heurystyczne wiadomo艣ci SMS.
192
+ """
193
  warnings = []
194
  # Baza s艂贸w kluczowych (polski, niemiecki, angielski)
195
  scam_keywords = {
 
208
  warnings.append("Wiadomo艣膰 zawiera pro艣b臋 o poufne informacje.")
209
  return warnings
210
 
 
211
  def analyze_message(message, phone_number, additional_info, api_key, language):
212
+ """
213
+ Analizuje wiadomo艣膰 SMS za pomoc膮 API SambaNova.
214
+ """
215
  if not api_key:
216
  logging.error("Brak klucza API.")
217
  return "Brak klucza API.", "Brak klucza API.", "Brak klucza API."
 
345
  except Exception as e:
346
  logging.error(f"API Connection Error: {e}")
347
  return f"API Connection Error: {e}", "Analysis Error.", "Analysis Error."