From ab327d8758e5767f1b312ed9683a8da21ec2c9e9 Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Tue, 25 Jun 2024 10:13:29 +0000 Subject: [PATCH 1/9] Task1 Completed --- Sanjana-Easy/Task1.py | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 Sanjana-Easy/Task1.py diff --git a/Sanjana-Easy/Task1.py b/Sanjana-Easy/Task1.py new file mode 100644 index 0000000..9ff8c80 --- /dev/null +++ b/Sanjana-Easy/Task1.py @@ -0,0 +1,71 @@ +import requests +from bs4 import BeautifulSoup +import csv +import json + +# URL to fetch +url = "https://www.techadvisor.com/article/724318/best-smartphone.html" + +# Perform the HTTP GET request +response = requests.get(url) + +# Parse the HTML content with BeautifulSoup +soup = BeautifulSoup(response.content, 'html.parser') + +# Extract the phone names +phones = soup.find_all(class_='product-chart-item__title-wrapper--title') +phone_names = [h2.get_text(strip=True) for h2 in phones] + +# Initialize lists for pros and cons +all_pros = [] +all_cons = [] + +# Extract the pros and cons lists +pros_divs = soup.find_all('div', class_='product-chart-column') +for div in pros_divs: + title = div.find('p', class_='product-chart-subTitle').get_text(strip=True) + ul = div.find('ul', class_='product-pros-cons-list') + if title == 'Pros': + pros = [li.get_text(strip=True) for li in ul.find_all('li')] + all_pros.append(pros) + elif title == 'Cons': + cons = [li.get_text(strip=True) for li in ul.find_all('li')] + all_cons.append(cons) + +# Combine the phone names, pros, and cons into a structured format +phones_data = [] +for i in range(len(phone_names)): + phone_data = { + "phone": phone_names[i], + "pros": all_pros[i] if i < len(all_pros) else [], + "cons": all_cons[i] if i < len(all_cons) else [] + } + phones_data.append(phone_data) + +# Print the combined data +for phone in phones_data: + print(f"Phone: {phone['phone']}") + print("Pros:") + for pro in phone['pros']: + print(f" - {pro}") + print("Cons:") + for con in phone['cons']: + print(f" - {con}") + print('-------------------') + +# Save the structured data to JSON +with open('phones_data.json', 'w', encoding='utf-8') as jsonfile: + json.dump(phones_data, jsonfile, indent=4) + +print("Extracted data saved to phones_data.json") + +# Save the structured data to CSV +with open('phones_data.csv', 'w', newline='', encoding='utf-8') as csvfile: + writer = csv.writer(csvfile) + writer.writerow(["Phone", "Pros", "Cons"]) + for phone in phones_data: + pros = "; ".join(phone["pros"]) + cons = "; ".join(phone["cons"]) + writer.writerow([phone["phone"], pros, cons]) + +print("Extracted data saved to phones_data.csv") \ No newline at end of file From c4183cd0b3b362e9b5f33e14ca698314199b16ff Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Thu, 27 Jun 2024 03:11:57 +0000 Subject: [PATCH 2/9] Modified Changes --- Sanjana-Easy/Task1.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Sanjana-Easy/Task1.py b/Sanjana-Easy/Task1.py index 9ff8c80..ad97968 100644 --- a/Sanjana-Easy/Task1.py +++ b/Sanjana-Easy/Task1.py @@ -34,11 +34,11 @@ # Combine the phone names, pros, and cons into a structured format phones_data = [] -for i in range(len(phone_names)): +for phone_name, pros, cons in zip(phone_names, all_pros, all_cons): phone_data = { - "phone": phone_names[i], - "pros": all_pros[i] if i < len(all_pros) else [], - "cons": all_cons[i] if i < len(all_cons) else [] + "phone": phone_name, + "pros": pros, + "cons": cons } phones_data.append(phone_data) @@ -54,13 +54,13 @@ print('-------------------') # Save the structured data to JSON -with open('phones_data.json', 'w', encoding='utf-8') as jsonfile: +with open('phones_data.json', 'w',encoding='utf-8') as jsonfile: json.dump(phones_data, jsonfile, indent=4) print("Extracted data saved to phones_data.json") # Save the structured data to CSV -with open('phones_data.csv', 'w', newline='', encoding='utf-8') as csvfile: +with open('phones_data.csv', 'w',newline='') as csvfile: writer = csv.writer(csvfile) writer.writerow(["Phone", "Pros", "Cons"]) for phone in phones_data: From 552b31fd04306e14b79990310260224f64765238 Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Mon, 8 Jul 2024 08:18:43 +0000 Subject: [PATCH 3/9] Update --- Sanjana-Easy/Task1.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Sanjana-Easy/Task1.py b/Sanjana-Easy/Task1.py index ad97968..c47dcb2 100644 --- a/Sanjana-Easy/Task1.py +++ b/Sanjana-Easy/Task1.py @@ -34,11 +34,11 @@ # Combine the phone names, pros, and cons into a structured format phones_data = [] -for phone_name, pros, cons in zip(phone_names, all_pros, all_cons): +for i in range(len(phone_names)): phone_data = { - "phone": phone_name, - "pros": pros, - "cons": cons + "phone": phone_names[i], + "pros": all_pros[i] if i < len(all_pros) else [], + "cons": all_cons[i] if i < len(all_cons) else [] } phones_data.append(phone_data) @@ -54,13 +54,13 @@ print('-------------------') # Save the structured data to JSON -with open('phones_data.json', 'w',encoding='utf-8') as jsonfile: +with open('phones_data.json', 'w', encoding='utf-8') as jsonfile: json.dump(phones_data, jsonfile, indent=4) print("Extracted data saved to phones_data.json") # Save the structured data to CSV -with open('phones_data.csv', 'w',newline='') as csvfile: +with open('phones_data.csv', 'w', newline='', encoding='utf-8') as csvfile: writer = csv.writer(csvfile) writer.writerow(["Phone", "Pros", "Cons"]) for phone in phones_data: @@ -68,4 +68,4 @@ cons = "; ".join(phone["cons"]) writer.writerow([phone["phone"], pros, cons]) -print("Extracted data saved to phones_data.csv") \ No newline at end of file +print("Extracted data saved to phones_data.csv") From ebc453649778402df5dc7c4d9984bbf662796d13 Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Tue, 9 Jul 2024 18:42:41 +0000 Subject: [PATCH 4/9] Task 2 Completion --- Sanjana-Easy/Task2.py | 44 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 Sanjana-Easy/Task2.py diff --git a/Sanjana-Easy/Task2.py b/Sanjana-Easy/Task2.py new file mode 100644 index 0000000..ac51e19 --- /dev/null +++ b/Sanjana-Easy/Task2.py @@ -0,0 +1,44 @@ +import nltk +from nltk.chat.util import Chat, reflections +nltk.download('punkt') +#creating questions and answers +s=[ + [ + r"Hello|Hi|Hey", + ["Hello,How are you?"] + ], + [ + r"I'm fine", + ["Glad to hear that,how can i help you?"] + ], + [ + r"What is your name?", + ["well they haven't kept me a name but they call me as a chatbot ,if you wish u can give me a name"] + ], + [ + r"Actually I'm feeling a bit lonely|sad|angry|irritated today", + ["sorry to hear about that.I'm here for you! Would you like to share about what's on your mind?"] + ], + [ + r"Yeah well that was a big problem, i can't get rid off it", + ["I'm really sorry to hear about that you are going through a tough time.It's okay to feel overwhelmed by problems sometimes but dont worry that you are not at all alone!"] + ], + [ + r"Can you try to say something lie a joke or entertain me?", + ["Sure,I can definitely change your mood!So,how about this:Why maths book look sad?Because it had any problems!I hope that this brought a little smile to your face!"] + ], + [ + r"Thanks a lot for helping me", + ["You're Welcome!I'm always here for you at anytime,if you need a chat or joke or anything,feel free to ask me"] + ], + [ + r"Exit", + ["It was my pleasure to help you.Please,come again!"] + ] +] +#default message for starting chat +print("Please,write anything to start the chat") +#create a chat instance +chatbot=Chat(s) +#start conversation +chatbot.converse() \ No newline at end of file From 5a0a3ff0a9d16ddcd5a1f9da3e998bdca044aac3 Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Sat, 20 Jul 2024 12:51:28 +0000 Subject: [PATCH 5/9] Task 4 completed --- Sanjana-Easy/Task4.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 Sanjana-Easy/Task4.py diff --git a/Sanjana-Easy/Task4.py b/Sanjana-Easy/Task4.py new file mode 100644 index 0000000..cabd0d2 --- /dev/null +++ b/Sanjana-Easy/Task4.py @@ -0,0 +1,30 @@ +import pyaudio +import wave + +FRAMES__PER_BUFFER=3200 +FORMAT=pyaudio.paInt16 +CHANNELS=1 +RATE=16000 + +p=pyaudio.PyAudio() + +stream=p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=TRUE,frames_per_buffer=FRAMES__PER_BUFFER) + +print("start recoring") + +seconds=5 +frames=[] +for i in range(0,int(RATE/FRAMES__PER_BUFFER*seconds)): + data=stream.read(FRAMES__PER_BUFFER) + frames.append(data) + +stream.stop_stream() +stream.close() +p.terminate() + +obj=wave.open("recording.wave","wb") +obj.setnchannels(CHANNELS) +obj.setsampwidth(p.get_sample_size(FORMAT)) +obj.setframerate(RATE) +obj.writeframes(b"".join(frames)) +obj.close() \ No newline at end of file From 2243e77e79fe4eb1f71ded081f1e28a6959175c9 Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Tue, 23 Jul 2024 18:05:07 +0530 Subject: [PATCH 6/9] Add files via upload --- Sanjana-Easy/Flask/Procfile | 1 + .../Flask/__pycache__/app.cpython-311.pyc | Bin 0 -> 10816 bytes Sanjana-Easy/Flask/app.py | 189 ++++++++++++++++++ Sanjana-Easy/Flask/instance/tasks.db | Bin 0 -> 24576 bytes Sanjana-Easy/Flask/migrations/README | 1 + .../__pycache__/env.cpython-311.pyc | Bin 0 -> 5115 bytes Sanjana-Easy/Flask/migrations/alembic.ini | 50 +++++ Sanjana-Easy/Flask/migrations/env.py | 113 +++++++++++ Sanjana-Easy/Flask/migrations/script.py.mako | 24 +++ .../migrations/versions/06fba380cd41_.py | 50 +++++ .../migrations/versions/2b098398babb_.py | 50 +++++ .../migrations/versions/3aba37d439b5_.py | 24 +++ .../__pycache__/06fba380cd41_.cpython-311.pyc | Bin 0 -> 3153 bytes .../__pycache__/2b098398babb_.cpython-311.pyc | Bin 0 -> 3108 bytes .../__pycache__/3aba37d439b5_.cpython-311.pyc | Bin 0 -> 753 bytes Sanjana-Easy/Flask/requirements.txt | 7 + Sanjana-Easy/Flask/templates/add_task.html | 80 ++++++++ Sanjana-Easy/Flask/templates/dashboard.html | 81 ++++++++ Sanjana-Easy/Flask/templates/edit_task.html | 64 ++++++ Sanjana-Easy/Flask/templates/login.html | 51 +++++ Sanjana-Easy/Flask/templates/register.html | 60 ++++++ 21 files changed, 845 insertions(+) create mode 100644 Sanjana-Easy/Flask/Procfile create mode 100644 Sanjana-Easy/Flask/__pycache__/app.cpython-311.pyc create mode 100644 Sanjana-Easy/Flask/app.py create mode 100644 Sanjana-Easy/Flask/instance/tasks.db create mode 100644 Sanjana-Easy/Flask/migrations/README create mode 100644 Sanjana-Easy/Flask/migrations/__pycache__/env.cpython-311.pyc create mode 100644 Sanjana-Easy/Flask/migrations/alembic.ini create mode 100644 Sanjana-Easy/Flask/migrations/env.py create mode 100644 Sanjana-Easy/Flask/migrations/script.py.mako create mode 100644 Sanjana-Easy/Flask/migrations/versions/06fba380cd41_.py create mode 100644 Sanjana-Easy/Flask/migrations/versions/2b098398babb_.py create mode 100644 Sanjana-Easy/Flask/migrations/versions/3aba37d439b5_.py create mode 100644 Sanjana-Easy/Flask/migrations/versions/__pycache__/06fba380cd41_.cpython-311.pyc create mode 100644 Sanjana-Easy/Flask/migrations/versions/__pycache__/2b098398babb_.cpython-311.pyc create mode 100644 Sanjana-Easy/Flask/migrations/versions/__pycache__/3aba37d439b5_.cpython-311.pyc create mode 100644 Sanjana-Easy/Flask/requirements.txt create mode 100644 Sanjana-Easy/Flask/templates/add_task.html create mode 100644 Sanjana-Easy/Flask/templates/dashboard.html create mode 100644 Sanjana-Easy/Flask/templates/edit_task.html create mode 100644 Sanjana-Easy/Flask/templates/login.html create mode 100644 Sanjana-Easy/Flask/templates/register.html diff --git a/Sanjana-Easy/Flask/Procfile b/Sanjana-Easy/Flask/Procfile new file mode 100644 index 0000000..0f1a73d --- /dev/null +++ b/Sanjana-Easy/Flask/Procfile @@ -0,0 +1 @@ +web:gunicorn app:app \ No newline at end of file diff --git a/Sanjana-Easy/Flask/__pycache__/app.cpython-311.pyc b/Sanjana-Easy/Flask/__pycache__/app.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30ebfce9a74a24122a3f351c72995f465c87b933 GIT binary patch literal 10816 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', methods=['GET', 'POST']) +@login_required +def edit_task(task_id): + task = Task.query.get_or_404(task_id) + + if task.user_id != current_user.id: + flash('You are not authorized to edit this task.', 'danger') + return redirect(url_for('dashboard')) + + if request.method == 'POST': + task.title = request.form['title'] + task.description = request.form['description'] + task.due_date_str = request.form['due_date'] + task.due_date = datetime.strptime(task.due_date_str, '%Y-%m-%d') + + + + + db.session.commit() + + flash('Task updated successfully!', 'success') + return redirect(url_for('dashboard')) + + return render_template('edit_task.html', task=task) + + +@app.route('/delete_task/', methods=['POST']) +@login_required +def delete_task(task_id): + task = Task.query.get_or_404(task_id) + + if task.user_id != current_user.id: + flash('You are not authorized to delete this task.', 'danger') + return redirect(url_for('dashboard')) + + db.session.delete(task) + db.session.commit() + + flash('Task deleted successfully!', 'success') + return redirect(url_for('dashboard')) + + + +from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user + +#Implement Authentication and Authorization + +# Create a user loader function required by flask_login +@login_manager.user_loader +def load_user(user_id): + return User.query.get(int(user_id)) + + + + + +@login_manager.unauthorized_handler +def unauthorized(): + flash('You must be logged in to access that page.', 'danger') + return redirect(url_for('login')) + +@app.route('/logout') +@login_required +def logout(): + logout_user() + flash('Logged out successfully.', 'success') + return redirect(url_for('login')) + + +if __name__ == '__main__': + db.create_all() + app.run(debug=True) \ No newline at end of file diff --git a/Sanjana-Easy/Flask/instance/tasks.db b/Sanjana-Easy/Flask/instance/tasks.db new file mode 100644 index 0000000000000000000000000000000000000000..bea79a00e84b4ecd2ddc67b6c16b915b0f8cbd9f GIT binary patch literal 24576 zcmeI%&rah;7yxjakc6NTFKQ9uHmrbxXrl3dn`+e>a2B*7kPzr{ipHJ^G2|a{pxyQa z>aFcV^wt;XbF}BZ^$mKe_Sl(_-IDAshhC7-H;NN`?0oZmzp)~Xb674$eTM3tUW@dR zEZh4(Q%Zi)l4h>6Ib~7#gYQBE z0T2KI5C8!X009sH0T6iX0ync$>G`=i`Nw3R1Wnc_@wwP0wkp0?^-Oc1@sI*^2rK4i;3pAbSNBt&4$6jS?$E&QW7_W_-rYsJ7QMVs;+NkQktctJD zOID+VuX48eDAnCPUv!3@R+p#1DB9fLFZy0dbY8}+SNq7o2bJADuX2K3_$O#JqHE&% zt^Lwrwc_zSQT@CoGOvjcsIXu0cb}KUwX4IJYpCKE{EA=N@(f;n!;I%ho$1T^l93lk`}GTK7CeBX!=1$8&v_ zOwE_qWhrV?_Fa6@R3lgc_aNUrvK*IpwuHSCAP#!QBOtJ(|c|J zVb>=x*fIR3WNqwfITyGce$98Tp?X}5gjqrr5E@TsZWweR(MYH-iqxPzp{ z=wcg9TJ$`8%6x`CPp9U;ocq`ei8O1fco*yVDe-eNqkJVLv%g8o&)GK$&Hl-Ep@9Gh zfB*=900@8p2!H?xfB*=9z=H{_q|%b|sW&CFSEr$dH6w@ZoTej;HwLdf9<;vI2DLO0{-<ES1`jX zNMwJNlwXu5`~w;YfB*=900@8p2!H?xfB*=900=ycKr4}yX0J~gQ8zfJb!{VV5Y4nU ztif`Bsr-ueSYhwDyVLMIyQnXPVW8G^>{t%50^6;JDpdoDS)hkH##-G80*C5u7@GCE zNj2LsRM&P*5}2BbUCe%%NJ_culbD2!s2xXfheiZr`-6k;oSEC-Y_k1hw$m%T+$k>+ zTV+IbRYNyi!?l@d1{%gRz=5H$zz(d?undEShHGgobX3E|s%>h_!c?`bz`2l<(!$%p zKRD!p-rZ#1dv;yFa1RTG#*#`M6Z0bLb=`4@&1{nfj!tLh0JZI`2Sy4{+9R)8VG;@2!H?xfB*=900@8p2!H?xfWRXW z$jTGT*s2FacW_7zRs8=C>;FeGxljfOfB*=900@8p2!H?xfB*=900;~Pl*Dr8?)v{< D?wRe# literal 0 HcmV?d00001 diff --git a/Sanjana-Easy/Flask/migrations/README b/Sanjana-Easy/Flask/migrations/README new file mode 100644 index 0000000..bc8f3dd --- /dev/null +++ b/Sanjana-Easy/Flask/migrations/README @@ -0,0 +1 @@ +Single-database configuration for Flask. diff --git a/Sanjana-Easy/Flask/migrations/__pycache__/env.cpython-311.pyc b/Sanjana-Easy/Flask/migrations/__pycache__/env.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d436f225789600722cdd20c7c48cd3153a46bf7 GIT binary patch literal 5115 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 + return current_app.extensions['migrate'].db.engine + + +def get_engine_url(): + try: + return get_engine().url.render_as_string(hide_password=False).replace( + '%', '%%') + except AttributeError: + return str(get_engine().url).replace('%', '%%') + + +# add your model's MetaData object here +# for 'autogenerate' support +# from myapp import mymodel +# target_metadata = mymodel.Base.metadata +config.set_main_option('sqlalchemy.url', get_engine_url()) +target_db = current_app.extensions['migrate'].db + +# other values from the config, defined by the needs of env.py, +# can be acquired: +# my_important_option = config.get_main_option("my_important_option") +# ... etc. + + +def get_metadata(): + if hasattr(target_db, 'metadatas'): + return target_db.metadatas[None] + return target_db.metadata + + +def run_migrations_offline(): + """Run migrations in 'offline' mode. + + This configures the context with just a URL + and not an Engine, though an Engine is acceptable + here as well. By skipping the Engine creation + we don't even need a DBAPI to be available. + + Calls to context.execute() here emit the given string to the + script output. + + """ + url = config.get_main_option("sqlalchemy.url") + context.configure( + url=url, target_metadata=get_metadata(), literal_binds=True + ) + + with context.begin_transaction(): + context.run_migrations() + + +def run_migrations_online(): + """Run migrations in 'online' mode. + + In this scenario we need to create an Engine + and associate a connection with the context. + + """ + + # this callback is used to prevent an auto-migration from being generated + # when there are no changes to the schema + # reference: http://alembic.zzzcomputing.com/en/latest/cookbook.html + def process_revision_directives(context, revision, directives): + if getattr(config.cmd_opts, 'autogenerate', False): + script = directives[0] + if script.upgrade_ops.is_empty(): + directives[:] = [] + logger.info('No changes in schema detected.') + + conf_args = current_app.extensions['migrate'].configure_args + if conf_args.get("process_revision_directives") is None: + conf_args["process_revision_directives"] = process_revision_directives + + connectable = get_engine() + + with connectable.connect() as connection: + context.configure( + connection=connection, + target_metadata=get_metadata(), + **conf_args + ) + + with context.begin_transaction(): + context.run_migrations() + + +if context.is_offline_mode(): + run_migrations_offline() +else: + run_migrations_online() diff --git a/Sanjana-Easy/Flask/migrations/script.py.mako b/Sanjana-Easy/Flask/migrations/script.py.mako new file mode 100644 index 0000000..c95e0ea --- /dev/null +++ b/Sanjana-Easy/Flask/migrations/script.py.mako @@ -0,0 +1,24 @@ +"""${message} + +Revision ID: ${up_revision} +Revises: ${down_revision | comma,n} +Create Date: ${create_date} + +""" +from alembic import op +import sqlalchemy as sa +${imports if imports else ""} + +# revision identifiers, used by Alembic. +revision = ${repr(up_revision)} +down_revision = ${repr(down_revision)} +branch_labels = ${repr(branch_labels)} +depends_on = ${repr(depends_on)} + + +def upgrade(): + ${upgrades if upgrades else "pass"} + + +def downgrade(): + ${downgrades if downgrades else "pass"} diff --git a/Sanjana-Easy/Flask/migrations/versions/06fba380cd41_.py b/Sanjana-Easy/Flask/migrations/versions/06fba380cd41_.py new file mode 100644 index 0000000..4948cca --- /dev/null +++ b/Sanjana-Easy/Flask/migrations/versions/06fba380cd41_.py @@ -0,0 +1,50 @@ +"""empty message + +Revision ID: 06fba380cd41 +Revises: 3aba37d439b5 +Create Date: 2023-10-12 02:25:59.469198 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '06fba380cd41' +down_revision = '3aba37d439b5' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('user', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('username', sa.String(length=50), nullable=False), + sa.Column('password', sa.String(length=100), nullable=False), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('username') + ) + op.drop_table('User') + with op.batch_alter_table('task', schema=None) as batch_op: + batch_op.add_column(sa.Column('user_id', sa.Integer(), nullable=False)) + batch_op.create_foreign_key('fk_task_user', 'user', ['user_id'], ['id']) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('task', schema=None) as batch_op: + batch_op.drop_constraint('fk_task_user', type_='foreignkey') + batch_op.drop_column('user_id') + + op.create_table('User', + sa.Column('id', sa.INTEGER(), nullable=False), + sa.Column('username', sa.VARCHAR(length=50), nullable=False), + sa.Column('password', sa.VARCHAR(length=100), nullable=False), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('username') + ) + op.drop_table('user') + # ### end Alembic commands ### diff --git a/Sanjana-Easy/Flask/migrations/versions/2b098398babb_.py b/Sanjana-Easy/Flask/migrations/versions/2b098398babb_.py new file mode 100644 index 0000000..e0147ad --- /dev/null +++ b/Sanjana-Easy/Flask/migrations/versions/2b098398babb_.py @@ -0,0 +1,50 @@ +"""empty message + +Revision ID: 2b098398babb +Revises: +Create Date: 2023-10-12 02:14:55.617587 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '2b098398babb' +down_revision = None +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('user', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('username', sa.String(length=50), nullable=False), + sa.Column('password', sa.String(length=100), nullable=False), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('username') + ) + op.drop_table('User') + with op.batch_alter_table('task', schema=None) as batch_op: + batch_op.add_column(sa.Column('user_id', sa.Integer(), nullable=False)) + batch_op.create_foreign_key(None, 'user', ['user_id'], ['id']) + + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + with op.batch_alter_table('task', schema=None) as batch_op: + batch_op.drop_constraint(None, type_='foreignkey') + batch_op.drop_column('user_id') + + op.create_table('User', + sa.Column('id', sa.INTEGER(), nullable=False), + sa.Column('username', sa.VARCHAR(length=50), nullable=False), + sa.Column('password', sa.VARCHAR(length=100), nullable=False), + sa.PrimaryKeyConstraint('id'), + sa.UniqueConstraint('username') + ) + op.drop_table('user') + # ### end Alembic commands ### diff --git a/Sanjana-Easy/Flask/migrations/versions/3aba37d439b5_.py b/Sanjana-Easy/Flask/migrations/versions/3aba37d439b5_.py new file mode 100644 index 0000000..f5b524d --- /dev/null +++ b/Sanjana-Easy/Flask/migrations/versions/3aba37d439b5_.py @@ -0,0 +1,24 @@ +"""empty message + +Revision ID: 3aba37d439b5 +Revises: 2b098398babb +Create Date: 2023-10-12 02:22:35.853412 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '3aba37d439b5' +down_revision = '2b098398babb' +branch_labels = None +depends_on = None + + +def upgrade(): + pass + + +def downgrade(): + pass diff --git a/Sanjana-Easy/Flask/migrations/versions/__pycache__/06fba380cd41_.cpython-311.pyc b/Sanjana-Easy/Flask/migrations/versions/__pycache__/06fba380cd41_.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66ff04c7a727377b1394e767e8fa753de8d581c7 GIT binary patch literal 3153 zcmbtWUrZB87@uvY?R48h@f41NTopaU1Z<0_kjr7AaH3w}KusVd&C*#)rQO!uMUIP? z@ZiHedWjc#@DiRl3_N&=m+)#XCO)=glOvm$d$`<#Z#8OSe7bMivh5-g%uRQH`|bB{ zzM0wiO@H%vcm(ZlSDV;mN9Z5+vePVO;dL(v4-iF@h;r1D;?kB$3&&(@$~uWDp0rWh zq@7wP9dHwBzl$cF)B(s->o{sBKg^2hth(q=i;5y7M4lfLZzq*xM)D6wdi{ZOGt)xX zg+QF14VEmT((CUMKzW{??dqBC<_Ba^P(^jQZB=^aUu@K3 z(&HWdDhTU4FNj(<@G8Wt8*!#6LrZNYz0o7JZ#Y(=mi0(@g!i+B)C<`zHamYyQlawkAP{%Q7Z}}1us~>w@#o1 zjzbfOgCDcB*G6?buZXg4Nz$Q5oKB?qR7#jmi8^6wNl1$?Lr?~o>?u)7sIxlB3W~Cj zk?Bhc1|45#;aC-vIp(CqVQUJygGI-ZRCmwJ#h5L|6zy)AO_lDB7q=f6SWgy3(Cq`6 z)O=df9mA3;CLp1GT$PhjLO(nzC)0wwctuL`&`%Fd_lL;v{CoZy)mx3}`h3yFc`{+RL6dRf{HJj~> z431y9HZs~V(0_So^v3n6h^Wk|ne5b13Whe7P9|hQ1@=*0Bnw_t zluttX&)`<(p`#`AFSg$uxi|Cz9>YJ;U;6J~{`u!5?Z)=dvarfJMU*>V6h8uIZ@rBc+Igc*StX<1FLwRRNbA}4Y zV*8GJJiAT2f03pw()4Tp!{L?WABUd!es6x#{M?pnj^>-A8Xy_b$ViTi6kS`lNb5@U z@zCbP=9T9sp4aEes76L}WVB#o2}@~9_^Q~&n<7^0_m|(jd$+$s$*QpF|Fb1rKge01 zad^-3Yd(^( z_7gK!IG>m+G37T{pSsLm`<^?-Tu`q$s?4`_QTY(er_8=UxgJ30%QOTm)XwQPbulZ( zn$AC@TkjzS!S#H_Qz{8-HftLYWsxr08Ux2LF7RfMP;Y(Lp!8lfKU@@OFXk^Zg z;pnx&ZwAM7$BppVz@_k*+{|o88MH7s4p1UR`2>i%lV%pA5|?$rJJTtBB`({WD^8WE z!oNlQD=m-j03zx#y`$0$8 zYklg);lqxn4IE&*OLxR#G!u`-bcc`<)6>a#=@8|WTPY#Mj@!lJYU)HT{|VMTY=vT# z*J)Xh;6Q|fT}&xDPsOY#Q6-j>{GNQ3&d~Xk__cfL+n?OP(--j*fLw)ZfAr*4Ta*xelC`YJr`;d}-3 KA;{;T)BgaxVU~;l literal 0 HcmV?d00001 diff --git a/Sanjana-Easy/Flask/migrations/versions/__pycache__/2b098398babb_.cpython-311.pyc b/Sanjana-Easy/Flask/migrations/versions/__pycache__/2b098398babb_.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f7f938a9207ee3032e3ae7f704a27ea938f19244 GIT binary patch literal 3108 zcmbtWPi)gx7=KP)k{72bg%v8&G6lL(3TkNr9S}_`>7PJ>wWtLosz{NOXVR3!3ARhu zX_I>3up^V0=mDgjx}x^LBqsGZG$HM1SC)n>ahi7E76eF$)4t~aip1LPdx9|I;SSYFU;ex0rLRRGY3GsGL$rYvW=x{6?P4}HSed5gN zw2)3$G@=p<^Fy*IsA6~+0BriACwd}%J&|a*FB*%SjP>{Teib>@fBF>9zhu+w=1f}$(NzCT6;m%y@r>; zXVvy|c-d0wameivsdvq{40Bnn&u6C*$rcg)pBT|wTMTtMXX1$Ov#mT%t7Y(CwPSG3 zT_&~{@ATSa=eO+w6s^9F4MrGg7 z2aU2!2xcKOvfMI6U$sYo9I<}R6)@=}>O>Kw;5pZK?(1ldY9N-I^5}Bs`UirE0+4X+h0Qr-Zx;qgKY?1xizy${2g9qu(gX zVlFGCZi@44tre$YNntq~z>@W|xFE8~}Yh6XPrE?>Kv92S+EYO$0| zeWNNMyPjvuZ9P7JYe8~MuQVt=(rv_ zZiJ4nf2rZKIzDUQvtVH0_QhcxA2jem>#c2(*KwzTJ6{F79`73jP-gJ98F_qnzP)=` z$NLSuU&H%f_ydOjz~YUSE1Ey5`=f?GT1GCIq?c5-pOT#ONAD?-A><_$tTPF#FBs7vJdsx6q*b2U~ zhInIPqkQ}RyLa!lH>hY8w*7y89^W^@xu0=(#N&HLIKT{u?Pjy~`E6Mnc*5n(vMNv5 zykSR#4rC?cRR^zdj8$yTa9D5RxUI5U3Vb}L9hJuB2I^HC*ks1$OzLyUZKhp@DK%6Y zvgY4ZX+9o}cSNf*Z~%DKS!s3}F}Ov<=1+`RXZcMv&k^6|dAg})Y+GsUy`a0CtE@6? z%b2_y_EX*iVDeQ40s`vhOpiKW5>s+3Q@1c+CytGK(!YF=%G6ivc^mDyzx| zpl|N7cra6^%0N}X=vCg!eD*PDW5&MGu`46zMkY+(wfMx)`S^q!V!Cz)9Sp(%6+V;? zLD%%t;+#~Wv19Q51yc`HXzb%Oaiq!;;SCaAYF$ZcB&?H|L1G$-S)9!iyd zT^i|POmKu{X$2S!9APZbAggQZy=vlbwt7n#o9&QYkFE@EL7qU&jDC-<3~8Z0J=AA} z`qqJ;<2sHTIR3xb6$lnCg?$tEd*Utbr!6?%>U-M80d@yWUn)h5nN-U333;)Q&Sfg~ zlUHu#g*>aR^VVsaM6Uj?HG}MgQuWugEJ#obp^A%n#pJ125+$mnijq}_WOj;=&}%?s zo$!0|b)iUS^WryhKgd`qR7wD4H^*^hmzTp(CIFfd*QTL;jn{JolIm3^s428Sp0~6v d1S=5Sy}*~fO&p{720RqxLS^(J$R}aY{{WG2hPwa& literal 0 HcmV?d00001 diff --git a/Sanjana-Easy/Flask/migrations/versions/__pycache__/3aba37d439b5_.cpython-311.pyc b/Sanjana-Easy/Flask/migrations/versions/__pycache__/3aba37d439b5_.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..09c01f5d275dd1d5c33958424b8e60050625c40f GIT binary patch literal 753 zcmah`!EVz)5Z$%Y*m07osEA4&kZ&l5M2X#~iG?^2QwfklMJNZ$lC{pRny7YccGIG8 z%7K626Hxz#W3*RJ+${Ch6SGNZBQC6Vp5M;w%+B-tsMjq7>#+KqMHr!9>hO1ITXO3G z`Hmn z%(6bP>#3M#Gy9G2*)EBRdqR)he%#$enDA^TZufg`zZa7@wg#M$IkSBLh_oHI*=aXB zj@@=V$MM{5tJigpJC0@jRxLNM)UtdiYrBBXom@H;9|c z35M>511~%mjEiuRxBSGXn=IfxVCH6*Ob zZX;1EUr6IBhg+2KDpWsI&lmtpv?`fPpI3nYuS2d9)*Ws@<#07iS)tjN*{1qFoR3tX zra)b3RHYF`G#f{eG)ThIcsk}vytKsUgd}4a)k125NRw}eB + + + + + + Add Task ➕🏢 + + + + +

