This repository has been archived on 2025-12-11. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
note-rpc/server.py
AndrewTrieu 2353eec18f Final
2023-03-11 17:54:51 +02:00

75 lines
2.4 KiB
Python

import xmlrpc.server
import xml.etree.ElementTree as ET
# Class to handle the server side of the XML-RPC server
class Server:
def __init__(self):
self.db = ET.parse('db.xml')
self.root = self.db.getroot()
# Check if the topic exists
def check_topic(self, topic):
for child in self.root:
if child.attrib['name'] == topic:
return True
return False
# Create a new topic if it doesn't exist
def create_topic(self, topic):
new_topic = ET.Element('topic', {'name': topic})
self.root.append(new_topic)
self.db.write('db.xml')
return True
# Add a note of a topic to the database
def add_note(self, topic, note, text, timestamp):
for child in self.root:
if child.attrib['name'] == topic:
new_note = ET.Element('note', {'name': note})
new_text = ET.Element('text')
new_text.text = text
new_note.append(new_text)
new_timestamp = ET.Element('timestamp')
new_timestamp.text = timestamp
new_note.append(new_timestamp)
child.append(new_note)
self.db.write('db.xml')
return True
return False
# Add a Wikipedia link to the note
def add_link(self, topic, info):
for child in self.root:
if child.attrib['name'] == topic:
# get the last note element
last_note = child.findall('note')[-1]
new_info = ET.Element('info')
new_info.text = info
last_note.append(new_info)
self.db.write('db.xml')
return True
return False
# Get all the notes of a topic
def get_notes(self, topic):
for child in self.root:
if child.attrib['name'] == topic:
notes = []
for note in child.findall('note'):
notes.append({
'name': note.attrib['name'],
'text': note.find('text').text,
'timestamp': note.find('timestamp').text,
'info': note.find('info').text
})
return notes
# Start the server
if __name__ == '__main__':
server = xmlrpc.server.SimpleXMLRPCServer(('localhost', 7777))
server.register_instance(Server())
server.serve_forever()