EmployeeDB/source/Dobby/DobbyBackup.py

117 lines
5.0 KiB
Python

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from neo4j import GraphDatabase
uri = "bolt://localhost:7687"
userName = "neo4j"
password = "org"
graphDB_Driver = GraphDatabase.driver(uri, auth=(userName, password))
projekte = "https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?ou=Projekte"
driver = webdriver.Firefox()
driver.get(projekte)
table = driver.find_element("xpath", "/html/body/div/div/table[2]")
groupsPpiX = []
for row in table.find_elements("xpath", ".//tr[not(position()=1)]"):
try:
groupId = row.find_element("xpath", ".//td[1]").text
groupDesc = row.find_element("xpath", ".//td[2]").text
if groupId[:8] == 'prj_ppix':
groupsPpiX.append([groupId, groupDesc])
except NoSuchElementException:
print("NoSuchElementException")
driver.close()
driver = webdriver.Firefox()
personen = set()
for group, groupDesc in groupsPpiX:
driver.get("https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?group=" + group)
table = driver.find_element("xpath", "/html/body/div/div/table[2]/tbody")
personenInGruppe = []
for row in table.find_elements("xpath", ".//tr[not(position()=1)]"):
try:
kuerzel = row.find_element("xpath", ".//td[1]").text
name = row.find_element("xpath", ".//td[2]").text
personenInGruppe.append([kuerzel, name])
personen.add(kuerzel)
except NoSuchElementException:
print("NoSuchElementException")
with graphDB_Driver.session() as graphDB_Session:
#Gruppe anlegen
graphDB_Session.run("""CREATE (:ADGROUP {name: $name})""", name=group)
#Personen zur Gruppe verknüpfen
for kuerzel, name in personenInGruppe:
g = graphDB_Session.run("""MATCH (u:USER)
WHERE u.displayName = $displayName
RETURN u.kuerzel""", displayName=name).values()
if g:
#Person existiert
for item in g:
if not item[0]:
#Attribut existiert nicht
graphDB_Session.run("""MATCH (u:USER)
WHERE u.displayName = $displayName
SET u.kuerzel = $kuerzel""",
displayName=name,
kuerzel=kuerzel)
else:
#Person existiert nicht
#print(name, 'existiert nicht')
graphDB_Session.run("""CREATE (u:USER {displayName: $displayName,
kuerzel: $kuerzel})""",
displayName=name,
kuerzel=kuerzel)
# Gruppenbeziehung anlegen
graphDB_Session.run("MATCH (grp:ADGROUP {name: $name}), (u:USER {displayName: $displayName}) MERGE (u)-[:is_member]->(grp)",
name=group,
displayName=name)
driver.close()
driver = webdriver.Firefox()
with graphDB_Driver.session() as graphDB_Session:
for kuerzel in personen:
driver.get("https://dobby.ppi.int/cgi-bin/ad/adgroups.pl?user=" + kuerzel)
field = driver.find_element("xpath", "/html/body/div/div/table[2]/tbody/tr[7]/td[2]")
for team in field.text.split('\n'):
graphDB_Session.run("MERGE (t:TEAMS {name: $name})", name=team)
graphDB_Session.run("MATCH (t:TEAMS {name: $name}), (u:USER {kuerzel: $kuerzel}) MERGE (u)-[:is_member]->(t)",
name=team,
kuerzel=kuerzel)
driver.close()
# Personen unter Sascha, die nicht in dem Teams Kanal WS_PPI_X sind
with graphDB_Driver.session() as graphDB_Session:
g = graphDB_Session.run("""MATCH (s:USER {displayName: "Sascha Däsler"}) -[:vorgesetzter*]-> (u:USER)
MATCH (ad:TEAMS {name: "WS_PPI_X"})
WHERE not (u) -[:is_member]-> (ad)
CALL {with u match (v:USER) -[:vorgesetzter]-> (u) return v.displayName as vorgesetzter}
RETURN vorgesetzter, u.jobTitle, u.displayName
ORDER BY vorgesetzter, TOLOWER(u.jobTitle), u.displayName""").values()
g
# Personen unter Sascha, die nicht in der AD Gruppe prj_ppix sind
with graphDB_Driver.session() as graphDB_Session:
g = graphDB_Session.run("""match (s:USER {displayName: "Sascha Däsler"}) -[:vorgesetzter*]-> (u:USER)
match (ad:ADGROUP {name: "prj_ppix"})
where not (u) -[:is_member]-> (ad)
call {with u match (v:USER) -[:vorgesetzter]-> (u) return v.displayName as vorgesetzter}
RETURN vorgesetzter, u.jobTitle, u.displayName
ORDER BY vorgesetzter, TOLOWER(u.jobTitle), u.displayName""").values()
g