From 574ce1f9821208baa71c85908ed0a86ff8cd9d8d Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Wed, 15 Sep 2021 19:16:45 +0200 Subject: [PATCH 01/20] implement ldap auth --- .flake8 | 1 + ki/auth.py | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/.flake8 b/.flake8 index 73a3a8e..daef5bf 100644 --- a/.flake8 +++ b/.flake8 @@ -3,6 +3,7 @@ # SPDX-License-Identifier: AGPL-3.0-or-later [flake8] +ignore = E722 max-line-length = 120 extend-exclude = migrations diff --git a/ki/auth.py b/ki/auth.py index 5dc7ae6..8b083bd 100644 --- a/ki/auth.py +++ b/ki/auth.py @@ -5,7 +5,8 @@ import uuid import yaml -from ldap3 import Server, Connection, ALL +from ldap3 import Server, Connection +from ldap3.utils.conv import escape_filter_chars from app import app, db from ki.models import User, Token @@ -46,18 +47,30 @@ def file_auth(username, password): def ldap_auth(username, password): app.logger.debug("performing LDAP authentication") - server = Server(app.config['KI_LDAP_URL'], get_info=ALL) - root_dn = app.config['KI_LDAP_ROOT_DN'] - ldap_user = f"cn={username},{root_dn}" + escaped_username = escape_filter_chars(username) + server = Server(app.config['KI_LDAP_URL']) - app.logger.debug(f"server: {server}") - connection = Connection(server, user=ldap_user, password=password) + try: + connection = Connection(server, + app.config['KI_LDAP_AUTH_USER'], + app.config['KI_LDAP_AUTH_PASSWORD'], + auto_bind=True) + except: + app.logger.error('ldap connection failed') + return None - if connection.bind(): + if not connection.search(app.config['KI_LDAP_BASE_DN'], f"(&(objectClass=inetOrgPerson)(uid={escaped_username}))"): + app.logger.info(f"ldap search of {username} failed") + return None + + user_dn = connection.entries[0].entry_dn + + if connection.rebind(user=user_dn, password=password): connection.unbind() return create_user_token(username) connection.unbind() + app.logger.info(f"ldap login of {username} failed") return None From 7eee46d06b2c93e81bf56817b3f5d4c04955c216 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Wed, 15 Sep 2021 19:44:11 +0200 Subject: [PATCH 02/20] pass ldap environment variables --- app.py | 4 +++- ki/auth.py | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app.py b/app.py index 6f0ef7a..818502f 100644 --- a/app.py +++ b/app.py @@ -32,7 +32,9 @@ app.config["CORS_ORIGINS"] = os.getenv("CORS_ORIGINS", "*") app.config["KI_AUTH"] = os.getenv("KI_AUTH") app.config["KI_LDAP_URL"] = os.getenv("KI_LDAP_URL") -app.config["KI_LDAP_ROOT_DN"] = os.getenv("KI_LDAP_ROOT_DN") +app.config["KI_LDAP_AUTH_USER"] = os.getenv("KI_LDAP_AUTH_USER") +app.config["KI_LDAP_AUTH_PASSWORD"] = os.getenv("KI_LDAP_AUTH_PASSWORD") +app.config["KI_LDAP_BASE_DN"] = os.getenv("KI_LDAP_BASE_DN") CORS(app) db = SQLAlchemy(app) diff --git a/ki/auth.py b/ki/auth.py index 8b083bd..a542bee 100644 --- a/ki/auth.py +++ b/ki/auth.py @@ -60,7 +60,11 @@ def ldap_auth(username, password): return None if not connection.search(app.config['KI_LDAP_BASE_DN'], f"(&(objectClass=inetOrgPerson)(uid={escaped_username}))"): - app.logger.info(f"ldap search of {username} failed") + app.logger.info("ldap search failed") + return None + + if not connection.entries: + app.logger.info(f"no ldap search result for {username}") return None user_dn = connection.entries[0].entry_dn From 52126d5634e8490f6dc36af24546e3deb24417f2 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Sun, 19 Sep 2021 11:53:18 +0200 Subject: [PATCH 03/20] add en flag kompetenzinventar/ki-frontend#28 --- data/imgs/flags/en.png | Bin 0 -> 680 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/imgs/flags/en.png diff --git a/data/imgs/flags/en.png b/data/imgs/flags/en.png new file mode 100644 index 0000000000000000000000000000000000000000..96a97f7f9b5e3ec0879e37ce18077db523c7bc33 GIT binary patch literal 680 zcmV;Z0$2TsP)4`Zun>FzpTK9x0|XQiEYcWL+36FAXyXTHw6M?=Nh2s& zjG4og&3(DMGjk!_3@j<`xZVBz|B#v4jQ}93@`x0G0#E=7KmjNK1)u;FfC8vEfTwmF zzDFal-BgJ{2ljtkOE*H;>*eC zp4`H6<8WaBEUh0v=lCWT6oob4e{42wk!JxsG#Y;|O1Ys70BbvgBGv7f1%MlT>vZ6% zRs$(FNCI$FJ&w`%GYtSYwLiFnui+4++#m(OLv`q1JVSlsC=I}T3^yj_25tbps&DO` z+iS@NfFsuptrp1*oB%>pPpl;$fRr0J08mu-2EgqGDgdhLK>$MBfWWfc5DI`xbrJv$ zH-rG-RGkcf>INSG5~{NS2z7%i04dd30fe~06@ZlLA^?2d-~vEO^+EtpV*Cf7q)-5< zen6Fm0#E=7KmjNK{ToyOJgG3IrI?;31JhVLt@Q;E*96ma+C0ZJ8`JH)e#2a90W3&< z+srcy#{wp=v+U~tyDG$j3kxsmIRzPjtLnITEN!vGbp>E5Oi4G80QjhmO$}^r_%=jL zg(>BRAOIn%Q(IzEZtw;WsyatgRKg9;0H~^Sw#7N!-~@m}b?$=^+!P+dP~A`nfKzp; zqcN%*ashCwE_pagaYG7#lMSSSkOCm3dRZ4FeBDr33~{Pn_7xddH)H~k zP< Date: Mon, 20 Sep 2021 19:58:42 +0200 Subject: [PATCH 04/20] separate storage and data kompetenzinventar/ki-frontend#28 --- data/imgs/flags/Pipfile | 11 +++++++++++ env.dev | 2 +- storage/.gitignore | 6 ++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 data/imgs/flags/Pipfile create mode 100644 storage/.gitignore diff --git a/data/imgs/flags/Pipfile b/data/imgs/flags/Pipfile new file mode 100644 index 0000000..22d660a --- /dev/null +++ b/data/imgs/flags/Pipfile @@ -0,0 +1,11 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] + +[dev-packages] + +[requires] +python_version = "3.8" diff --git a/env.dev b/env.dev index d393498..1d7116a 100644 --- a/env.dev +++ b/env.dev @@ -2,7 +2,7 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later -SQLALCHEMY_DATABASE_URI=sqlite:///data/ki.sqlite +SQLALCHEMY_DATABASE_URI=sqlite:///storage/ki.sqlite CORS_ORIGINS=* diff --git a/storage/.gitignore b/storage/.gitignore new file mode 100644 index 0000000..d04c597 --- /dev/null +++ b/storage/.gitignore @@ -0,0 +1,6 @@ +# SPDX-FileCopyrightText: WTF Kooperative eG +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +* +!.gitignore From 0fa5612dcebd87cb0118f87b0d96847468ea0e82 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 20 Sep 2021 19:59:24 +0200 Subject: [PATCH 05/20] add czech flag kompetenzinventar/ki-frontend#28 --- data/imgs/flags/cs.png | Bin 0 -> 369 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 data/imgs/flags/cs.png diff --git a/data/imgs/flags/cs.png b/data/imgs/flags/cs.png new file mode 100644 index 0000000000000000000000000000000000000000..b38296bd2622dae27c98adacfff2bd794e7a98f6 GIT binary patch literal 369 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7T#lEV6^abaSW-r_4d+gUM5G8)`z)` zERF>eayTt`nED-@odi8t4lc-SO2}+%;akAL!&HB8jl+gF$!YIi`xJ4{cyBK$m^$zL z*XN8t1L2_I{Ms`0Dx3HxFKU@fmPwy_UTqbhSI5{@ys7OzgWt6Pz6S}sR~dNLFSKg7 zXnKX+U|U-nL)*0rdwga(qMID?<#TY!V zPG#GXGq}A@M7Xoah8m7HE$hakxpKHO!DglPGSEHFT*58vj;PuswVcM$e zOdBHh8Z}&fRnNF4T%Ywrz+RC9uTgx+;P;+)Q<&})^VEG=Aa8rR`njxgN@xNAT?T}M literal 0 HcmV?d00001 From 8bdc1564be8fda789b853f75a5fc1a9b77e618cf Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 20 Sep 2021 21:07:48 +0200 Subject: [PATCH 06/20] fix find profile query #51 --- ki/actions/seed.py | 11 +++++++---- ki/handlers/find_profiles.py | 5 +++-- ki/test/test_find_profiles_endpoint.py | 8 ++++++-- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/ki/actions/seed.py b/ki/actions/seed.py index 5140ea3..ff02112 100644 --- a/ki/actions/seed.py +++ b/ki/actions/seed.py @@ -139,12 +139,15 @@ def seed(dev: bool): freetext="1001010010111!!!", skills=[(Skill.skill_id_php, 5)]) - seed_user("jutta", - visible=True, - languages=[("fr", 5)], - skills=[(Skill.skill_id_php, 3), (Skill.skill_id_mysql, 4)]) + all_skills = Skill.query.all() + all_profile_skills = [] + for skill in all_skills: + all_profile_skills.append((skill.id, 3)) + + seed_user("jutta", visible=True, languages=[("fr", 5)], skills=all_profile_skills) seed_user("giesela", visible=True, skills=[(Skill.skill_id_mysql, 3), (Skill.skill_id_postgresql, 5)]) seed_user("bertha", visible=False, skills=[(Skill.skill_id_sqlite, 3), (Skill.skill_id_postgresql, 5)]) + seed_user("monique", visible=True, languages=[("fr", 4)]) db.session.commit() diff --git a/ki/handlers/find_profiles.py b/ki/handlers/find_profiles.py index a4063bf..1a1b007 100644 --- a/ki/handlers/find_profiles.py +++ b/ki/handlers/find_profiles.py @@ -18,7 +18,8 @@ def find_profiles(): if page_size > 100: return make_response({"messages": {"page_size": "Die maximale Anzahl Einträge pro Seite beträgt 100"}}, 400) - query = Profile.query.filter(Profile.visible.is_(True)) \ + query = Profile.query.distinct(Profile.id) \ + .filter(Profile.visible.is_(True)) \ .join(Profile.skills, isouter=True).join(ProfileSkill.skill, isouter=True) \ .join(Profile.languages, isouter=True).join(ProfileLanguage.language, isouter=True) @@ -32,7 +33,7 @@ def find_profiles(): nickname = request.args.get("nickname") query = query.filter(Profile.nickname.like(f"%{nickname}%")) - count = query.distinct(Profile.id).count() + count = query.count() offset = (page - 1) * page_size db_profiles = query.limit(page_size).offset(offset).all() diff --git a/ki/test/test_find_profiles_endpoint.py b/ki/test/test_find_profiles_endpoint.py index aad5c78..a87181d 100644 --- a/ki/test/test_find_profiles_endpoint.py +++ b/ki/test/test_find_profiles_endpoint.py @@ -36,6 +36,9 @@ class TestFindProfilesEndpoint(ApiTest): self.assertEqual(response.status_code, 200) self.assertDictContainsSubset({"total": 4}, response.json) self.assertDictContainsSubset({"nickname": "dirtydieter"}, response.json["profiles"][0]) + self.assertDictContainsSubset({"nickname": "jutta"}, response.json["profiles"][1]) + self.assertDictContainsSubset({"nickname": "giesela"}, response.json["profiles"][2]) + self.assertDictContainsSubset({"nickname": "monique"}, response.json["profiles"][3]) def test_find_dieter(self): token = self.login("peter", "geheim")["token"] @@ -67,8 +70,9 @@ class TestFindProfilesEndpoint(ApiTest): response = self.client.get("/users/profiles?search=post", headers={"Authorization": "Bearer " + token}) self.assertEqual(response.status_code, 200) - self.assertDictContainsSubset({"total": 1}, response.json) - self.assertDictContainsSubset({"nickname": "giesela"}, response.json["profiles"][0]) + self.assertDictContainsSubset({"total": 2}, response.json) + self.assertDictContainsSubset({"nickname": "jutta"}, response.json["profiles"][0]) + self.assertDictContainsSubset({"nickname": "giesela"}, response.json["profiles"][1]) def test_find_php_franzosen(self): token = self.login("peter", "geheim")["token"] From 8772a13163248ed65d44158e5957bf4cb2f311d8 Mon Sep 17 00:00:00 2001 From: scammo Date: Mon, 4 Oct 2021 18:10:31 +0200 Subject: [PATCH 07/20] availibility --- .pre-commit-config.yaml | 1 + ki/actions/seed.py | 22 ++++++++++++++---- ki/handlers/update_profile.py | 4 +++- ki/models.py | 10 ++++++-- ki/test/test_profile_endpoint.py | 9 +++++--- migrations/versions/459520b01f34_.py | 34 ++++++++++++++++++++++++++++ migrations/versions/99f6b0756445_.py | 24 ++++++++++++++++++++ 7 files changed, 94 insertions(+), 10 deletions(-) create mode 100644 migrations/versions/459520b01f34_.py create mode 100644 migrations/versions/99f6b0756445_.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 38232bc..529438e 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,6 +2,7 @@ # # SPDX-License-Identifier: AGPL-3.0-or-later +repos: - repo: local hooks: - id: flake8 diff --git a/ki/actions/seed.py b/ki/actions/seed.py index ff02112..fa3e819 100644 --- a/ki/actions/seed.py +++ b/ki/actions/seed.py @@ -26,7 +26,15 @@ def seed_contacttypes(): db.session.add(ContactType(id=int(contacttype["id"]), name=contacttype["name"])) -def seed_user(nickname, visible=False, skills=[], languages=[], volunteerwork="", availability="", freetext=""): +def seed_user(nickname, + visible=False, + skills=[], + languages=[], + volunteerwork="", + availabilityStatus=False, + freetext="", + availabilityText="", + availabilityHoursPerWeek=42): app.logger.info(f"seeding {nickname} \\o/") user = User(auth_id=nickname) @@ -35,7 +43,9 @@ def seed_user(nickname, visible=False, skills=[], languages=[], volunteerwork="" profile = Profile(nickname=nickname, pronouns="", volunteerwork=volunteerwork, - availability=availability, + availabilityStatus=availabilityStatus, + availabilityText=availabilityText, + availabilityHoursPerWeek=availabilityHoursPerWeek, freetext=freetext, visible=visible, user=user) @@ -91,7 +101,9 @@ def seed(dev: bool): peters_profile = Profile(nickname="peternichtlustig", pronouns="Herr Dr. Dr.", volunteerwork="Gartenverein", - availability="Immer", + availabilityStatus=True, + availabilityHoursPerWeek=42, + availabilityText="Immer", freetext="Ich mag Kaffee", user=peter) db.session.add(peters_profile) @@ -135,7 +147,9 @@ def seed(dev: bool): seed_user("dirtydieter", visible=True, volunteerwork="Müll sammeln", - availability="Nur nachts", + availabilityStatus=True, + availabilityHoursPerWeek=24, + availabilityText="Nur Nachts!", freetext="1001010010111!!!", skills=[(Skill.skill_id_php, 5)]) diff --git a/ki/handlers/update_profile.py b/ki/handlers/update_profile.py index ad70991..3722b94 100644 --- a/ki/handlers/update_profile.py +++ b/ki/handlers/update_profile.py @@ -135,7 +135,9 @@ def update_profile(user_id: int): profile.pronouns = request.json.get("pronouns", "") profile.volunteerwork = request.json.get("volunteerwork", "") - profile.availability = request.json.get("availability", "") + profile.availabilityStatus = request.json.get("availabilityStatus", False) + profile.availabilityText = request.json.get("availabilityText", "") + profile.availabilityHoursPerWeek = request.json.get("availabilityHoursPerWeek", 0) profile.freetext = request.json.get("freetext", "") profile.visible = request.json.get("visible", False) diff --git a/ki/models.py b/ki/models.py index af0ee5f..3206497 100644 --- a/ki/models.py +++ b/ki/models.py @@ -32,7 +32,11 @@ class Profile(db.Model): pronouns = Column(String(25), default="") volunteerwork = Column(String(4000), default="") freetext = Column(String(4000), default="") - availability = Column(String(4000), default="") + + availabilityStatus = Column(Boolean, default=False) + availabilityText = Column(String(4000), default="") + availabilityHoursPerWeek = Column(Integer, default=0) + visible = Column(Boolean, nullable=False, default=False) created = Column(DateTime, nullable=False, default=datetime.now) updated = Column(DateTime, onupdate=datetime.now, nullable=False, default=datetime.now) @@ -50,7 +54,9 @@ class Profile(db.Model): "nickname": self.nickname, "pronouns": self.pronouns, "volunteerwork": self.volunteerwork, - "availability": self.availability, + "availabilityStatus": self.availabilityStatus, + "availabilityText": self.availabilityText, + "availabilityHoursPerWeek": self.availabilityHoursPerWeek, "freetext": self.freetext, "visible": self.visible, "address": self.address.to_dict() if self.address else None, diff --git a/ki/test/test_profile_endpoint.py b/ki/test/test_profile_endpoint.py index febc6a0..698b5d3 100644 --- a/ki/test/test_profile_endpoint.py +++ b/ki/test/test_profile_endpoint.py @@ -33,7 +33,8 @@ class TestProfileEndpoint(ApiTest): data = { "pronouns": "Monsieur", "volunteerwork": "ja", - "availability": "Nie", + "availabilityStatus": False, + "availabilityText": "Nie", "freetext": "Hallo", "visible": True, "address": { @@ -110,7 +111,7 @@ class TestProfileEndpoint(ApiTest): profile = user.profile self.assertEqual("Monsieur", profile.pronouns) self.assertEqual("ja", profile.volunteerwork) - self.assertEqual("Nie", profile.availability) + self.assertEqual("Nie", profile.availabilityText) self.assertEqual("Hallo", profile.freetext) self.assertTrue(profile.visible) @@ -198,7 +199,9 @@ class TestProfileEndpoint(ApiTest): "user_id": 1, "nickname": "peternichtlustig", "pronouns": "Herr Dr. Dr.", - "availability": "Immer", + "availabilityStatus": True, + "availabilityHoursPerWeek": 25, + "availabilityText": "Immer", "freetext": "Ich mag Kaffee", "volunteerwork": "Gartenverein", "visible": False, diff --git a/migrations/versions/459520b01f34_.py b/migrations/versions/459520b01f34_.py new file mode 100644 index 0000000..bdd5e78 --- /dev/null +++ b/migrations/versions/459520b01f34_.py @@ -0,0 +1,34 @@ +"""empty message + +Revision ID: 459520b01f34 +Revises: 99f6b0756445 +Create Date: 2021-10-03 14:45:30.389359 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '459520b01f34' +down_revision = '99f6b0756445' +branch_labels = None +depends_on = None + + +def upgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('profile', sa.Column('availabilityStatus', sa.Boolean(), nullable=True)) + op.add_column('profile', sa.Column('availabilityText', sa.String(length=4000), nullable=True)) + op.add_column('profile', sa.Column('availabilityHoursPerWeek', sa.Integer(), nullable=True)) + op.drop_column('profile', 'availability') + # ### end Alembic commands ### + + +def downgrade(): + # ### commands auto generated by Alembic - please adjust! ### + op.add_column('profile', sa.Column('availability', sa.VARCHAR(length=4000), nullable=True)) + op.drop_column('profile', 'availabilityHoursPerWeek') + op.drop_column('profile', 'availabilityText') + op.drop_column('profile', 'availabilityStatus') + # ### end Alembic commands ### diff --git a/migrations/versions/99f6b0756445_.py b/migrations/versions/99f6b0756445_.py new file mode 100644 index 0000000..8544e8f --- /dev/null +++ b/migrations/versions/99f6b0756445_.py @@ -0,0 +1,24 @@ +"""empty message + +Revision ID: 99f6b0756445 +Revises: 9183e2335b05 +Create Date: 2021-10-03 14:45:10.980556 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '99f6b0756445' +down_revision = '9183e2335b05' +branch_labels = None +depends_on = None + + +def upgrade(): + pass + + +def downgrade(): + pass From cac14b4cfb1c82d222a209ab5c2ae75750b1abdf Mon Sep 17 00:00:00 2001 From: scammo Date: Mon, 4 Oct 2021 19:25:24 +0200 Subject: [PATCH 08/20] fix migrations issues, richtige variablen bennung --- ki/actions/seed.py | 24 ++++++++++++------------ ki/handlers/update_profile.py | 6 +++--- ki/models.py | 12 ++++++------ ki/test/test_profile_endpoint.py | 15 +++++++++------ migrations/versions/459520b01f34_.py | 19 ++++++++++--------- migrations/versions/99f6b0756445_.py | 24 ------------------------ 6 files changed, 40 insertions(+), 60 deletions(-) delete mode 100644 migrations/versions/99f6b0756445_.py diff --git a/ki/actions/seed.py b/ki/actions/seed.py index fa3e819..17fede2 100644 --- a/ki/actions/seed.py +++ b/ki/actions/seed.py @@ -31,10 +31,10 @@ def seed_user(nickname, skills=[], languages=[], volunteerwork="", - availabilityStatus=False, + availability_status=False, freetext="", - availabilityText="", - availabilityHoursPerWeek=42): + availability_text="", + availability_hours_per_week=42): app.logger.info(f"seeding {nickname} \\o/") user = User(auth_id=nickname) @@ -43,9 +43,9 @@ def seed_user(nickname, profile = Profile(nickname=nickname, pronouns="", volunteerwork=volunteerwork, - availabilityStatus=availabilityStatus, - availabilityText=availabilityText, - availabilityHoursPerWeek=availabilityHoursPerWeek, + availability_status=availability_status, + availability_text=availability_text, + availability_hours_per_week=availability_hours_per_week, freetext=freetext, visible=visible, user=user) @@ -101,9 +101,9 @@ def seed(dev: bool): peters_profile = Profile(nickname="peternichtlustig", pronouns="Herr Dr. Dr.", volunteerwork="Gartenverein", - availabilityStatus=True, - availabilityHoursPerWeek=42, - availabilityText="Immer", + availability_status=True, + availability_hours_per_week=42, + availability_text="Immer", freetext="Ich mag Kaffee", user=peter) db.session.add(peters_profile) @@ -147,9 +147,9 @@ def seed(dev: bool): seed_user("dirtydieter", visible=True, volunteerwork="Müll sammeln", - availabilityStatus=True, - availabilityHoursPerWeek=24, - availabilityText="Nur Nachts!", + availability_status=True, + availability_hours_per_week=24, + availability_text="Nur Nachts!", freetext="1001010010111!!!", skills=[(Skill.skill_id_php, 5)]) diff --git a/ki/handlers/update_profile.py b/ki/handlers/update_profile.py index 3722b94..762935b 100644 --- a/ki/handlers/update_profile.py +++ b/ki/handlers/update_profile.py @@ -135,9 +135,9 @@ def update_profile(user_id: int): profile.pronouns = request.json.get("pronouns", "") profile.volunteerwork = request.json.get("volunteerwork", "") - profile.availabilityStatus = request.json.get("availabilityStatus", False) - profile.availabilityText = request.json.get("availabilityText", "") - profile.availabilityHoursPerWeek = request.json.get("availabilityHoursPerWeek", 0) + profile.availability_status = request.json.get("availability_status", False) + profile.availability_text = request.json.get("availability_text", "") + profile.availability_hours_per_week = request.json.get("availability_hours_per_week", 0) profile.freetext = request.json.get("freetext", "") profile.visible = request.json.get("visible", False) diff --git a/ki/models.py b/ki/models.py index 3206497..1347e8e 100644 --- a/ki/models.py +++ b/ki/models.py @@ -33,9 +33,9 @@ class Profile(db.Model): volunteerwork = Column(String(4000), default="") freetext = Column(String(4000), default="") - availabilityStatus = Column(Boolean, default=False) - availabilityText = Column(String(4000), default="") - availabilityHoursPerWeek = Column(Integer, default=0) + availability_status = Column(Boolean, default=False) + availability_text = Column(String(4000), default="") + availability_hours_per_week = Column(Integer, default=0) visible = Column(Boolean, nullable=False, default=False) created = Column(DateTime, nullable=False, default=datetime.now) @@ -54,9 +54,9 @@ class Profile(db.Model): "nickname": self.nickname, "pronouns": self.pronouns, "volunteerwork": self.volunteerwork, - "availabilityStatus": self.availabilityStatus, - "availabilityText": self.availabilityText, - "availabilityHoursPerWeek": self.availabilityHoursPerWeek, + "availability_status": self.availability_status, + "availability_text": self.availability_text, + "availability_hours_per_week": self.availability_hours_per_week, "freetext": self.freetext, "visible": self.visible, "address": self.address.to_dict() if self.address else None, diff --git a/ki/test/test_profile_endpoint.py b/ki/test/test_profile_endpoint.py index 698b5d3..af51a5d 100644 --- a/ki/test/test_profile_endpoint.py +++ b/ki/test/test_profile_endpoint.py @@ -33,8 +33,9 @@ class TestProfileEndpoint(ApiTest): data = { "pronouns": "Monsieur", "volunteerwork": "ja", - "availabilityStatus": False, - "availabilityText": "Nie", + "availability_status": False, + "availability_text": "Nie", + "availability_hours_per_week": "23", "freetext": "Hallo", "visible": True, "address": { @@ -111,7 +112,9 @@ class TestProfileEndpoint(ApiTest): profile = user.profile self.assertEqual("Monsieur", profile.pronouns) self.assertEqual("ja", profile.volunteerwork) - self.assertEqual("Nie", profile.availabilityText) + self.assertEqual(False, profile.availability_status) + self.assertEqual("Nie", profile.availability_text) + self.assertEqual(23, profile.availability_hours_per_week) self.assertEqual("Hallo", profile.freetext) self.assertTrue(profile.visible) @@ -199,9 +202,9 @@ class TestProfileEndpoint(ApiTest): "user_id": 1, "nickname": "peternichtlustig", "pronouns": "Herr Dr. Dr.", - "availabilityStatus": True, - "availabilityHoursPerWeek": 25, - "availabilityText": "Immer", + "availability_status": True, + "availability_hours_per_week": 42, + "availability_text": "Immer", "freetext": "Ich mag Kaffee", "volunteerwork": "Gartenverein", "visible": False, diff --git a/migrations/versions/459520b01f34_.py b/migrations/versions/459520b01f34_.py index bdd5e78..75bf85b 100644 --- a/migrations/versions/459520b01f34_.py +++ b/migrations/versions/459520b01f34_.py @@ -11,24 +11,25 @@ import sqlalchemy as sa # revision identifiers, used by Alembic. revision = '459520b01f34' -down_revision = '99f6b0756445' +down_revision = '9183e2335b05' branch_labels = None depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### - op.add_column('profile', sa.Column('availabilityStatus', sa.Boolean(), nullable=True)) - op.add_column('profile', sa.Column('availabilityText', sa.String(length=4000), nullable=True)) - op.add_column('profile', sa.Column('availabilityHoursPerWeek', sa.Integer(), nullable=True)) - op.drop_column('profile', 'availability') + with op.batch_alter_table("profile") as batch_op: + batch_op.add_column(sa.Column('availability_status', sa.Boolean(), nullable=False)) + batch_op.add_column(sa.Column('availability_text', sa.String(length=4000), nullable=True)) + batch_op.add_column(sa.Column('availability_hours_per_week', sa.Integer(), nullable=True)) + batch_op.drop_column('availability') # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### - op.add_column('profile', sa.Column('availability', sa.VARCHAR(length=4000), nullable=True)) - op.drop_column('profile', 'availabilityHoursPerWeek') - op.drop_column('profile', 'availabilityText') - op.drop_column('profile', 'availabilityStatus') + with op.batch_alter_table("profile") as batch_op: + batch_op.drop_column('profile', 'availability_hours_per_week') + batch_op.drop_column('profile', 'availability_text') + batch_op.drop_column('profile', 'availability_status') # ### end Alembic commands ### diff --git a/migrations/versions/99f6b0756445_.py b/migrations/versions/99f6b0756445_.py deleted file mode 100644 index 8544e8f..0000000 --- a/migrations/versions/99f6b0756445_.py +++ /dev/null @@ -1,24 +0,0 @@ -"""empty message - -Revision ID: 99f6b0756445 -Revises: 9183e2335b05 -Create Date: 2021-10-03 14:45:10.980556 - -""" -from alembic import op -import sqlalchemy as sa - - -# revision identifiers, used by Alembic. -revision = '99f6b0756445' -down_revision = '9183e2335b05' -branch_labels = None -depends_on = None - - -def upgrade(): - pass - - -def downgrade(): - pass From 4c813e8ca454dc99d769c03a89fd287e7e6b1daf Mon Sep 17 00:00:00 2001 From: scammo Date: Wed, 6 Oct 2021 20:45:26 +0200 Subject: [PATCH 09/20] mehr skill icons --- LICENSES/Apache-2.0.txt | 73 +++++ LICENSES/CC-BY-3.0.txt | 93 +++++++ LICENSES/CC-PDDC.txt | 8 + LICENSES/CC0-1.0.txt | 121 +++++++++ LICENSES/GFDL-1.2-only.txt | 130 +++++++++ LICENSES/LGPLLR.txt | 89 +++++++ LICENSES/NGPL.txt | 21 ++ LICENSES/PostgreSQL.txt | 12 + data/imgs/skill_icons/10.svg | 20 ++ data/imgs/skill_icons/10.svg.license | 4 + data/imgs/skill_icons/100.svg | 22 ++ data/imgs/skill_icons/100.svg.license | 4 + data/imgs/skill_icons/11.svg | 3 + data/imgs/skill_icons/11.svg.license | 4 + data/imgs/skill_icons/114.svg | 5 + data/imgs/skill_icons/114.svg.license | 4 + data/imgs/skill_icons/116.svg | 35 +++ data/imgs/skill_icons/116.svg.license | 4 + data/imgs/skill_icons/117.svg | 1 + data/imgs/skill_icons/117.svg.license | 4 + data/imgs/skill_icons/12.svg | 1 + data/imgs/skill_icons/12.svg.license | 4 + data/imgs/skill_icons/13.svg | 17 ++ data/imgs/skill_icons/13.svg.license | 4 + data/imgs/skill_icons/14.svg | 3 + data/imgs/skill_icons/14.svg.license | 4 + data/imgs/skill_icons/16.svg | 42 +++ data/imgs/skill_icons/16.svg.license | 4 + data/imgs/skill_icons/2.svg | 2 + data/imgs/skill_icons/2.svg.license | 4 + data/imgs/skill_icons/20.svg | 1 + data/imgs/skill_icons/20.svg.license | 4 + data/imgs/skill_icons/21.svg | 14 + data/imgs/skill_icons/21.svg.license | 4 + data/imgs/skill_icons/22.svg | 1 + data/imgs/skill_icons/22.svg.license | 4 + data/imgs/skill_icons/27.svg | 1 + data/imgs/skill_icons/27.svg.license | 4 + data/imgs/skill_icons/3.svg | 35 +++ data/imgs/skill_icons/3.svg.license | 4 + data/imgs/skill_icons/32.svg | 28 ++ data/imgs/skill_icons/32.svg.license | 4 + data/imgs/skill_icons/34.svg | 22 ++ data/imgs/skill_icons/34.svg.license | 4 + data/imgs/skill_icons/4.svg | 4 + data/imgs/skill_icons/4.svg.license | 4 + data/imgs/skill_icons/40.png | Bin 0 -> 2800 bytes data/imgs/skill_icons/40.png.license | 4 + data/imgs/skill_icons/41.svg | 25 ++ data/imgs/skill_icons/41.svg.license | 4 + data/imgs/skill_icons/46.svg | 27 ++ data/imgs/skill_icons/46.svg.license | 4 + data/imgs/skill_icons/5.svg | 14 + data/imgs/skill_icons/5.svg.license | 4 + data/imgs/skill_icons/57.svg | 9 + data/imgs/skill_icons/57.svg.license | 4 + data/imgs/skill_icons/58.svg | 8 + data/imgs/skill_icons/58.svg.license | 4 + data/imgs/skill_icons/61.svg | 27 ++ data/imgs/skill_icons/61.svg.license | 4 + data/imgs/skill_icons/62.svg | 2 + data/imgs/skill_icons/62.svg.license | 4 + data/imgs/skill_icons/66.svg | 59 +++++ data/imgs/skill_icons/66.svg.license | 4 + data/imgs/skill_icons/67.svg | 367 ++++++++++++++++++++++++++ data/imgs/skill_icons/67.svg.license | 4 + data/imgs/skill_icons/72.svg | 25 ++ data/imgs/skill_icons/72.svg.license | 4 + data/imgs/skill_icons/73.svg | 1 + data/imgs/skill_icons/73.svg.license | 4 + data/imgs/skill_icons/75.svg | 1 + data/imgs/skill_icons/75.svg.license | 4 + data/imgs/skill_icons/79.svg | 87 ++++++ data/imgs/skill_icons/79.svg.license | 4 + data/imgs/skill_icons/8.svg | 2 + data/imgs/skill_icons/8.svg.license | 4 + data/imgs/skill_icons/81.svg | 36 +++ data/imgs/skill_icons/81.svg.license | 4 + data/imgs/skill_icons/83.svg | 316 ++++++++++++++++++++++ data/imgs/skill_icons/83.svg.license | 4 + data/imgs/skill_icons/84.svg | 2 + data/imgs/skill_icons/84.svg.license | 4 + data/imgs/skill_icons/94.svg | 18 ++ data/imgs/skill_icons/94.svg.license | 4 + 84 files changed, 1982 insertions(+) create mode 100644 LICENSES/Apache-2.0.txt create mode 100644 LICENSES/CC-BY-3.0.txt create mode 100644 LICENSES/CC-PDDC.txt create mode 100644 LICENSES/CC0-1.0.txt create mode 100644 LICENSES/GFDL-1.2-only.txt create mode 100644 LICENSES/LGPLLR.txt create mode 100644 LICENSES/NGPL.txt create mode 100644 LICENSES/PostgreSQL.txt create mode 100644 data/imgs/skill_icons/10.svg create mode 100644 data/imgs/skill_icons/10.svg.license create mode 100644 data/imgs/skill_icons/100.svg create mode 100644 data/imgs/skill_icons/100.svg.license create mode 100644 data/imgs/skill_icons/11.svg create mode 100644 data/imgs/skill_icons/11.svg.license create mode 100644 data/imgs/skill_icons/114.svg create mode 100644 data/imgs/skill_icons/114.svg.license create mode 100644 data/imgs/skill_icons/116.svg create mode 100644 data/imgs/skill_icons/116.svg.license create mode 100644 data/imgs/skill_icons/117.svg create mode 100644 data/imgs/skill_icons/117.svg.license create mode 100644 data/imgs/skill_icons/12.svg create mode 100644 data/imgs/skill_icons/12.svg.license create mode 100644 data/imgs/skill_icons/13.svg create mode 100644 data/imgs/skill_icons/13.svg.license create mode 100644 data/imgs/skill_icons/14.svg create mode 100644 data/imgs/skill_icons/14.svg.license create mode 100644 data/imgs/skill_icons/16.svg create mode 100644 data/imgs/skill_icons/16.svg.license create mode 100644 data/imgs/skill_icons/2.svg create mode 100644 data/imgs/skill_icons/2.svg.license create mode 100644 data/imgs/skill_icons/20.svg create mode 100644 data/imgs/skill_icons/20.svg.license create mode 100644 data/imgs/skill_icons/21.svg create mode 100644 data/imgs/skill_icons/21.svg.license create mode 100644 data/imgs/skill_icons/22.svg create mode 100644 data/imgs/skill_icons/22.svg.license create mode 100644 data/imgs/skill_icons/27.svg create mode 100644 data/imgs/skill_icons/27.svg.license create mode 100644 data/imgs/skill_icons/3.svg create mode 100644 data/imgs/skill_icons/3.svg.license create mode 100644 data/imgs/skill_icons/32.svg create mode 100644 data/imgs/skill_icons/32.svg.license create mode 100644 data/imgs/skill_icons/34.svg create mode 100644 data/imgs/skill_icons/34.svg.license create mode 100644 data/imgs/skill_icons/4.svg create mode 100644 data/imgs/skill_icons/4.svg.license create mode 100644 data/imgs/skill_icons/40.png create mode 100644 data/imgs/skill_icons/40.png.license create mode 100644 data/imgs/skill_icons/41.svg create mode 100644 data/imgs/skill_icons/41.svg.license create mode 100644 data/imgs/skill_icons/46.svg create mode 100644 data/imgs/skill_icons/46.svg.license create mode 100644 data/imgs/skill_icons/5.svg create mode 100644 data/imgs/skill_icons/5.svg.license create mode 100644 data/imgs/skill_icons/57.svg create mode 100644 data/imgs/skill_icons/57.svg.license create mode 100644 data/imgs/skill_icons/58.svg create mode 100644 data/imgs/skill_icons/58.svg.license create mode 100644 data/imgs/skill_icons/61.svg create mode 100644 data/imgs/skill_icons/61.svg.license create mode 100644 data/imgs/skill_icons/62.svg create mode 100644 data/imgs/skill_icons/62.svg.license create mode 100644 data/imgs/skill_icons/66.svg create mode 100644 data/imgs/skill_icons/66.svg.license create mode 100644 data/imgs/skill_icons/67.svg create mode 100644 data/imgs/skill_icons/67.svg.license create mode 100644 data/imgs/skill_icons/72.svg create mode 100644 data/imgs/skill_icons/72.svg.license create mode 100644 data/imgs/skill_icons/73.svg create mode 100644 data/imgs/skill_icons/73.svg.license create mode 100644 data/imgs/skill_icons/75.svg create mode 100644 data/imgs/skill_icons/75.svg.license create mode 100644 data/imgs/skill_icons/79.svg create mode 100644 data/imgs/skill_icons/79.svg.license create mode 100644 data/imgs/skill_icons/8.svg create mode 100644 data/imgs/skill_icons/8.svg.license create mode 100644 data/imgs/skill_icons/81.svg create mode 100644 data/imgs/skill_icons/81.svg.license create mode 100644 data/imgs/skill_icons/83.svg create mode 100644 data/imgs/skill_icons/83.svg.license create mode 100644 data/imgs/skill_icons/84.svg create mode 100644 data/imgs/skill_icons/84.svg.license create mode 100644 data/imgs/skill_icons/94.svg create mode 100644 data/imgs/skill_icons/94.svg.license diff --git a/LICENSES/Apache-2.0.txt b/LICENSES/Apache-2.0.txt new file mode 100644 index 0000000..137069b --- /dev/null +++ b/LICENSES/Apache-2.0.txt @@ -0,0 +1,73 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/LICENSES/CC-BY-3.0.txt b/LICENSES/CC-BY-3.0.txt new file mode 100644 index 0000000..465aae7 --- /dev/null +++ b/LICENSES/CC-BY-3.0.txt @@ -0,0 +1,93 @@ +Creative Commons Attribution 3.0 Unported + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. + +License + +THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. + +BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. + +1. Definitions + + a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. + + b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License. + + c. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. + + d. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. + + e. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. + + f. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. + + g. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. + + h. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. + + i. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. + +2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. + +3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: + + a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; + + b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; + + c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, + + d. to Distribute and Publicly Perform Adaptations. + + e. For the avoidance of doubt: + + i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; + + ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, + + iii. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. + +The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. + +4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: + + a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested. + + b. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. + + c. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. + +5. Representations, Warranties and Disclaimer + +UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. + +6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +7. Termination + + a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. + + b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. + +8. Miscellaneous + + a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. + + b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. + + c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. + + d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. + + e. This License may not be modified without the mutual written agreement of the Licensor and You. + + f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. + +Creative Commons Notice + +Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. + +Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of this License. + +Creative Commons may be contacted at http://creativecommons.org/. diff --git a/LICENSES/CC-PDDC.txt b/LICENSES/CC-PDDC.txt new file mode 100644 index 0000000..b64dfd6 --- /dev/null +++ b/LICENSES/CC-PDDC.txt @@ -0,0 +1,8 @@ + +The person or persons who have associated work with this document (the "Dedicator" or "Certifier") hereby either (a) certifies that, to the best of his knowledge, the work of authorship identified is in the public domain of the country from which the work is published, or (b) hereby dedicates whatever copyright the dedicators holds in the work of authorship identified below (the "Work") to the public domain. A certifier, moreover, dedicates any copyright interest he may have in the associated work, and for these purposes, is described as a "dedicator" below. + +A certifier has taken reasonable steps to verify the copyright status of this work. Certifier recognizes that his good faith efforts may not shield him from liability if in fact the work certified is not in the public domain. + +Dedicator makes this dedication for the benefit of the public at large and to the detriment of the Dedicator's heirs and successors. Dedicator intends this dedication to be an overt act of relinquishment in perpetuity of all present and future rights under copyright law, whether vested or contingent, in the Work. Dedicator understands that such relinquishment of all rights includes the relinquishment of all rights to enforce (by lawsuit or otherwise) those copyrights in the Work. + +Dedicator recognizes that, once placed in the public domain, the Work may be freely reproduced, distributed, transmitted, used, modified, built upon, or otherwise exploited by anyone for any purpose, commercial or non-commercial, and in any way, including by methods that have not yet been invented or conceived. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/LICENSES/GFDL-1.2-only.txt b/LICENSES/GFDL-1.2-only.txt new file mode 100644 index 0000000..83c375a --- /dev/null +++ b/LICENSES/GFDL-1.2-only.txt @@ -0,0 +1,130 @@ +GNU Free Documentation License +Version 1.2, November 2002 + +Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +0. PREAMBLE + +The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. + +This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. + +We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. + +1. APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. + +A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. + +A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. + +The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. + +The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. + +A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". + +Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. + +The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. + +A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. + +The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. + +2. VERBATIM COPYING + +You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. + +You may also lend copies, under the same conditions stated above, and you may publicly display copies. + +3. COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. + +If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. + +It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. + +4. MODIFICATIONS + +You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: + + A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. + B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. + C. State on the Title page the name of the publisher of the Modified Version, as the publisher. + D. Preserve all the copyright notices of the Document. + E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. + F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. + G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. + H. Include an unaltered copy of this License. + I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. + J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. + K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. + L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. + M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. + N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. + O. Preserve any Warranty Disclaimers. + +If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. + +You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. + +You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. + +The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. + +5. COMBINING DOCUMENTS + +You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. + +In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements". + +6. COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. + +You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. + +7. AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. + +8. TRANSLATION + +Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. + +If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. + +9. TERMINATION + +You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +10. FUTURE REVISIONS OF THIS LICENSE + +The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. + +Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. + +ADDENDUM: How to use this License for your documents + +To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: + + Copyright (c) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". + +If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: + + with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. + +If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. + +If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. diff --git a/LICENSES/LGPLLR.txt b/LICENSES/LGPLLR.txt new file mode 100644 index 0000000..73d8040 --- /dev/null +++ b/LICENSES/LGPLLR.txt @@ -0,0 +1,89 @@ +Lesser General Public License For Linguistic Resources + +Preamble + +The licenses for most data are designed to take away your freedom to share and change it. By contrast, this License is intended to guarantee your freedom to share and change free data--to make sure the data are free for all their users. + +This License, the Lesser General Public License for Linguistic Resources, applies to some specially designated linguistic resources -- typically lexicons and grammars. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any Linguistic Resource which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License for Linguistic Resources (also called "this License"). Each licensee is addressed as "you". + +A "linguistic resource" means a collection of data about language prepared so as to be used with application programs. + +The "Linguistic Resource", below, refers to any such work which has been distributed under these terms. A "work based on the Linguistic Resource" means either the Linguistic Resource or any derivative work under copyright law: that is to say, a work containing the Linguistic Resource or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + +"Legible form" for a linguistic resource means the preferred form of the resource for making modifications to it. + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Linguistic Resource is not restricted, and output from such a program is covered only if its contents constitute a work based on the Linguistic Resource (independent of the use of the Linguistic Resource in a tool for writing it). Whether that is true depends on what the program that uses the Linguistic Resource does. + +1. You may copy and distribute verbatim copies of the Linguistic Resource as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Linguistic Resource. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Linguistic Resource or any portion of it, thus forming a work based on the Linguistic Resource, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + a) The modified work must itself be a linguistic resource. + + b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Linguistic Resource, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Linguistic Resource, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Linguistic Resource. + +In addition, mere aggregation of another work not based on the Linguistic Resource with the Linguistic Resource (or with a work based on the Linguistic Resource) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. A program that contains no derivative of any portion of the Linguistic Resource, but is designed to work with the Linguistic Resource (or an encrypted form of the Linguistic Resource) by reading it or being compiled or linked with it, is called a "work that uses the Linguistic Resource". Such a work, in isolation, is not a derivative work of the Linguistic Resource, and therefore falls outside the scope of this License. + +However, combining a "work that uses the Linguistic Resource" with the Linguistic Resource (or an encrypted form of the Linguistic Resource) creates a package that is a derivative of the Linguistic Resource (because it contains portions of the Linguistic Resource), rather than a "work that uses the Linguistic Resource". If the package is a derivative of the Linguistic Resource, you may distribute the package under the terms of Section 4. Any works containing that package also fall under Section 4. + +4. As an exception to the Sections above, you may also combine a "work that uses the Linguistic Resource" with the Linguistic Resource (or an encrypted form of the Linguistic Resource) to produce a package containing portions of the Linguistic Resource, and distribute that package under terms of your choice, provided that the terms permit modification of the package for the customer's own use and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the package that the Linguistic Resource is used in it and that the Linguistic Resource and its use are covered by this License. You must supply a copy of this License. If the package during execution displays copyright notices, you must include the copyright notice for the Linguistic Resource among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + + a) Accompany the package with the complete corresponding machine-readable legible form of the Linguistic Resource including whatever changes were used in the package (which must be distributed under Sections 1 and 2 above); and, if the package contains an encrypted form of the Linguistic Resource, with the complete machine-readable "work that uses the Linguistic Resource", as object code and/or source code, so that the user can modify the Linguistic Resource and then encrypt it to produce a modified package containing the modified Linguistic Resource. + + b) Use a suitable mechanism for combining with the Linguistic Resource. A suitable mechanism is one that will operate properly with a modified version of the Linguistic Resource, if the user installs one, as long as the modified version is interface-compatible with the version that the package was made with. + + c) Accompany the package with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 4a, above, for a charge no more than the cost of performing this distribution. + + d) If distribution of the package is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. + + e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. + +If the package includes an encrypted form of the Linguistic Resource, the required form of the "work that uses the Linguistic Resource" must include any data and utility programs needed for reproducing the package from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +It may happen that this requirement contradicts the license restrictions of proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Linguistic Resource together in a package that you distribute. + +5. You may not copy, modify, sublicense, link with, or distribute the Linguistic Resource except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Linguistic Resource is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +6. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Linguistic Resource or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Linguistic Resource (or any work based on the Linguistic Resource), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Linguistic Resource or works based on it. + +7. Each time you redistribute the Linguistic Resource (or any work based on the Linguistic Resource), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Linguistic Resource subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. + +8. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Linguistic Resource at all. For example, if a patent license would not permit royalty-free redistribution of the Linguistic Resource by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Linguistic Resource. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free resource distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of data distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute resources through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +9. If the distribution and/or use of the Linguistic Resource is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Linguistic Resource under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +10. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License for Linguistic Resources from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Linguistic Resource specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Linguistic Resource does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + +11. If you wish to incorporate parts of the Linguistic Resource into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. + + NO WARRANTY + +12. BECAUSE THE LINGUISTIC RESOURCE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LINGUISTIC RESOURCE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LINGUISTIC RESOURCE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LINGUISTIC RESOURCE IS WITH YOU. SHOULD THE LINGUISTIC RESOURCE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +13. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LINGUISTIC RESOURCE AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LINGUISTIC RESOURCE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LINGUISTIC RESOURCE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/LICENSES/NGPL.txt b/LICENSES/NGPL.txt new file mode 100644 index 0000000..acd7c47 --- /dev/null +++ b/LICENSES/NGPL.txt @@ -0,0 +1,21 @@ +NETHACK GENERAL PUBLIC LICENSE +(Copyright 1989 M. Stephenson) +(Based on the BISON general public license, copyright 1988 Richard M. Stallman) +Everyone is permitted to copy and distribute verbatim copies of this license, but changing it is not allowed. You can also use this wording to make the terms for other programs. +The license agreements of most software companies keep you at the mercy of those companies. By contrast, our general public license is intended to give everyone the right to share NetHack. To make sure that you get the rights we want you to have, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. Hence this license agreement. +Specifically, we want to make sure that you have the right to give away copies of NetHack, that you receive source code or else can get it if you want it, that you can change NetHack or use pieces of it in new free programs, and that you know you can do these things. +To make sure that everyone has such rights, we have to forbid you to deprive anyone else of these rights. For example, if you distribute copies of NetHack, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must tell them their rights. +Also, for our own protection, we must make certain that everyone finds out that there is no warranty for NetHack. If NetHack is modified by someone else and passed on, we want its recipients to know that what they have is not what we distributed. +Therefore we (Mike Stephenson and other holders of NetHack copyrights) make the following terms which say what you must do to be allowed to distribute or change NetHack. +COPYING POLICIES + 1. You may copy and distribute verbatim copies of NetHack source code as you receive it, in any medium, provided that you keep intact the notices on all files that refer to copyrights, to this License Agreement, and to the absence of any warranty; and give any other recipients of the NetHack program a copy of this License Agreement along with the program. + 2. You may modify your copy or copies of NetHack or any portion of it, and copy and distribute such modifications under the terms of Paragraph 1 above (including distributing this License Agreement), provided that you also do the following: + a) cause the modified files to carry prominent notices stating that you changed the files and the date of any change; and + b) cause the whole of any work that you distribute or publish, that in whole or in part contains or is a derivative of NetHack or any part thereof, to be licensed at no charge to all third parties on terms identical to those contained in this License Agreement (except that you may choose to grant more extensive warranty protection to some or all third parties, at your option) + c) You may charge a distribution fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + 3. You may copy and distribute NetHack (or a portion or derivative of it, under Paragraph 2) in object code or executable form under the terms of Paragraphs 1 and 2 above provided that you also do one of the following: + a) accompany it with the complete machine-readable source code, which must be distributed under the terms of Paragraphs 1 and 2 above; or, + b) accompany it with full information as to how to obtain the complete machine-readable source code from an appropriate archive site. (This alternative is allowed only for noncommercial distribution.) + For these purposes, complete source code means either the full source distribution as originally released over Usenet or updated copies of the files in this distribution used to create the object code or executable. + 4. You may not copy, sublicense, distribute or transfer NetHack except as expressly provided under this License Agreement. Any attempt otherwise to copy, sublicense, distribute or transfer NetHack is void and your rights to use the program under this License agreement shall be automatically terminated. However, parties who have received computer software programs from you with this License Agreement will not have their licenses terminated so long as such parties remain in full compliance. +Stated plainly: You are permitted to modify NetHack, or otherwise use parts of NetHack, provided that you comply with the conditions specified above; in particular, your modified NetHack or program containing parts of NetHack must remain freely available as provided in this License Agreement. In other words, go ahead and share NetHack, but don't try to stop anyone else from sharing it farther. diff --git a/LICENSES/PostgreSQL.txt b/LICENSES/PostgreSQL.txt new file mode 100644 index 0000000..f5775a4 --- /dev/null +++ b/LICENSES/PostgreSQL.txt @@ -0,0 +1,12 @@ +PostgreSQL Database Management System +(formerly known as Postgres, then as Postgres95) + +Portions Copyright (c) 1996-2010, The PostgreSQL Global Development Group + +Portions Copyright (c) 1994, The Regents of the University of California + +Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the following two paragraphs appear in all copies. + +IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. diff --git a/data/imgs/skill_icons/10.svg b/data/imgs/skill_icons/10.svg new file mode 100644 index 0000000..8666f75 --- /dev/null +++ b/data/imgs/skill_icons/10.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/10.svg.license b/data/imgs/skill_icons/10.svg.license new file mode 100644 index 0000000..6d7f3ae --- /dev/null +++ b/data/imgs/skill_icons/10.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Daniel Lundin +SPDX-FileCopyrightText: https://wiki.postgresql.org/images/a/a4/PostgreSQL_logo.3colors.svg + +SPDX-License-Identifier: PostgreSQL diff --git a/data/imgs/skill_icons/100.svg b/data/imgs/skill_icons/100.svg new file mode 100644 index 0000000..6bdb3b1 --- /dev/null +++ b/data/imgs/skill_icons/100.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/100.svg.license b/data/imgs/skill_icons/100.svg.license new file mode 100644 index 0000000..67c31d0 --- /dev/null +++ b/data/imgs/skill_icons/100.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: SAP AG +SPDX-FileCopyrightText: https://www.sap.com/dam/application/shared/logos/sap-logo-svg.svg.adapt.svg/1493030643828.svg + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/11.svg b/data/imgs/skill_icons/11.svg new file mode 100644 index 0000000..99caaae --- /dev/null +++ b/data/imgs/skill_icons/11.svg @@ -0,0 +1,3 @@ + + +SQLiteimage/svg+xmlSQLite \ No newline at end of file diff --git a/data/imgs/skill_icons/11.svg.license b/data/imgs/skill_icons/11.svg.license new file mode 100644 index 0000000..272f4d4 --- /dev/null +++ b/data/imgs/skill_icons/11.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: D. Richard Hipp, SVG conversion by Mike Toews +SPDX-FileCopyrightText: SVG created from sqlite370.eps, distributed with version 3.7.2 documentation + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/114.svg b/data/imgs/skill_icons/114.svg new file mode 100644 index 0000000..c27646b --- /dev/null +++ b/data/imgs/skill_icons/114.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/114.svg.license b/data/imgs/skill_icons/114.svg.license new file mode 100644 index 0000000..86753ac --- /dev/null +++ b/data/imgs/skill_icons/114.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Alejo2083 +SPDX-FileCopyrightText: https://commons.wikimedia.org/wiki/File:TeX_logo.svg + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/116.svg b/data/imgs/skill_icons/116.svg new file mode 100644 index 0000000..1178161 --- /dev/null +++ b/data/imgs/skill_icons/116.svg @@ -0,0 +1,35 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/116.svg.license b/data/imgs/skill_icons/116.svg.license new file mode 100644 index 0000000..2c8fee6 --- /dev/null +++ b/data/imgs/skill_icons/116.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: D0ktorz +SPDX-FileCopyrightText: https://commons.wikimedia.org/wiki/File:Vimlogo.svg + +SPDX-License-Identifier: NGPL diff --git a/data/imgs/skill_icons/117.svg b/data/imgs/skill_icons/117.svg new file mode 100644 index 0000000..22fefc5 --- /dev/null +++ b/data/imgs/skill_icons/117.svg @@ -0,0 +1 @@ +Untitled \ No newline at end of file diff --git a/data/imgs/skill_icons/117.svg.license b/data/imgs/skill_icons/117.svg.license new file mode 100644 index 0000000..4c10790 --- /dev/null +++ b/data/imgs/skill_icons/117.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: ©Microsoft +SPDX-FileCopyrightText: https://commons.wikimedia.org/wiki/File:Windows_10_Logo.svg + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/12.svg b/data/imgs/skill_icons/12.svg new file mode 100644 index 0000000..41d044a --- /dev/null +++ b/data/imgs/skill_icons/12.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/imgs/skill_icons/12.svg.license b/data/imgs/skill_icons/12.svg.license new file mode 100644 index 0000000..479016f --- /dev/null +++ b/data/imgs/skill_icons/12.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: node.js authors +SPDX-FileCopyrightText: https://nodejs.org/about/resources/ + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/13.svg b/data/imgs/skill_icons/13.svg new file mode 100644 index 0000000..0e44682 --- /dev/null +++ b/data/imgs/skill_icons/13.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/13.svg.license b/data/imgs/skill_icons/13.svg.license new file mode 100644 index 0000000..422e340 --- /dev/null +++ b/data/imgs/skill_icons/13.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Jeremy Kratz +SPDX-FileCopyrightText: https://github.com/isocpp/logos + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/14.svg b/data/imgs/skill_icons/14.svg new file mode 100644 index 0000000..bb6aefb --- /dev/null +++ b/data/imgs/skill_icons/14.svg @@ -0,0 +1,3 @@ + + +image/svg+xml \ No newline at end of file diff --git a/data/imgs/skill_icons/14.svg.license b/data/imgs/skill_icons/14.svg.license new file mode 100644 index 0000000..0cd6ed4 --- /dev/null +++ b/data/imgs/skill_icons/14.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Rezonansowy +SPDX-FileCopyrightText: https://commons.wikimedia.org/wiki/File:The_C_Programming_Language_logo.svg + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/16.svg b/data/imgs/skill_icons/16.svg new file mode 100644 index 0000000..15403d7 --- /dev/null +++ b/data/imgs/skill_icons/16.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/16.svg.license b/data/imgs/skill_icons/16.svg.license new file mode 100644 index 0000000..82a7f23 --- /dev/null +++ b/data/imgs/skill_icons/16.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: The Go Authors +SPDX-FileCopyrightText: https://blog.golang.org/go-brand + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/2.svg b/data/imgs/skill_icons/2.svg new file mode 100644 index 0000000..271db25 --- /dev/null +++ b/data/imgs/skill_icons/2.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/data/imgs/skill_icons/2.svg.license b/data/imgs/skill_icons/2.svg.license new file mode 100644 index 0000000..deadb5e --- /dev/null +++ b/data/imgs/skill_icons/2.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Evan You +SPDX-FileCopyrightText: https://github.com/vuejs/art/tree + +SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/data/imgs/skill_icons/20.svg b/data/imgs/skill_icons/20.svg new file mode 100644 index 0000000..a927578 --- /dev/null +++ b/data/imgs/skill_icons/20.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/imgs/skill_icons/20.svg.license b/data/imgs/skill_icons/20.svg.license new file mode 100644 index 0000000..fbec7cb --- /dev/null +++ b/data/imgs/skill_icons/20.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Android +SPDX-FileCopyrightText: https://developer.android.com/images/brand/Android_Robot.svg + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/21.svg b/data/imgs/skill_icons/21.svg new file mode 100644 index 0000000..86c0b45 --- /dev/null +++ b/data/imgs/skill_icons/21.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/21.svg.license b/data/imgs/skill_icons/21.svg.license new file mode 100644 index 0000000..60dee88 --- /dev/null +++ b/data/imgs/skill_icons/21.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Ansible/Red Hat - Vectorised by Vulphere +SPDX-FileCopyrightText: https://github.com/gilbarbara/logos/blob/master/logos/ansible.svg + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/22.svg b/data/imgs/skill_icons/22.svg new file mode 100644 index 0000000..9b2ce50 --- /dev/null +++ b/data/imgs/skill_icons/22.svg @@ -0,0 +1 @@ +wiki:Behnam N \ No newline at end of file diff --git a/data/imgs/skill_icons/22.svg.license b/data/imgs/skill_icons/22.svg.license new file mode 100644 index 0000000..e14b9e7 --- /dev/null +++ b/data/imgs/skill_icons/22.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Arduino +SPDX-FileCopyrightText: http://arduino.cc/ + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/27.svg b/data/imgs/skill_icons/27.svg new file mode 100644 index 0000000..8e43620 --- /dev/null +++ b/data/imgs/skill_icons/27.svg @@ -0,0 +1 @@ +logo_Csharp \ No newline at end of file diff --git a/data/imgs/skill_icons/27.svg.license b/data/imgs/skill_icons/27.svg.license new file mode 100644 index 0000000..2c2f14c --- /dev/null +++ b/data/imgs/skill_icons/27.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Jason Groce +SPDX-FileCopyrightText: https://github.com/dotnet/docs/blob/cb475ed45f881e9462e34764480d3b0ebce85e91/docs/images/hub/csharp.svg + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/3.svg b/data/imgs/skill_icons/3.svg new file mode 100644 index 0000000..1c7fd6b --- /dev/null +++ b/data/imgs/skill_icons/3.svg @@ -0,0 +1,35 @@ + + +Python programming language logo + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/imgs/skill_icons/3.svg.license b/data/imgs/skill_icons/3.svg.license new file mode 100644 index 0000000..3a3a300 --- /dev/null +++ b/data/imgs/skill_icons/3.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: ™/®Python Software Foundation +SPDX-FileCopyrightText: http://www.python.org/community/logos/ + +SPDX-License-Identifier: NGPL diff --git a/data/imgs/skill_icons/32.svg b/data/imgs/skill_icons/32.svg new file mode 100644 index 0000000..99e7d06 --- /dev/null +++ b/data/imgs/skill_icons/32.svg @@ -0,0 +1,28 @@ + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/32.svg.license b/data/imgs/skill_icons/32.svg.license new file mode 100644 index 0000000..60ac84b --- /dev/null +++ b/data/imgs/skill_icons/32.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Rudloff +SPDX-FileCopyrightText: https://commons.wikimedia.org/wiki/File:CSS3_and_HTML5_logos_and_wordmarks.svg + +SPDX-License-Identifier: CC-BY-3.0 diff --git a/data/imgs/skill_icons/34.svg b/data/imgs/skill_icons/34.svg new file mode 100644 index 0000000..b7db78e --- /dev/null +++ b/data/imgs/skill_icons/34.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/34.svg.license b/data/imgs/skill_icons/34.svg.license new file mode 100644 index 0000000..0df00f2 --- /dev/null +++ b/data/imgs/skill_icons/34.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Debian +SPDX-FileCopyrightText: http://www.debian.org/logos/ + +SPDX-License-Identifier: CC-BY-SA-3.0 diff --git a/data/imgs/skill_icons/4.svg b/data/imgs/skill_icons/4.svg new file mode 100644 index 0000000..9650ca7 --- /dev/null +++ b/data/imgs/skill_icons/4.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/4.svg.license b/data/imgs/skill_icons/4.svg.license new file mode 100644 index 0000000..62f756a --- /dev/null +++ b/data/imgs/skill_icons/4.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Chris Williams +SPDX-FileCopyrightText: https://github.com/voodootikigod/logo.js/blob/1544bdeed/js.svg + +SPDX-License-Identifier: MIT diff --git a/data/imgs/skill_icons/40.png b/data/imgs/skill_icons/40.png new file mode 100644 index 0000000000000000000000000000000000000000..c84a60b154263e5463db95d1c58d9ae69162d340 GIT binary patch literal 2800 zcmdT_`BxH%8YRojEE^r$EZ3CMr&wr~xa7W|;+9yNyHaXWZrIZ@W0Db6Qpyc?oXFu7 zCMFhRXlRsVScn9aq^L9^VNsD`+4IeR@$Pr-z2|&C-gEA`*l<|D*3HJ70RX_(pg`Zq zHNUh*w@vHU^kS@^1OQkM2oE{#XK8A=26!YKg+hVBUNE|V#hN;Ddsl9D1>u30)bFzG;FzyKp?2qYA%->$)qCKbOwW=)@URuWoBk3T`H-otJ7#SbpkGj!=ce= zAY0qm*jTYxoWPcNJzj7I7LN8R4P@ys*$Qy6f&8B$J6O_ zfj}Ua%Tw5Nl7t8K_g8AvsN7sU9?wzA1S%z&Om<$&2ZMn^p|LDlYilct%Z!D?r4nfg zmz9!`;Njts%VE}uxgHQmCY!;ONh4t}fl^*aAfS2d6c$|~79&zpXi{-55?NAIM3+f2 z5eQ;kT@eZ;;PF;9t6&g_C6|IhV4x*Xs#3w>@JtSaOd_F6O6W8iNz6-#jb+g3q}Epa zTErL($QFd-ao|iEkIO}7X08RtX0eH4E|bBKs8lHlDO3uDED>;(G8~T$gF;ccs00?B zAmBorA#6i_AslBG?QMh=)wA#-K5_KwBh-Ns)+S;jzd}B%DQKGMFTZK%i8X z6qS%#NnE9zfF~$58e$!hLZ@QD&K}Jw**Sbu}#K4BJ+~Q?;;F*uj2mhNk<=n^$g0I|X$kPBV;W+&9JCuTx9S zdE=E@nr0ti^4otd%v~~YImhbr1L3uccc8Rmv$4$RI-;q-?eH#$WGZS*gD_A&} zheK~eX@lA;Z9eo;M-(?yH_L#b9;$pWXXmO8oiL%N9E;!AXiyk<C9iswF90!bDRA4yXI|^ zQP|wuqIi?u0;^~m%xpDOw0EL6hW{eFcq;JE>U7f}*L?TQeLdB$c69s_`Q7a}eJ*ey z<@GA3;l~FTa)Csr5b9MKQMnpZ$IL7a1rd)aI&PY>>{w^#xp|nYl8e?xpFkkTP=>L zEwwvI%Dx1R{?QR4+}7U{*%l_e<(?pt@0V;CSO|X;{rh%YrGGjzAnx}%KCY62{Jg#@ zn*VK!50=#a?=IQP9tWGd1Ex+LMzVv?5iQ7zmgLm&n-MWH2fEEVWDOxKa9e{3$)c)? z45%t?d4E-Ut^Z)z)JAod!->T}QOgYx^aR17BlwWU2!%!@^=od3W?lkLMXrXZyxceNN?t_zlw{*<1T&*k5b8d?8n-DyiMnw zY{DMtcVl|K*+&?liPW&O*&9V)W6mP_XGYS8s^)hh(&&@Ri9fa#{eEeWXi7UR-}PMu zXZYGru1)(9+$B-`G<#8-o(w|u-$3;1xGk2_y3d>6iu0;D|MuY8Bvm$&TcvIj)=Q&H zX!CN`r&Z|1rgOWBO6}d9x6InBK9|;0$E%YS3zorGw)+fqW>CZ%IOkZ7;!oGZu$3+$ z&cokZmkf7o2%Xrl_4TfTvHdHRWUOV&UboWl-QU?F*%GS&FrU0%5p+2(>2d#_*`xyz zU5wB>=VE4DYYw<%TVrs-LVM+J5};$UEi`2J=JBsL|28;3tqz%Z<)Z497ZN z_8ltOpE3y6|D$o*ed=ka9%|6e0$(tHE$nd)|DNB6j7N0Mh4c?!ei$fRYCLzE8~tXL zf2Y(rRP^;TA%|J0fEzp=xm{S%y|GQnF1BBH)9VVLEYYOp)NsSUHkGx-4@z9tz0zwL zhqTRa(pfjy{709Wo!To3bE@_WnneGfN(3ce@X*4R5WTwR@E8EiJ)HEX`0>wW#cmigkHAtgzHmb^W7 zq`tPGR%lXIX1eP3@zhZB`nx`QXLgz^$o0w90l}5N%rZw^Z)@x;o2V$4Kuzn5%<8Eo zE$7So)xLldh}iElb)hoASh(r)8)0-+SkCW7u~E*Oz`ic4!_2H-Z8~z~z+i zzO`|u(YyI>`}g0*U)3`Yh}-E)b>Bk2UTK1No>XR(9c6gdkrxoNjapS!@xh9Q8xtTc z|D3k*`tTFfM4yqO2A1VaWAN~w#n{Es zhRr&OVfbk=1a^s&oNA}w@o>(aU(Dl(VI#lbd6@|?K2Mko6%~T7M#uQhQO*TTU z`3w15P8SfvfS*6j1Emp@Kl#w?h|7~Xy=@A|{H$H|qiMe|4lnSc;@{lL!mYCxmTHAE zn1Q0&G+u4~gHw}JPdylQ?Ag?GuP2?Fq2Ooa_BZpkVbU2W@L6M{VS}P7%-%YC=>>M- j=0|MQVk!Ch*qoXBZjgD*zS_~XWd;QK!F;LSN$CFqizy9v literal 0 HcmV?d00001 diff --git a/data/imgs/skill_icons/40.png.license b/data/imgs/skill_icons/40.png.license new file mode 100644 index 0000000..e037db2 --- /dev/null +++ b/data/imgs/skill_icons/40.png.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Dovecot +SPDX-FileCopyrightText: https://commons.wikimedia.org/wiki/File:Dovecot-logo.png + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/41.svg b/data/imgs/skill_icons/41.svg new file mode 100644 index 0000000..af0264a --- /dev/null +++ b/data/imgs/skill_icons/41.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/41.svg.license b/data/imgs/skill_icons/41.svg.license new file mode 100644 index 0000000..0b20087 --- /dev/null +++ b/data/imgs/skill_icons/41.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: ™/®Elasticsearch - Vectorised by Vulphere +SPDX-FileCopyrightText: https://www.elastic.co/products/elasticsearch + +SPDX-License-Identifier: Apache-2.0 diff --git a/data/imgs/skill_icons/46.svg b/data/imgs/skill_icons/46.svg new file mode 100644 index 0000000..ffb2510 --- /dev/null +++ b/data/imgs/skill_icons/46.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/46.svg.license b/data/imgs/skill_icons/46.svg.license new file mode 100644 index 0000000..75a86cb --- /dev/null +++ b/data/imgs/skill_icons/46.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Microsoft Corperation +SPDX-FileCopyrightText: hhttps://office.com/ + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/5.svg b/data/imgs/skill_icons/5.svg new file mode 100644 index 0000000..010e9a8 --- /dev/null +++ b/data/imgs/skill_icons/5.svg @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/5.svg.license b/data/imgs/skill_icons/5.svg.license new file mode 100644 index 0000000..f65f3e3 --- /dev/null +++ b/data/imgs/skill_icons/5.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Google +SPDX-FileCopyrightText: https://angular.io/presskit.html + +SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/data/imgs/skill_icons/57.svg b/data/imgs/skill_icons/57.svg new file mode 100644 index 0000000..5a80ac1 --- /dev/null +++ b/data/imgs/skill_icons/57.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/57.svg.license b/data/imgs/skill_icons/57.svg.license new file mode 100644 index 0000000..0cc38f2 --- /dev/null +++ b/data/imgs/skill_icons/57.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Andreas Nilsson +SPDX-FileCopyrightText: https://commons.wikimedia.org/wiki/File:GTK_logo.svg + +SPDX-License-Identifier: CC-BY-SA-3.0 diff --git a/data/imgs/skill_icons/58.svg b/data/imgs/skill_icons/58.svg new file mode 100644 index 0000000..b8b075f --- /dev/null +++ b/data/imgs/skill_icons/58.svg @@ -0,0 +1,8 @@ + + HTML5 Logo + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/58.svg.license b/data/imgs/skill_icons/58.svg.license new file mode 100644 index 0000000..f079425 --- /dev/null +++ b/data/imgs/skill_icons/58.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: W3C +SPDX-FileCopyrightText: https://www.w3.org/html/logo/index.html + +SPDX-License-Identifier: CC-BY-3.0 diff --git a/data/imgs/skill_icons/61.svg b/data/imgs/skill_icons/61.svg new file mode 100644 index 0000000..18591d2 --- /dev/null +++ b/data/imgs/skill_icons/61.svg @@ -0,0 +1,27 @@ + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/61.svg.license b/data/imgs/skill_icons/61.svg.license new file mode 100644 index 0000000..fd9f7ff --- /dev/null +++ b/data/imgs/skill_icons/61.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Maxlynch +SPDX-FileCopyrightText: https://commons.wikimedia.org/wiki/File:Ionic-logo-landscape.svg + +SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/data/imgs/skill_icons/62.svg b/data/imgs/skill_icons/62.svg new file mode 100644 index 0000000..63b69a7 --- /dev/null +++ b/data/imgs/skill_icons/62.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/data/imgs/skill_icons/62.svg.license b/data/imgs/skill_icons/62.svg.license new file mode 100644 index 0000000..bce6e62 --- /dev/null +++ b/data/imgs/skill_icons/62.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Apple Inc. +SPDX-FileCopyrightText: https://www.apple.com/ + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/66.svg b/data/imgs/skill_icons/66.svg new file mode 100644 index 0000000..4886b53 --- /dev/null +++ b/data/imgs/skill_icons/66.svg @@ -0,0 +1,59 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/66.svg.license b/data/imgs/skill_icons/66.svg.license new file mode 100644 index 0000000..0a80877 --- /dev/null +++ b/data/imgs/skill_icons/66.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Christoph Noack +SPDX-FileCopyrightText: https://wiki.documentfoundation.org/File:LibreOffice-Initial-Artwork-Logo.svg + +SPDX-License-Identifier: CC-BY-SA-3.0 diff --git a/data/imgs/skill_icons/67.svg b/data/imgs/skill_icons/67.svg new file mode 100644 index 0000000..a688a8e --- /dev/null +++ b/data/imgs/skill_icons/67.svg @@ -0,0 +1,367 @@ + + + + Tux + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/67.svg.license b/data/imgs/skill_icons/67.svg.license new file mode 100644 index 0000000..e2c1d86 --- /dev/null +++ b/data/imgs/skill_icons/67.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Larry Ewing, Simon Budig, Garrett LeSage +SPDX-FileCopyrightText: https://isc.tamu.edu/~lewing/linux/, http://www.home.unix-ag.org/simon/penguin/, garrett/Tux on GitHub + +SPDX-License-Identifier: CC0-1.0 diff --git a/data/imgs/skill_icons/72.svg b/data/imgs/skill_icons/72.svg new file mode 100644 index 0000000..fbfcb5c --- /dev/null +++ b/data/imgs/skill_icons/72.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/72.svg.license b/data/imgs/skill_icons/72.svg.license new file mode 100644 index 0000000..33dbe51 --- /dev/null +++ b/data/imgs/skill_icons/72.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: ™/®MariaDB - Vectorised and modified by Vulphere +SPDX-FileCopyrightText: https://mariadb.org/wp-content/themes/twentynineteen-child/icons/mariadb_org_rgb_h.svg + +SPDX-License-Identifier: NGPL diff --git a/data/imgs/skill_icons/73.svg b/data/imgs/skill_icons/73.svg new file mode 100644 index 0000000..171ea25 --- /dev/null +++ b/data/imgs/skill_icons/73.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/data/imgs/skill_icons/73.svg.license b/data/imgs/skill_icons/73.svg.license new file mode 100644 index 0000000..3f08971 --- /dev/null +++ b/data/imgs/skill_icons/73.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Dustin Curtis +SPDX-FileCopyrightText: https://github.com/dcurtis/markdown-mark/tree/master/svg + +SPDX-License-Identifier: CC0-1.0 diff --git a/data/imgs/skill_icons/75.svg b/data/imgs/skill_icons/75.svg new file mode 100644 index 0000000..91a58d0 --- /dev/null +++ b/data/imgs/skill_icons/75.svg @@ -0,0 +1 @@ +Union_64x64_nopadding \ No newline at end of file diff --git a/data/imgs/skill_icons/75.svg.license b/data/imgs/skill_icons/75.svg.license new file mode 100644 index 0000000..79c27b6 --- /dev/null +++ b/data/imgs/skill_icons/75.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Microsoft Corporation +SPDX-FileCopyrightText: https://pureinfotech.com/microsoft-ignite-2019-biggest-announcements/ + +SPDX-License-Identifier: CC-PDDC diff --git a/data/imgs/skill_icons/79.svg b/data/imgs/skill_icons/79.svg new file mode 100644 index 0000000..f58e58e --- /dev/null +++ b/data/imgs/skill_icons/79.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/79.svg.license b/data/imgs/skill_icons/79.svg.license new file mode 100644 index 0000000..202dcfa --- /dev/null +++ b/data/imgs/skill_icons/79.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Tim Cuthbertson +SPDX-FileCopyrightText: https://raw.githubusercontent.com/NixOS/nixos-artwork/4f041870efa1a6f0799ef4b32bb7be2cafee7a74/logo/nixos-text-below.svg + +SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/data/imgs/skill_icons/8.svg b/data/imgs/skill_icons/8.svg new file mode 100644 index 0000000..3907fc6 --- /dev/null +++ b/data/imgs/skill_icons/8.svg @@ -0,0 +1,2 @@ + +Rust programming language logoimage/svg+xml \ No newline at end of file diff --git a/data/imgs/skill_icons/8.svg.license b/data/imgs/skill_icons/8.svg.license new file mode 100644 index 0000000..12cf780 --- /dev/null +++ b/data/imgs/skill_icons/8.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: ™/®Rust Foundation +SPDX-FileCopyrightText: https://www.rust-lang.org/static/images/rust-logo-blk.svg + +SPDX-License-Identifier: CC-BY-SA-4.0 diff --git a/data/imgs/skill_icons/81.svg b/data/imgs/skill_icons/81.svg new file mode 100644 index 0000000..77637f3 --- /dev/null +++ b/data/imgs/skill_icons/81.svg @@ -0,0 +1,36 @@ + +OpenOffice.org logoimage/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/81.svg.license b/data/imgs/skill_icons/81.svg.license new file mode 100644 index 0000000..e5dc6f3 --- /dev/null +++ b/data/imgs/skill_icons/81.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: ™/®Sun Microsystems - Vectorised by Vulphere +SPDX-FileCopyrightText: http://www.openoffice.org/trademark/logo_color.svg + +SPDX-License-Identifier: LGPLLR diff --git a/data/imgs/skill_icons/83.svg b/data/imgs/skill_icons/83.svg new file mode 100644 index 0000000..c8a2502 --- /dev/null +++ b/data/imgs/skill_icons/83.svg @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 010110010011010110010011 + 010110010011010110010011 + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/83.svg.license b/data/imgs/skill_icons/83.svg.license new file mode 100644 index 0000000..0be03ea --- /dev/null +++ b/data/imgs/skill_icons/83.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Ken Vermette +SPDX-FileCopyrightText: https://wiki.openstreetmap.org/wiki/File:Public-images-osm_logo.svg + +SPDX-License-Identifier: CC-BY-SA-3.0 diff --git a/data/imgs/skill_icons/84.svg b/data/imgs/skill_icons/84.svg new file mode 100644 index 0000000..c9ee153 --- /dev/null +++ b/data/imgs/skill_icons/84.svg @@ -0,0 +1,2 @@ + +openSUSE logo \ No newline at end of file diff --git a/data/imgs/skill_icons/84.svg.license b/data/imgs/skill_icons/84.svg.license new file mode 100644 index 0000000..cab4c31 --- /dev/null +++ b/data/imgs/skill_icons/84.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: SUSE Linux GmbH. +SPDX-FileCopyrightText: https://gitorious.org/opensuse/art/source/ecbe9f96fa4c6d2e5d1ac18a403587f925c136a5:00assets/logo/official-logo-color.svg + +SPDX-License-Identifier: GFDL-1.2-only diff --git a/data/imgs/skill_icons/94.svg b/data/imgs/skill_icons/94.svg new file mode 100644 index 0000000..fd6ea9f --- /dev/null +++ b/data/imgs/skill_icons/94.svg @@ -0,0 +1,18 @@ + + + + + + image/svg+xml + + + + + + + + + + + + \ No newline at end of file diff --git a/data/imgs/skill_icons/94.svg.license b/data/imgs/skill_icons/94.svg.license new file mode 100644 index 0000000..36f0fdc --- /dev/null +++ b/data/imgs/skill_icons/94.svg.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Qt Project +SPDX-FileCopyrightText: https://www.qt.io/ + +SPDX-License-Identifier: CC-PDDC From 55b83f6efa77fd622a9ccc763a9da3aeaf18549b Mon Sep 17 00:00:00 2001 From: scammo Date: Thu, 7 Oct 2021 08:08:50 +0200 Subject: [PATCH 10/20] migration revision id fix --- migrations/versions/459520b01f34_.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/migrations/versions/459520b01f34_.py b/migrations/versions/459520b01f34_.py index 75bf85b..b510dea 100644 --- a/migrations/versions/459520b01f34_.py +++ b/migrations/versions/459520b01f34_.py @@ -1,7 +1,7 @@ """empty message Revision ID: 459520b01f34 -Revises: 99f6b0756445 +Revises: 9183e2335b05 Create Date: 2021-10-03 14:45:30.389359 """ From 763b6d6ee5b2d0a6c4c3309cbb292a4c1bada74b Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Sun, 10 Oct 2021 19:55:59 +0200 Subject: [PATCH 11/20] run docker publish only for the main branch --- .drone.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.drone.yml b/.drone.yml index c461d14..64400b2 100644 --- a/.drone.yml +++ b/.drone.yml @@ -26,6 +26,9 @@ steps: from_secret: "docker_username" password: from_secret: "docker_password" + when: + branch: + - main image_pull_secrets: - dockerconfig From 2387fb5e19abb35d8eeeb12e5edd6641ccfcbfa2 Mon Sep 17 00:00:00 2001 From: scammo Date: Mon, 11 Oct 2021 18:22:33 +0200 Subject: [PATCH 12/20] best migration and doku --- README.md | 2 +- migrations/versions/459520b01f34_.py | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c5d48b6..c3863c9 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ SPDX-License-Identifier: AGPL-3.0-or-later Ggf. vorher aufräumen ``` -rm data/ki.sqlite +rm storage/ki.sqlite ``` ``` diff --git a/migrations/versions/459520b01f34_.py b/migrations/versions/459520b01f34_.py index b510dea..23fabc6 100644 --- a/migrations/versions/459520b01f34_.py +++ b/migrations/versions/459520b01f34_.py @@ -19,17 +19,16 @@ depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("profile") as batch_op: + batch_op.alter_column('availability', new_column_name='availability_text') batch_op.add_column(sa.Column('availability_status', sa.Boolean(), nullable=False)) - batch_op.add_column(sa.Column('availability_text', sa.String(length=4000), nullable=True)) batch_op.add_column(sa.Column('availability_hours_per_week', sa.Integer(), nullable=True)) - batch_op.drop_column('availability') # ### end Alembic commands ### def downgrade(): # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("profile") as batch_op: - batch_op.drop_column('profile', 'availability_hours_per_week') - batch_op.drop_column('profile', 'availability_text') - batch_op.drop_column('profile', 'availability_status') + batch_op.alter_column('availability_text', new_column_name='availability') + batch_op.drop_column('availability_hours_per_week') + batch_op.drop_column('availability_status') # ### end Alembic commands ### From 794eb7456c8aa6ee3dc1752ba9d3a2d7609395c3 Mon Sep 17 00:00:00 2001 From: scammo Date: Mon, 11 Oct 2021 18:42:20 +0200 Subject: [PATCH 13/20] server_default boolean --- migrations/versions/459520b01f34_.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/migrations/versions/459520b01f34_.py b/migrations/versions/459520b01f34_.py index 23fabc6..a4e78d1 100644 --- a/migrations/versions/459520b01f34_.py +++ b/migrations/versions/459520b01f34_.py @@ -7,6 +7,7 @@ Create Date: 2021-10-03 14:45:30.389359 """ from alembic import op import sqlalchemy as sa +from sqlalchemy.sql import expression # revision identifiers, used by Alembic. @@ -20,7 +21,7 @@ def upgrade(): # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("profile") as batch_op: batch_op.alter_column('availability', new_column_name='availability_text') - batch_op.add_column(sa.Column('availability_status', sa.Boolean(), nullable=False)) + batch_op.add_column(sa.Column('availability_status', sa.Boolean(), server_default=expression.true(), nullable=False)) batch_op.add_column(sa.Column('availability_hours_per_week', sa.Integer(), nullable=True)) # ### end Alembic commands ### From f0d05bbf227da582678a04fe540c0d2fd0b6a8fd Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 1 Nov 2021 21:02:32 +0100 Subject: [PATCH 14/20] fix availability migration for MySQL --- migrations/versions/459520b01f34_.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/migrations/versions/459520b01f34_.py b/migrations/versions/459520b01f34_.py index a4e78d1..d8d40fe 100644 --- a/migrations/versions/459520b01f34_.py +++ b/migrations/versions/459520b01f34_.py @@ -9,7 +9,6 @@ from alembic import op import sqlalchemy as sa from sqlalchemy.sql import expression - # revision identifiers, used by Alembic. revision = '459520b01f34' down_revision = '9183e2335b05' @@ -20,8 +19,12 @@ depends_on = None def upgrade(): # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("profile") as batch_op: - batch_op.alter_column('availability', new_column_name='availability_text') - batch_op.add_column(sa.Column('availability_status', sa.Boolean(), server_default=expression.true(), nullable=False)) + batch_op.alter_column('availability', + new_column_name='availability_text', + existing_type=sa.String(4000), + existing_server_default="") + batch_op.add_column( + sa.Column('availability_status', sa.Boolean(), server_default=expression.true(), nullable=False)) batch_op.add_column(sa.Column('availability_hours_per_week', sa.Integer(), nullable=True)) # ### end Alembic commands ### @@ -29,7 +32,10 @@ def upgrade(): def downgrade(): # ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table("profile") as batch_op: - batch_op.alter_column('availability_text', new_column_name='availability') + batch_op.alter_column('availability_text', + new_column_name='availability', + existing_type=sa.String(4000), + existing_serve_server_default="") batch_op.drop_column('availability_hours_per_week') batch_op.drop_column('availability_status') # ### end Alembic commands ### From 9dc9761a1aebc9403ea4beabe95929a07b865083 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 22 Nov 2021 20:11:58 +0100 Subject: [PATCH 15/20] extend skill name to 50 chars #58 --- app.py | 2 +- ki/models.py | 2 +- ...977cbda_extend_skill_length_to_50_chars.py | 24 +++++++++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 migrations/versions/b5023977cbda_extend_skill_length_to_50_chars.py diff --git a/app.py b/app.py index 818502f..b2cc263 100644 --- a/app.py +++ b/app.py @@ -38,7 +38,7 @@ app.config["KI_LDAP_BASE_DN"] = os.getenv("KI_LDAP_BASE_DN") CORS(app) db = SQLAlchemy(app) -migrate = Migrate(app, db) +migrate = Migrate(app, db, compare_type=True) logging.debug("Hello from KI") diff --git a/ki/models.py b/ki/models.py index 1347e8e..c4bac66 100644 --- a/ki/models.py +++ b/ki/models.py @@ -149,7 +149,7 @@ class Skill(db.Model): __tablename__ = "skill" id = Column(Integer, primary_key=True) - name = Column(String(25), unique=True, nullable=False) + name = Column(String(50), unique=True, nullable=False) profiles = relationship("ProfileSkill", back_populates="skill") searchtopics = relationship("ProfileSearchtopic", back_populates="skill") diff --git a/migrations/versions/b5023977cbda_extend_skill_length_to_50_chars.py b/migrations/versions/b5023977cbda_extend_skill_length_to_50_chars.py new file mode 100644 index 0000000..30e181b --- /dev/null +++ b/migrations/versions/b5023977cbda_extend_skill_length_to_50_chars.py @@ -0,0 +1,24 @@ +"""extend skill length to 50 chars + +Revision ID: b5023977cbda +Revises: 459520b01f34 +Create Date: 2021-11-22 20:07:19.188217 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'b5023977cbda' +down_revision = '459520b01f34' +branch_labels = None +depends_on = None + + +def upgrade(): + with op.batch_alter_table("skill") as batch_op: + batch_op.alter_column('name', + existing_type=sa.VARCHAR(length=25), + type_=sa.String(length=50), + existing_nullable=False) From 1287893698a96425031bd57cb9328057a6fb18c9 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 22 Nov 2021 20:19:23 +0100 Subject: [PATCH 16/20] fix updating nickname #57 --- ki/handlers/update_profile.py | 1 + ki/test/test_profile_endpoint.py | 2 ++ 2 files changed, 3 insertions(+) diff --git a/ki/handlers/update_profile.py b/ki/handlers/update_profile.py index 762935b..26a188c 100644 --- a/ki/handlers/update_profile.py +++ b/ki/handlers/update_profile.py @@ -133,6 +133,7 @@ def update_profile(user_id: int): profile = Profile(user=user, nickname=user.auth_id) db.session.add(profile) + profile.nickname = request.json.get("nickname", "") profile.pronouns = request.json.get("pronouns", "") profile.volunteerwork = request.json.get("volunteerwork", "") profile.availability_status = request.json.get("availability_status", False) diff --git a/ki/test/test_profile_endpoint.py b/ki/test/test_profile_endpoint.py index af51a5d..066aff7 100644 --- a/ki/test/test_profile_endpoint.py +++ b/ki/test/test_profile_endpoint.py @@ -31,6 +31,7 @@ class TestProfileEndpoint(ApiTest): token = self.login("peter", "geheim")["token"] data = { + "nickname": "Hebbert", "pronouns": "Monsieur", "volunteerwork": "ja", "availability_status": False, @@ -110,6 +111,7 @@ class TestProfileEndpoint(ApiTest): with app.app_context(): user = User.query.filter(User.id == 1).first() profile = user.profile + self.assertEqual("Hebbert", profile.nickname) self.assertEqual("Monsieur", profile.pronouns) self.assertEqual("ja", profile.volunteerwork) self.assertEqual(False, profile.availability_status) From 111d4f08f454d3c385c388829536af20ca3f8d69 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 22 Nov 2021 20:27:33 +0100 Subject: [PATCH 17/20] cast hours to int #56 --- ki/handlers/update_profile.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/ki/handlers/update_profile.py b/ki/handlers/update_profile.py index 26a188c..06d107b 100644 --- a/ki/handlers/update_profile.py +++ b/ki/handlers/update_profile.py @@ -138,7 +138,16 @@ def update_profile(user_id: int): profile.volunteerwork = request.json.get("volunteerwork", "") profile.availability_status = request.json.get("availability_status", False) profile.availability_text = request.json.get("availability_text", "") - profile.availability_hours_per_week = request.json.get("availability_hours_per_week", 0) + + availability_hours_per_week_raw = request.json.get("availability_hours_per_week", 0) + + try: + availability_hours_per_week = int(availability_hours_per_week_raw) + except: + availability_hours_per_week = 0 + + profile.availability_hours_per_week = availability_hours_per_week + profile.freetext = request.json.get("freetext", "") profile.visible = request.json.get("visible", False) From 733499303f44fbfb3940f71d54554263aa45c30f Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 22 Nov 2021 21:13:33 +0100 Subject: [PATCH 18/20] fix creating languages #56 --- ki/handlers/update_profile.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/ki/handlers/update_profile.py b/ki/handlers/update_profile.py index 06d107b..8fd0d9e 100644 --- a/ki/handlers/update_profile.py +++ b/ki/handlers/update_profile.py @@ -30,19 +30,25 @@ def update_languages(profile, languages_data): profile_language_ids = [] for language_data in languages_data: - language_id = language_data["language"]["id"] - language = Language.query.get(language_id) + if "id" in language_data["language"]: + language = Language.query.get(language_data["language"]["id"]) + else: + language_name = language_data["language"]["name"] + language = Language.query.filter(Language.name == language_name).first() + + if language is None: + language = Language(id=language_name, name=language_name) + db.session.add(language) profile_language = ProfileLanguage.query.filter(ProfileLanguage.profile == profile, - ProfileLanguage.language_id == language_id).first() + ProfileLanguage.language == language).first() if profile_language is None: profile_language = ProfileLanguage(profile=profile, language=language) db.session.add(profile_language) profile_language.level = language_data["level"] - - profile_language_ids.append(language_id) + profile_language_ids.append(language.id) ProfileLanguage.query.filter(ProfileLanguage.profile == profile, not_(ProfileLanguage.language_id.in_(profile_language_ids))).delete() From 9baf08d6b66573a0a3f467b383b37081f56561e2 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 22 Nov 2021 21:23:35 +0100 Subject: [PATCH 19/20] set hours to None if unavailable --- ki/handlers/update_profile.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ki/handlers/update_profile.py b/ki/handlers/update_profile.py index 8fd0d9e..884543d 100644 --- a/ki/handlers/update_profile.py +++ b/ki/handlers/update_profile.py @@ -150,7 +150,7 @@ def update_profile(user_id: int): try: availability_hours_per_week = int(availability_hours_per_week_raw) except: - availability_hours_per_week = 0 + availability_hours_per_week = None profile.availability_hours_per_week = availability_hours_per_week From a3919d5d51d6f2ae168dc7fe36fbe47e25bdec97 Mon Sep 17 00:00:00 2001 From: Michael Weimann Date: Mon, 22 Nov 2021 21:31:17 +0100 Subject: [PATCH 20/20] disable adding new languages --- ki/handlers/update_profile.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/ki/handlers/update_profile.py b/ki/handlers/update_profile.py index 884543d..567f153 100644 --- a/ki/handlers/update_profile.py +++ b/ki/handlers/update_profile.py @@ -30,16 +30,10 @@ def update_languages(profile, languages_data): profile_language_ids = [] for language_data in languages_data: - if "id" in language_data["language"]: - language = Language.query.get(language_data["language"]["id"]) - else: - language_name = language_data["language"]["name"] - language = Language.query.filter(Language.name == language_name).first() - - if language is None: - language = Language(id=language_name, name=language_name) - db.session.add(language) + if "id" not in language_data["language"]: + continue + language = Language.query.get(language_data["language"]["id"]) profile_language = ProfileLanguage.query.filter(ProfileLanguage.profile == profile, ProfileLanguage.language == language).first()