Upload files to "source/Dobby"
This commit is contained in:
185
source/Dobby/dobby.ipynb
Normal file
185
source/Dobby/dobby.ipynb
Normal file
@@ -0,0 +1,185 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"from selenium import webdriver\n",
|
||||
"from selenium.common.exceptions import NoSuchElementException\n",
|
||||
"from neo4j import GraphDatabase\n",
|
||||
"\n",
|
||||
"uri = \"bolt://localhost:7687\"\n",
|
||||
"userName = \"neo4j\"\n",
|
||||
"password = \"org\"\n",
|
||||
"graphDB_Driver = GraphDatabase.driver(uri, auth=(userName, password)) "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"projekte = \"https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?ou=Projekte\"\n",
|
||||
"\n",
|
||||
"driver = webdriver.Firefox()\n",
|
||||
"driver.get(projekte)\n",
|
||||
"table = driver.find_element(\"xpath\", \"/html/body/div/div/table[2]\")\n",
|
||||
"\n",
|
||||
"groupsPpiX = []\n",
|
||||
"\n",
|
||||
"for row in table.find_elements(\"xpath\", \".//tr[not(position()=1)]\"):\n",
|
||||
" try:\n",
|
||||
" groupId = row.find_element(\"xpath\", \".//td[1]\").text\n",
|
||||
" groupDesc = row.find_element(\"xpath\", \".//td[2]\").text\n",
|
||||
" if groupId[:8] == 'prj_ppix':\n",
|
||||
" groupsPpiX.append([groupId, groupDesc])\n",
|
||||
" except NoSuchElementException:\n",
|
||||
" print(\"NoSuchElementException\")\n",
|
||||
"driver.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"driver = webdriver.Firefox()\n",
|
||||
"\n",
|
||||
"personen = set()\n",
|
||||
"\n",
|
||||
"for group, groupDesc in groupsPpiX:\n",
|
||||
" driver.get(\"https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?group=\" + group)\n",
|
||||
" table = driver.find_element(\"xpath\", \"/html/body/div/div/table[2]/tbody\")\n",
|
||||
"\n",
|
||||
" personenInGruppe = []\n",
|
||||
"\n",
|
||||
" for row in table.find_elements(\"xpath\", \".//tr[not(position()=1)]\"):\n",
|
||||
" try:\n",
|
||||
" kuerzel = row.find_element(\"xpath\", \".//td[1]\").text\n",
|
||||
" name = row.find_element(\"xpath\", \".//td[2]\").text\n",
|
||||
" personenInGruppe.append([kuerzel, name])\n",
|
||||
" personen.add(kuerzel)\n",
|
||||
" except NoSuchElementException:\n",
|
||||
" print(\"NoSuchElementException\")\n",
|
||||
"\n",
|
||||
" with graphDB_Driver.session() as graphDB_Session:\n",
|
||||
" #Gruppe anlegen\n",
|
||||
" graphDB_Session.run(\"\"\"CREATE (:ADGROUP {name: $name})\"\"\", name=group)\n",
|
||||
"\n",
|
||||
" #Personen zur Gruppe verknüpfen\n",
|
||||
" for kuerzel, name in personenInGruppe:\n",
|
||||
" g = graphDB_Session.run(\"\"\"MATCH (u:USER)\n",
|
||||
" WHERE u.displayName = $displayName\n",
|
||||
" RETURN u.kuerzel\"\"\", displayName=name).values()\n",
|
||||
" if g:\n",
|
||||
" #Person existiert\n",
|
||||
" for item in g:\n",
|
||||
" if not item[0]:\n",
|
||||
" #Attribut existiert nicht\n",
|
||||
" graphDB_Session.run(\"\"\"MATCH (u:USER)\n",
|
||||
" WHERE u.displayName = $displayName\n",
|
||||
" SET u.kuerzel = $kuerzel\"\"\", \n",
|
||||
" displayName=name,\n",
|
||||
" kuerzel=kuerzel)\n",
|
||||
" else:\n",
|
||||
" #Person existiert nicht\n",
|
||||
" #print(name, 'existiert nicht')\n",
|
||||
" graphDB_Session.run(\"\"\"CREATE (u:USER {displayName: $displayName, \n",
|
||||
" kuerzel: $kuerzel})\"\"\", \n",
|
||||
" displayName=name,\n",
|
||||
" kuerzel=kuerzel)\n",
|
||||
" # Gruppenbeziehung anlegen\n",
|
||||
" graphDB_Session.run(\"MATCH (grp:ADGROUP {name: $name}), (u:USER {displayName: $displayName}) MERGE (u)-[:is_member]->(grp)\",\n",
|
||||
" name=group,\n",
|
||||
" displayName=name)\n",
|
||||
"driver.close()\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"driver = webdriver.Firefox()\n",
|
||||
"\n",
|
||||
"with graphDB_Driver.session() as graphDB_Session:\n",
|
||||
" for kuerzel in personen:\n",
|
||||
" driver.get(\"https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?user=\" + kuerzel)\n",
|
||||
" field = driver.find_element(\"xpath\", \"/html/body/div/div/table[2]/tbody/tr[7]/td[2]\")\n",
|
||||
"\n",
|
||||
" for team in field.text.split('\\n'):\n",
|
||||
" graphDB_Session.run(\"MERGE (t:TEAMS {name: $name})\", name=team)\n",
|
||||
" graphDB_Session.run(\"MATCH (t:TEAMS {name: $name}), (u:USER {kuerzel: $kuerzel}) MERGE (u)-[:is_member]->(t)\",\n",
|
||||
" name=team,\n",
|
||||
" kuerzel=kuerzel)\n",
|
||||
"driver.close()"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Personen unter Sascha, die nicht in dem Teams Kanal WS_PPI_X sind\n",
|
||||
"with graphDB_Driver.session() as graphDB_Session:\n",
|
||||
" g = graphDB_Session.run(\"\"\"MATCH (s:USER {displayName: \"Sascha Däsler\"}) -[:vorgesetzter*]-> (u:USER)\n",
|
||||
" MATCH (ad:TEAMS {name: \"WS_PPI_X\"})\n",
|
||||
" WHERE not (u) -[:is_member]-> (ad)\n",
|
||||
" CALL {with u match (v:USER) -[:vorgesetzter]-> (u) return v.displayName as vorgesetzter}\n",
|
||||
" RETURN vorgesetzter, u.jobTitle, u.displayName\n",
|
||||
" ORDER BY vorgesetzter, TOLOWER(u.jobTitle), u.displayName\"\"\").values()\n",
|
||||
"g"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Personen unter Sascha, die nicht in der AD Gruppe prj_ppix sind\n",
|
||||
"with graphDB_Driver.session() as graphDB_Session:\n",
|
||||
" g = graphDB_Session.run(\"\"\"match (s:USER {displayName: \"Sascha Däsler\"}) -[:vorgesetzter*]-> (u:USER)\n",
|
||||
" match (ad:ADGROUP {name: \"prj_ppix\"})\n",
|
||||
" where not (u) -[:is_member]-> (ad)\n",
|
||||
" call {with u match (v:USER) -[:vorgesetzter]-> (u) return v.displayName as vorgesetzter}\n",
|
||||
" RETURN vorgesetzter, u.jobTitle, u.displayName\n",
|
||||
" ORDER BY vorgesetzter, TOLOWER(u.jobTitle), u.displayName\"\"\").values()\n",
|
||||
"g"
|
||||
]
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "venv",
|
||||
"language": "python",
|
||||
"name": "python3"
|
||||
},
|
||||
"language_info": {
|
||||
"codemirror_mode": {
|
||||
"name": "ipython",
|
||||
"version": 3
|
||||
},
|
||||
"file_extension": ".py",
|
||||
"mimetype": "text/x-python",
|
||||
"name": "python",
|
||||
"nbconvert_exporter": "python",
|
||||
"pygments_lexer": "ipython3",
|
||||
"version": "3.10.9"
|
||||
},
|
||||
"orig_nbformat": 4,
|
||||
"vscode": {
|
||||
"interpreter": {
|
||||
"hash": "28676787f946bb7f76164fe7d563a7ae5bf108f75fcb12ae9589f51e6258b2b8"
|
||||
}
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
Reference in New Issue
Block a user