Upload files to "source/Dobby"
This commit is contained in:
117
source/Dobby/DobbyBackup.py
Normal file
117
source/Dobby/DobbyBackup.py
Normal file
@@ -0,0 +1,117 @@
|
||||
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
|
||||
Reference in New Issue
Block a user