فهرست منبع

Create jobs.py

jobs page for taipy app
Pranshu Raj 1 سال پیش
والد
کامیت
84ca0709b8
1فایلهای تغییر یافته به همراه136 افزوده شده و 0 حذف شده
  1. 136 0
      Quine Package Quests/Job-finder/pages/jobs.py

+ 136 - 0
Quine Package Quests/Job-finder/pages/jobs.py

@@ -0,0 +1,136 @@
+import logging
+from taipy.gui import Gui, navigate
+import taipy.gui.builder as tgb
+import pandas as pd
+
+logging.basicConfig(level=logging.INFO)
+
+df = pd.read_csv("data/aggregate/aggregate.csv")
+
+filtered_df = df
+selected_locations = list(df["location"].unique())
+selected_queries = [
+    "python developer",
+    "data analyst",
+    "machine learning engineer",
+    "software engineer",
+    "backend developer",
+    "devops engineer",
+    "automation engineer",
+    "network engineer",
+    "vuejs developer",
+    "react developer",
+    "nodejs developer",
+    "frontend developer",
+    "full stack developer",
+    "ui developer",
+    "web application developer",
+    "javascript engineer",
+    "mobile app developer",
+    "other",
+]
+selected_sources = ["indeed", "yc"]
+links = {}
+chunk_index = 0
+
+
+def get_chunks(df, chunk_size=20):
+    n_chunks = len(df) // chunk_size + 1
+    for i in range(n_chunks):
+        yield df.iloc[i * chunk_size : (i + 1) * chunk_size]
+
+
+chunks = list(get_chunks(filtered_df))
+
+def filter_data(state):
+    print(state.selected_locations, state.selected_sources, state.selected_queries)
+    state.filtered_df = state.filtered_df[
+        state.filtered_df["location"].isin([state.selected_locations])
+        & state.filtered_df["source"].isin([state.selected_sources])
+        & state.filtered_df["query"].isin([state.selected_queries])
+    ]
+    state.chunk_index=0
+    if state.filtered_df.empty:
+        logging.warning("No filtered rows available")
+
+    simulate_adding_more_links(state)
+
+
+def navigate_to_link(state, link_url, payload=None):
+    navigate(state, to=link_url, force=True)
+
+
+# todo : On interacting with selector, it refreshes chunk without actually filtering, fix this
+
+
+def simulate_adding_more_links(state):
+    state.selected_sources = 'indeed'
+    state.selected_queries = 'python developer'
+    state.selected_locations = 'remote'
+    state.chunks = list(get_chunks(state.filtered_df))
+    if state.chunk_index < len(state.chunks):
+        chunk = state.chunks[state.chunk_index]
+        if not chunk.empty:
+            logging.info(f"processing chunk {state.chunk_index}")
+            logging.info(chunk.index[0])
+            chunk.reset_index(drop=True, inplace=True)
+            state.links = {"link_" + str(i): row for i, row in chunk.iterrows()}
+        state.chunk_index += 1
+
+
+with tgb.Page() as link_part:
+    tgb.text('Find Jobs', class_name='h2')
+    tgb.html('br')
+    with tgb.layout("4 1 1"):
+        tgb.selector(
+            value="{selected_queries}",
+            lov=selected_queries,
+            on_change=filter_data,
+            dropdown=True,
+            multiple=False,
+            class_name="fullwidth",
+        )
+        tgb.selector(
+            value="{selected_locations}",
+            lov=selected_locations,
+            on_change=filter_data,
+            dropdown=True,
+            multiple=False,
+            class_name="fullwidth",
+        )
+        tgb.selector(
+            value="{selected_sources}",
+            lov=selected_sources,
+            on_change=filter_data,
+            dropdown=True,
+            multiple=False,
+            class_name="fullwidth",
+        )
+    with tgb.layout("1 1 1 1"):
+        for i in range(20):
+            with tgb.part("card"):
+                tgb.text("{links['link_" + str(i) + "']['title']}", class_name="h3")
+                tgb.html("br")
+                with tgb.layout("1 1"):
+                    tgb.text(
+                        "{links['link_" + str(i) + "']['company']}", class_name="h5"
+                    )
+                    tgb.text(
+                        "{links['link_" + str(i) + "']['location']}", class_name="h5"
+                    )
+                tgb.button(
+                    "Apply",
+                    on_action=navigate_to_link,
+                    id="{links['link_" + str(i) + "']['link']}",
+                    class_name="plain",
+                )
+
+    tgb.button("See more jobs", on_action=simulate_adding_more_links)
+
+
+def on_init(state):
+    simulate_adding_more_links(state)
+
+
+# * do not use the following line if running the multi page app, it is only for debugging
+Gui(link_part).run(debug=True, use_reloader=True)