Add Task

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + + + + + + + + + + + + + + + + + + + + + + + + + +
#FieldValue
1
2
3
+ +
+ + + + + + + + + + \ No newline at end of file diff --git a/Sanjana-Easy/Flask/templates/dashboard.html b/Sanjana-Easy/Flask/templates/dashboard.html new file mode 100644 index 0000000..4a85549 --- /dev/null +++ b/Sanjana-Easy/Flask/templates/dashboard.html @@ -0,0 +1,81 @@ + + + + + + + Dashboard + + + + + +

Task Dashboard 📟

+ + + {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} + + + + + + + + + + + + + + {% for task in tasks %} + + + + + + + + {% endfor %} + +
#TitleDescriptionDue DateActions
{{ task.id }}{{ task.title }}{{ task.description }}{{ task.due_date.strftime('%Y-%m-%d') }} + Edit +
+ +
+
+ + +

Add a Task

+ + +

Logout

+ + + + \ No newline at end of file diff --git a/Sanjana-Easy/Flask/templates/edit_task.html b/Sanjana-Easy/Flask/templates/edit_task.html new file mode 100644 index 0000000..4a09c4b --- /dev/null +++ b/Sanjana-Easy/Flask/templates/edit_task.html @@ -0,0 +1,64 @@ + + + + + + + Edit Task ✖🖊 + + + + + +

