Update app.py
Browse files
app.py
CHANGED
@@ -173,6 +173,130 @@ async def try_openai_api(openai_messages):
|
|
173 |
raise e
|
174 |
|
175 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
def analyze_code(code: str) -> str:
|
177 |
"""์ฝ๋ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ HTML ํ์์ผ๋ก ๋ฐํ"""
|
178 |
analysis = []
|
@@ -195,13 +319,14 @@ def analyze_code(code: str) -> str:
|
|
195 |
for line in code.split('\n'):
|
196 |
if line.startswith('import ') or line.startswith('from '):
|
197 |
imports.append(line.strip())
|
198 |
-
# ํจํค์ง ์ด๋ฆ ์ถ์ถ
|
199 |
if line.startswith('import '):
|
200 |
package = line.split('import ')[1].split()[0].split('.')[0]
|
201 |
else:
|
202 |
package = line.split('from ')[1].split()[0].split('.')[0]
|
203 |
-
required_packages.add(package)
|
204 |
|
|
|
205 |
if imports:
|
206 |
analysis.append("<h2>๐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2>")
|
207 |
analysis.append("<ul>")
|
|
|
173 |
raise e
|
174 |
|
175 |
|
176 |
+
# Import to Package Name Mapping Dictionary
|
177 |
+
IMPORT_TO_PACKAGE = {
|
178 |
+
'PIL': 'pillow',
|
179 |
+
'cv2': 'opencv-python',
|
180 |
+
'sklearn': 'scikit-learn',
|
181 |
+
'bs4': 'beautifulsoup4',
|
182 |
+
'yaml': 'pyyaml',
|
183 |
+
'tensorflow': 'tensorflow-cpu',
|
184 |
+
'tf': 'tensorflow-cpu',
|
185 |
+
'wx': 'wxPython',
|
186 |
+
'cairo': 'pycairo',
|
187 |
+
'MySQLdb': 'mysqlclient',
|
188 |
+
'psycopg2': 'psycopg2-binary',
|
189 |
+
'magic': 'python-magic',
|
190 |
+
'Image': 'pillow',
|
191 |
+
'skimage': 'scikit-image',
|
192 |
+
'matplotlib.pyplot': 'matplotlib',
|
193 |
+
'plt': 'matplotlib',
|
194 |
+
'np': 'numpy',
|
195 |
+
'pd': 'pandas',
|
196 |
+
'torch': 'pytorch',
|
197 |
+
'transformers': 'transformers',
|
198 |
+
'librosa': 'librosa',
|
199 |
+
'nltk': 'nltk',
|
200 |
+
'spacy': 'spacy',
|
201 |
+
'requests': 'requests',
|
202 |
+
'flask': 'flask',
|
203 |
+
'fastapi': 'fastapi',
|
204 |
+
'aiohttp': 'aiohttp',
|
205 |
+
'imageio': 'imageio',
|
206 |
+
'moviepy': 'moviepy',
|
207 |
+
'networkx': 'networkx',
|
208 |
+
'statsmodels': 'statsmodels',
|
209 |
+
'seaborn': 'seaborn',
|
210 |
+
'bokeh': 'bokeh',
|
211 |
+
'plotly': 'plotly',
|
212 |
+
'dash': 'dash',
|
213 |
+
'streamlit': 'streamlit',
|
214 |
+
'altair': 'altair',
|
215 |
+
'geopandas': 'geopandas',
|
216 |
+
'folium': 'folium',
|
217 |
+
'shapely': 'shapely',
|
218 |
+
'fiona': 'fiona',
|
219 |
+
'rasterio': 'rasterio',
|
220 |
+
'gdal': 'gdal',
|
221 |
+
'pyproj': 'pyproj',
|
222 |
+
'rtree': 'rtree',
|
223 |
+
'cartopy': 'cartopy',
|
224 |
+
'geoplot': 'geoplot',
|
225 |
+
'descartes': 'descartes',
|
226 |
+
'pysal': 'pysal',
|
227 |
+
'geopy': 'geopy',
|
228 |
+
'osmnx': 'osmnx',
|
229 |
+
'contextily': 'contextily',
|
230 |
+
'xarray': 'xarray',
|
231 |
+
'netCDF4': 'netCDF4',
|
232 |
+
'h5py': 'h5py',
|
233 |
+
'tables': 'pytables',
|
234 |
+
'zarr': 'zarr',
|
235 |
+
'dask': 'dask',
|
236 |
+
'numba': 'numba',
|
237 |
+
'sympy': 'sympy',
|
238 |
+
'scipy': 'scipy',
|
239 |
+
'scikit-image': 'scikit-image',
|
240 |
+
'scikit-learn': 'scikit-learn',
|
241 |
+
'keras': 'keras',
|
242 |
+
'theano': 'theano',
|
243 |
+
'caffe': 'caffe',
|
244 |
+
'mxnet': 'mxnet',
|
245 |
+
'chainer': 'chainer',
|
246 |
+
'pytorch': 'torch',
|
247 |
+
'tensorflow-gpu': 'tensorflow-gpu',
|
248 |
+
'cupy': 'cupy',
|
249 |
+
'pycuda': 'pycuda',
|
250 |
+
'pyopencl': 'pyopencl',
|
251 |
+
'pyvista': 'pyvista',
|
252 |
+
'mayavi': 'mayavi',
|
253 |
+
'vtk': 'vtk',
|
254 |
+
'trimesh': 'trimesh',
|
255 |
+
'open3d': 'open3d-python',
|
256 |
+
'pyqt5': 'PyQt5',
|
257 |
+
'pyside2': 'PySide2',
|
258 |
+
'tkinter': 'tk',
|
259 |
+
'kivy': 'kivy',
|
260 |
+
'pygame': 'pygame',
|
261 |
+
'arcade': 'arcade',
|
262 |
+
'pyglet': 'pyglet',
|
263 |
+
'panda3d': 'panda3d',
|
264 |
+
'ursina': 'ursina',
|
265 |
+
'moderngl': 'moderngl',
|
266 |
+
'glfw': 'glfw',
|
267 |
+
'pyopengl': 'PyOpenGL',
|
268 |
+
'pysdl2': 'PySDL2',
|
269 |
+
'pybullet': 'pybullet',
|
270 |
+
'box2d': 'box2d-py',
|
271 |
+
'pymunk': 'pymunk',
|
272 |
+
'pyode': 'pyode',
|
273 |
+
'pyrr': 'pyrr',
|
274 |
+
'noise': 'noise',
|
275 |
+
'wave': 'wave',
|
276 |
+
'sounddevice': 'sounddevice',
|
277 |
+
'pyaudio': 'PyAudio',
|
278 |
+
'simpleaudio': 'simpleaudio',
|
279 |
+
'pygame.mixer': 'pygame',
|
280 |
+
'pydub': 'pydub',
|
281 |
+
'aubio': 'aubio',
|
282 |
+
'music21': 'music21',
|
283 |
+
'pretty_midi': 'pretty_midi',
|
284 |
+
'mido': 'mido',
|
285 |
+
'fluidsynth': 'fluidsynth',
|
286 |
+
'mingus': 'mingus',
|
287 |
+
'pyfluidsynth': 'pyfluidsynth',
|
288 |
+
'python-rtmidi': 'python-rtmidi',
|
289 |
+
'pygame.midi': 'pygame',
|
290 |
+
'soundfile': 'soundfile',
|
291 |
+
'resampy': 'resampy'
|
292 |
+
}
|
293 |
+
|
294 |
+
def get_package_name(import_name):
|
295 |
+
"""์ํฌํธ๋ช
์ผ๋ก๋ถํฐ ์ค์ ํจํค์ง๋ช
์ ๋ฐํ"""
|
296 |
+
# ์ ์ด ์๋ ๊ฒฝ์ฐ ์ฒซ ๋ถ๋ถ๋ง ์ฌ์ฉ (์: matplotlib.pyplot -> matplotlib)
|
297 |
+
base_import = import_name.split('.')[0]
|
298 |
+
return IMPORT_TO_PACKAGE.get(base_import, base_import)
|
299 |
+
|
300 |
def analyze_code(code: str) -> str:
|
301 |
"""์ฝ๋ ๋ถ์ ๊ฒฐ๊ณผ๋ฅผ HTML ํ์์ผ๋ก ๋ฐํ"""
|
302 |
analysis = []
|
|
|
319 |
for line in code.split('\n'):
|
320 |
if line.startswith('import ') or line.startswith('from '):
|
321 |
imports.append(line.strip())
|
322 |
+
# ํจํค์ง ์ด๋ฆ ์ถ์ถ ๋ฐ ๋ณํ
|
323 |
if line.startswith('import '):
|
324 |
package = line.split('import ')[1].split()[0].split('.')[0]
|
325 |
else:
|
326 |
package = line.split('from ')[1].split()[0].split('.')[0]
|
327 |
+
required_packages.add(get_package_name(package))
|
328 |
|
329 |
+
|
330 |
if imports:
|
331 |
analysis.append("<h2>๐ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ</h2>")
|
332 |
analysis.append("<ul>")
|