Edit Task

+ + + {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} + + +
+ + +
+ + +
+ + +
+ +
+ + +

Back to Dashboard

+ + + + \ No newline at end of file diff --git a/Sanjana-Easy/Flask/templates/login.html b/Sanjana-Easy/Flask/templates/login.html new file mode 100644 index 0000000..eb13262 --- /dev/null +++ b/Sanjana-Easy/Flask/templates/login.html @@ -0,0 +1,51 @@ + + + + + + + Login + + + + +

Login

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + +
+ + +
+ +
+ + + \ No newline at end of file diff --git a/Sanjana-Easy/Flask/templates/register.html b/Sanjana-Easy/Flask/templates/register.html new file mode 100644 index 0000000..08354b6 --- /dev/null +++ b/Sanjana-Easy/Flask/templates/register.html @@ -0,0 +1,60 @@ + + + + + + + Task Manager + + + + + +

Register

+ {% with messages = get_flashed_messages() %} + {% if messages %} +
    + {% for message in messages %} +
  • {{ message }}
  • + {% endfor %} +
+ {% endif %} + {% endwith %} +
+ + +
+ + +
+ + + +
+ + + + + + \ No newline at end of file From d0f9cbccdf96db639993f1b7ff9053f371fb6f1c Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Tue, 23 Jul 2024 18:08:30 +0530 Subject: [PATCH 7/9] Updated --- Sanjana-Easy/{ => Task 1}/Task1.py | 0 Sanjana-Easy/{ => Task 2}/Task2.py | 0 Sanjana-Easy/{Flask => Task 3}/Procfile | 0 Sanjana-Easy/{Flask/app.py => Task 3/Task3.py} | 0 .../__pycache__/app.cpython-311.pyc | Bin Sanjana-Easy/{Flask => Task 3}/instance/tasks.db | Bin Sanjana-Easy/{Flask => Task 3}/migrations/README | 0 .../migrations/__pycache__/env.cpython-311.pyc | Bin .../{Flask => Task 3}/migrations/alembic.ini | 0 Sanjana-Easy/{Flask => Task 3}/migrations/env.py | 0 .../{Flask => Task 3}/migrations/script.py.mako | 0 .../migrations/versions/06fba380cd41_.py | 0 .../migrations/versions/2b098398babb_.py | 0 .../migrations/versions/3aba37d439b5_.py | 0 .../__pycache__/06fba380cd41_.cpython-311.pyc | Bin .../__pycache__/2b098398babb_.cpython-311.pyc | Bin .../__pycache__/3aba37d439b5_.cpython-311.pyc | Bin Sanjana-Easy/{Flask => Task 3}/requirements.txt | 0 .../{Flask => Task 3}/templates/add_task.html | 0 .../{Flask => Task 3}/templates/dashboard.html | 0 .../{Flask => Task 3}/templates/edit_task.html | 0 Sanjana-Easy/{Flask => Task 3}/templates/login.html | 0 .../{Flask => Task 3}/templates/register.html | 0 Sanjana-Easy/{ => Task 4}/Task4.py | 0 24 files changed, 0 insertions(+), 0 deletions(-) rename Sanjana-Easy/{ => Task 1}/Task1.py (100%) rename Sanjana-Easy/{ => Task 2}/Task2.py (100%) rename Sanjana-Easy/{Flask => Task 3}/Procfile (100%) rename Sanjana-Easy/{Flask/app.py => Task 3/Task3.py} (100%) rename Sanjana-Easy/{Flask => Task 3}/__pycache__/app.cpython-311.pyc (100%) rename Sanjana-Easy/{Flask => Task 3}/instance/tasks.db (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/README (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/__pycache__/env.cpython-311.pyc (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/alembic.ini (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/env.py (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/script.py.mako (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/versions/06fba380cd41_.py (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/versions/2b098398babb_.py (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/versions/3aba37d439b5_.py (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/versions/__pycache__/06fba380cd41_.cpython-311.pyc (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/versions/__pycache__/2b098398babb_.cpython-311.pyc (100%) rename Sanjana-Easy/{Flask => Task 3}/migrations/versions/__pycache__/3aba37d439b5_.cpython-311.pyc (100%) rename Sanjana-Easy/{Flask => Task 3}/requirements.txt (100%) rename Sanjana-Easy/{Flask => Task 3}/templates/add_task.html (100%) rename Sanjana-Easy/{Flask => Task 3}/templates/dashboard.html (100%) rename Sanjana-Easy/{Flask => Task 3}/templates/edit_task.html (100%) rename Sanjana-Easy/{Flask => Task 3}/templates/login.html (100%) rename Sanjana-Easy/{Flask => Task 3}/templates/register.html (100%) rename Sanjana-Easy/{ => Task 4}/Task4.py (100%) diff --git a/Sanjana-Easy/Task1.py b/Sanjana-Easy/Task 1/Task1.py similarity index 100% rename from Sanjana-Easy/Task1.py rename to Sanjana-Easy/Task 1/Task1.py diff --git a/Sanjana-Easy/Task2.py b/Sanjana-Easy/Task 2/Task2.py similarity index 100% rename from Sanjana-Easy/Task2.py rename to Sanjana-Easy/Task 2/Task2.py diff --git a/Sanjana-Easy/Flask/Procfile b/Sanjana-Easy/Task 3/Procfile similarity index 100% rename from Sanjana-Easy/Flask/Procfile rename to Sanjana-Easy/Task 3/Procfile diff --git a/Sanjana-Easy/Flask/app.py b/Sanjana-Easy/Task 3/Task3.py similarity index 100% rename from Sanjana-Easy/Flask/app.py rename to Sanjana-Easy/Task 3/Task3.py diff --git a/Sanjana-Easy/Flask/__pycache__/app.cpython-311.pyc b/Sanjana-Easy/Task 3/__pycache__/app.cpython-311.pyc similarity index 100% rename from Sanjana-Easy/Flask/__pycache__/app.cpython-311.pyc rename to Sanjana-Easy/Task 3/__pycache__/app.cpython-311.pyc diff --git a/Sanjana-Easy/Flask/instance/tasks.db b/Sanjana-Easy/Task 3/instance/tasks.db similarity index 100% rename from Sanjana-Easy/Flask/instance/tasks.db rename to Sanjana-Easy/Task 3/instance/tasks.db diff --git a/Sanjana-Easy/Flask/migrations/README b/Sanjana-Easy/Task 3/migrations/README similarity index 100% rename from Sanjana-Easy/Flask/migrations/README rename to Sanjana-Easy/Task 3/migrations/README diff --git a/Sanjana-Easy/Flask/migrations/__pycache__/env.cpython-311.pyc b/Sanjana-Easy/Task 3/migrations/__pycache__/env.cpython-311.pyc similarity index 100% rename from Sanjana-Easy/Flask/migrations/__pycache__/env.cpython-311.pyc rename to Sanjana-Easy/Task 3/migrations/__pycache__/env.cpython-311.pyc diff --git a/Sanjana-Easy/Flask/migrations/alembic.ini b/Sanjana-Easy/Task 3/migrations/alembic.ini similarity index 100% rename from Sanjana-Easy/Flask/migrations/alembic.ini rename to Sanjana-Easy/Task 3/migrations/alembic.ini diff --git a/Sanjana-Easy/Flask/migrations/env.py b/Sanjana-Easy/Task 3/migrations/env.py similarity index 100% rename from Sanjana-Easy/Flask/migrations/env.py rename to Sanjana-Easy/Task 3/migrations/env.py diff --git a/Sanjana-Easy/Flask/migrations/script.py.mako b/Sanjana-Easy/Task 3/migrations/script.py.mako similarity index 100% rename from Sanjana-Easy/Flask/migrations/script.py.mako rename to Sanjana-Easy/Task 3/migrations/script.py.mako diff --git a/Sanjana-Easy/Flask/migrations/versions/06fba380cd41_.py b/Sanjana-Easy/Task 3/migrations/versions/06fba380cd41_.py similarity index 100% rename from Sanjana-Easy/Flask/migrations/versions/06fba380cd41_.py rename to Sanjana-Easy/Task 3/migrations/versions/06fba380cd41_.py diff --git a/Sanjana-Easy/Flask/migrations/versions/2b098398babb_.py b/Sanjana-Easy/Task 3/migrations/versions/2b098398babb_.py similarity index 100% rename from Sanjana-Easy/Flask/migrations/versions/2b098398babb_.py rename to Sanjana-Easy/Task 3/migrations/versions/2b098398babb_.py diff --git a/Sanjana-Easy/Flask/migrations/versions/3aba37d439b5_.py b/Sanjana-Easy/Task 3/migrations/versions/3aba37d439b5_.py similarity index 100% rename from Sanjana-Easy/Flask/migrations/versions/3aba37d439b5_.py rename to Sanjana-Easy/Task 3/migrations/versions/3aba37d439b5_.py diff --git a/Sanjana-Easy/Flask/migrations/versions/__pycache__/06fba380cd41_.cpython-311.pyc b/Sanjana-Easy/Task 3/migrations/versions/__pycache__/06fba380cd41_.cpython-311.pyc similarity index 100% rename from Sanjana-Easy/Flask/migrations/versions/__pycache__/06fba380cd41_.cpython-311.pyc rename to Sanjana-Easy/Task 3/migrations/versions/__pycache__/06fba380cd41_.cpython-311.pyc diff --git a/Sanjana-Easy/Flask/migrations/versions/__pycache__/2b098398babb_.cpython-311.pyc b/Sanjana-Easy/Task 3/migrations/versions/__pycache__/2b098398babb_.cpython-311.pyc similarity index 100% rename from Sanjana-Easy/Flask/migrations/versions/__pycache__/2b098398babb_.cpython-311.pyc rename to Sanjana-Easy/Task 3/migrations/versions/__pycache__/2b098398babb_.cpython-311.pyc diff --git a/Sanjana-Easy/Flask/migrations/versions/__pycache__/3aba37d439b5_.cpython-311.pyc b/Sanjana-Easy/Task 3/migrations/versions/__pycache__/3aba37d439b5_.cpython-311.pyc similarity index 100% rename from Sanjana-Easy/Flask/migrations/versions/__pycache__/3aba37d439b5_.cpython-311.pyc rename to Sanjana-Easy/Task 3/migrations/versions/__pycache__/3aba37d439b5_.cpython-311.pyc diff --git a/Sanjana-Easy/Flask/requirements.txt b/Sanjana-Easy/Task 3/requirements.txt similarity index 100% rename from Sanjana-Easy/Flask/requirements.txt rename to Sanjana-Easy/Task 3/requirements.txt diff --git a/Sanjana-Easy/Flask/templates/add_task.html b/Sanjana-Easy/Task 3/templates/add_task.html similarity index 100% rename from Sanjana-Easy/Flask/templates/add_task.html rename to Sanjana-Easy/Task 3/templates/add_task.html diff --git a/Sanjana-Easy/Flask/templates/dashboard.html b/Sanjana-Easy/Task 3/templates/dashboard.html similarity index 100% rename from Sanjana-Easy/Flask/templates/dashboard.html rename to Sanjana-Easy/Task 3/templates/dashboard.html diff --git a/Sanjana-Easy/Flask/templates/edit_task.html b/Sanjana-Easy/Task 3/templates/edit_task.html similarity index 100% rename from Sanjana-Easy/Flask/templates/edit_task.html rename to Sanjana-Easy/Task 3/templates/edit_task.html diff --git a/Sanjana-Easy/Flask/templates/login.html b/Sanjana-Easy/Task 3/templates/login.html similarity index 100% rename from Sanjana-Easy/Flask/templates/login.html rename to Sanjana-Easy/Task 3/templates/login.html diff --git a/Sanjana-Easy/Flask/templates/register.html b/Sanjana-Easy/Task 3/templates/register.html similarity index 100% rename from Sanjana-Easy/Flask/templates/register.html rename to Sanjana-Easy/Task 3/templates/register.html diff --git a/Sanjana-Easy/Task4.py b/Sanjana-Easy/Task 4/Task4.py similarity index 100% rename from Sanjana-Easy/Task4.py rename to Sanjana-Easy/Task 4/Task4.py From 68a32fa573ad5e744944b96f6b2859b8df4c903b Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Tue, 23 Jul 2024 12:42:02 +0000 Subject: [PATCH 8/9] Added Requirements.txt --- Sanjana-Easy/Task 1/requirements.txt | 2 ++ Sanjana-Easy/Task 2/requirements.txt | 1 + Sanjana-Easy/Task 4/requirements.txt | 1 + 3 files changed, 4 insertions(+) create mode 100644 Sanjana-Easy/Task 1/requirements.txt create mode 100644 Sanjana-Easy/Task 2/requirements.txt create mode 100644 Sanjana-Easy/Task 4/requirements.txt diff --git a/Sanjana-Easy/Task 1/requirements.txt b/Sanjana-Easy/Task 1/requirements.txt new file mode 100644 index 0000000..1466a58 --- /dev/null +++ b/Sanjana-Easy/Task 1/requirements.txt @@ -0,0 +1,2 @@ +beautifulsoup4==4.12.3 +Requests==2.32.3 diff --git a/Sanjana-Easy/Task 2/requirements.txt b/Sanjana-Easy/Task 2/requirements.txt new file mode 100644 index 0000000..34e7188 --- /dev/null +++ b/Sanjana-Easy/Task 2/requirements.txt @@ -0,0 +1 @@ +nltk==3.8.1 diff --git a/Sanjana-Easy/Task 4/requirements.txt b/Sanjana-Easy/Task 4/requirements.txt new file mode 100644 index 0000000..a9fe454 --- /dev/null +++ b/Sanjana-Easy/Task 4/requirements.txt @@ -0,0 +1 @@ +pyaudio==0.2.14 From 1cf2d67a2c175aa37f174e3857e783d9c64e6cdb Mon Sep 17 00:00:00 2001 From: MatetiSanjana Date: Tue, 23 Jul 2024 18:27:18 +0530 Subject: [PATCH 9/9] Add files via upload --- Sanjana-Easy/Task 1/requirements.txt | 4 +- Sanjana-Easy/Task 2/requirements.txt | 2 +- Sanjana-Easy/Task 4/Task4.py | 91 +++++++++++++++++++--------- Sanjana-Easy/Task 4/requirements.txt | 3 +- 4 files changed, 66 insertions(+), 34 deletions(-) diff --git a/Sanjana-Easy/Task 1/requirements.txt b/Sanjana-Easy/Task 1/requirements.txt index 1466a58..936ba4d 100644 --- a/Sanjana-Easy/Task 1/requirements.txt +++ b/Sanjana-Easy/Task 1/requirements.txt @@ -1,2 +1,2 @@ -beautifulsoup4==4.12.3 -Requests==2.32.3 +beautifulsoup4==4.12.3 +Requests==2.32.3 diff --git a/Sanjana-Easy/Task 2/requirements.txt b/Sanjana-Easy/Task 2/requirements.txt index 34e7188..c36259a 100644 --- a/Sanjana-Easy/Task 2/requirements.txt +++ b/Sanjana-Easy/Task 2/requirements.txt @@ -1 +1 @@ -nltk==3.8.1 +nltk==3.8.1 diff --git a/Sanjana-Easy/Task 4/Task4.py b/Sanjana-Easy/Task 4/Task4.py index cabd0d2..51f06f1 100644 --- a/Sanjana-Easy/Task 4/Task4.py +++ b/Sanjana-Easy/Task 4/Task4.py @@ -1,30 +1,61 @@ -import pyaudio -import wave - -FRAMES__PER_BUFFER=3200 -FORMAT=pyaudio.paInt16 -CHANNELS=1 -RATE=16000 - -p=pyaudio.PyAudio() - -stream=p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=TRUE,frames_per_buffer=FRAMES__PER_BUFFER) - -print("start recoring") - -seconds=5 -frames=[] -for i in range(0,int(RATE/FRAMES__PER_BUFFER*seconds)): - data=stream.read(FRAMES__PER_BUFFER) - frames.append(data) - -stream.stop_stream() -stream.close() -p.terminate() - -obj=wave.open("recording.wave","wb") -obj.setnchannels(CHANNELS) -obj.setsampwidth(p.get_sample_size(FORMAT)) -obj.setframerate(RATE) -obj.writeframes(b"".join(frames)) -obj.close() \ No newline at end of file +import pyaudio +import wave +from pydub import AudioSegment + +FRAMES_PER_BUFFER = 3200 +FORMAT = pyaudio.paInt16 +CHANNELS = 1 +RATE = 16000 + +def record_audio(seconds, filename): + p = pyaudio.PyAudio() + stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=FRAMES_PER_BUFFER) + print("Start recording") + frames = [stream.read(FRAMES_PER_BUFFER) for _ in range(int(RATE / FRAMES_PER_BUFFER * seconds))] + print("Recording finished") + stream.stop_stream() + stream.close() + p.terminate() + with wave.open(filename, 'wb') as wf: + wf.setnchannels(CHANNELS) + wf.setsampwidth(p.get_sample_size(FORMAT)) + wf.setframerate(RATE) + wf.writeframes(b''.join(frames)) + +def playback_audio(filename): + with wave.open(filename, 'rb') as wf: + p = pyaudio.PyAudio() + stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) + data = wf.readframes(FRAMES_PER_BUFFER) + while data: + stream.write(data) + data = wf.readframes(FRAMES_PER_BUFFER) + stream.stop_stream() + stream.close() + p.terminate() + +def convert_format(input_filename, output_filename): + audio = AudioSegment.from_wav(input_filename) + audio.export(output_filename, format=output_filename.split('.')[-1]) + print(f"Recording saved as {output_filename}") + +def main(): + actions = { + '1': ('Record Audio', lambda: record_audio(int(input("Enter duration of recording in seconds: ")), input("Enter filename to save (with .wav extension): "))), + '2': ('Playback Audio', lambda: playback_audio(input("Enter filename to playback (with .wav extension): "))), + '3': ('Save Audio in Different Format', lambda: convert_format(input("Enter the recorded filename (with .wav extension): "), input("Enter the new filename with desired extension (e.g., recording.mp3): "))), + '4': ('Exit', lambda: exit()) + } + while True: + print("\nVoice Recording Application") + for key, (desc, _) in actions.items(): + print(f"{key}. {desc}") + choice = input("Select an option: ") + action = actions.get(choice) + if action: + action[1]() + else: + print("Invalid choice. Please select again.") + +if __name__ == "__main__": + main() diff --git a/Sanjana-Easy/Task 4/requirements.txt b/Sanjana-Easy/Task 4/requirements.txt index a9fe454..9785bbf 100644 --- a/Sanjana-Easy/Task 4/requirements.txt +++ b/Sanjana-Easy/Task 4/requirements.txt @@ -1 +1,2 @@ -pyaudio==0.2.14 +PyAudio==0.2.14 +pydub==0.25.1