From 449aaf7790df72a0abb1fda43532f106e5c91a14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alcouffe=20R=C3=A9my?= Date: Thu, 29 Sep 2022 13:52:22 +0200 Subject: [PATCH] Refactoring --- obja.py | 58 ++++++++++++++++++++++++++++++++++++------------------- server.py | 19 +++++++++--------- 2 files changed, 48 insertions(+), 29 deletions(-) diff --git a/obja.py b/obja.py index 6137efa..b62eff4 100755 --- a/obja.py +++ b/obja.py @@ -8,11 +8,13 @@ import random obja model for python. """ + class Face: """ The class that holds a, b, and c, the indices of the vertices of the face. """ - def __init__(self, a, b, c, visible = True): + + def __init__(self, a, b, c, visible=True): self.a = a self.b = b self.c = c @@ -52,7 +54,7 @@ class Face: self.visible = other.visible return self - def test(self, vertices, line = "unknown"): + def test(self, vertices, line="unknown"): """ Tests if a face references only vertices that exist when the face is declared. """ @@ -69,10 +71,12 @@ class Face: def __repr__(self): return str(self) + class VertexError(Exception): """ An operation references a vertex that does not exist. """ + def __init__(self, index, line): """ Creates the error from index of the referenced vertex and the line where the error occured. @@ -87,10 +91,12 @@ class VertexError(Exception): """ return f'There is no vector {self.index} (line {self.line})' + class FaceError(Exception): """ An operation references a face that does not exist. """ + def __init__(self, index, line): """ Creates the error from index of the referenced face and the line where the error occured. @@ -105,10 +111,12 @@ class FaceError(Exception): """ return f'There is no face {self.index} (line {self.line})' + class FaceVertexError(Exception): """ An operation references a face vector that does not exist. """ + def __init__(self, index, line): """ Creates the error from index of the referenced face vector and the line where the error occured. @@ -123,10 +131,12 @@ class FaceVertexError(Exception): """ return f'Face has no vector {self.index} (line {self.line})' + class UnknownInstruction(Exception): """ An instruction is unknown. """ + def __init__(self, instruction, line): """ Creates the error from instruction and the line where the error occured. @@ -141,13 +151,15 @@ class UnknownInstruction(Exception): """ return f'Instruction {self.instruction} unknown (line {self.line})' + class Model: """ The OBJA model. """ + def __init__(self): """ - Intializes an empty model. + Initializes an empty model. """ self.vertices = [] self.faces = [] @@ -244,6 +256,7 @@ class Model: return # raise UnknownInstruction(split[0], self.line) + def parse_file(path): """ Parses a file and returns the model. @@ -252,13 +265,15 @@ def parse_file(path): model.parse_file(path) return model + class Output: """ The type for a model that outputs as obja. """ - def __init__(self, output, random_color = False): + + def __init__(self, output, random_color=False): """ - Initializes the index mapping dictionnaries. + Initializes the index mapping dictionaries. """ self.vertex_mapping = dict() self.face_mapping = dict() @@ -270,16 +285,17 @@ class Output: Adds a new vertex to the model with the specified index. """ self.vertex_mapping[index] = len(self.vertex_mapping) - print('v {} {} {}'.format(vertex[0], vertex[1], vertex[2]), file = self.output) + print('v {} {} {}'.format(vertex[0], vertex[1], vertex[2]), file=self.output) def edit_vertex(self, index, vertex): """ Changes the coordinates of a vertex. """ if len(self.vertex_mapping) == 0: - print('ev {} {} {} {}'.format(index, vertex[0], vertex[1],vertex[2]), file = self.output) + print('ev {} {} {} {}'.format(index, vertex[0], vertex[1], vertex[2]), file=self.output) else: - print('ev {} {} {} {}'.format(self.vertex_mapping[index] + 1, vertex[0], vertex[1],vertex[2]), file = self.output) + print('ev {} {} {} {}'.format(self.vertex_mapping[index] + 1, vertex[0], vertex[1], vertex[2]), + file=self.output) def add_face(self, index, face): """ @@ -287,11 +303,11 @@ class Output: """ self.face_mapping[index] = len(self.face_mapping) print('f {} {} {}'.format( - self.vertex_mapping[face.a] + 1, - self.vertex_mapping[face.b] + 1, - self.vertex_mapping[face.c] + 1, - ), - file = self.output + self.vertex_mapping[face.a] + 1, + self.vertex_mapping[face.b] + 1, + self.vertex_mapping[face.c] + 1, + ), + file=self.output ) if self.random_color: @@ -300,7 +316,7 @@ class Output: random.uniform(0, 1), random.uniform(0, 1), random.uniform(0, 1)), - file = self.output + file=self.output ) def edit_face(self, index, face): @@ -308,14 +324,15 @@ class Output: Changes the indices of the vertices of the specified face. """ print('ef {} {} {} {}'.format( - self.face_mapping[index] + 1, - self.vertex_mapping[face.a] + 1, - self.vertex_mapping[face.b] + 1, - self.vertex_mapping[face.c] + 1 - ), - file = self.output + self.face_mapping[index] + 1, + self.vertex_mapping[face.a] + 1, + self.vertex_mapping[face.b] + 1, + self.vertex_mapping[face.c] + 1 + ), + file=self.output ) + def main(): if len(sys.argv) == 1: print("obja needs a path to an obja file") @@ -325,5 +342,6 @@ def main(): print(model.vertices) print(model.faces) + if __name__ == "__main__": main() diff --git a/server.py b/server.py index 62863e5..2f8dfd5 100755 --- a/server.py +++ b/server.py @@ -6,7 +6,6 @@ # Standard library imports. import sys - if sys.version_info[0] < 3: from SocketServer import ThreadingMixIn import BaseHTTPServer @@ -17,7 +16,7 @@ else: import http.server as BaseHTTPServer from http.server import SimpleHTTPRequestHandler from socketserver import ThreadingMixIn - from urllib.parse import quote, unquote + from urllib.parse import quote, unquote from io import BytesIO as cStringIO import os @@ -35,6 +34,7 @@ import errno DATA_DIR = getcwd() + class ThreadingHTTPServer(ThreadingMixIn, BaseHTTPServer.HTTPServer): pass @@ -61,7 +61,7 @@ class RequestHandler(SimpleHTTPRequestHandler): in_file.seek(self.range_from) # Add 1 because the range is inclusive left_to_copy = 1 + self.range_to - self.range_from - buf_length = 64*1024 + buf_length = 64 * 1024 bytes_copied = 0 while bytes_copied < left_to_copy: read_buf = in_file.read(min(buf_length, left_to_copy - bytes_copied)) @@ -125,7 +125,7 @@ class RequestHandler(SimpleHTTPRequestHandler): file_size = fs.st_size if self.range_from is not None: if self.range_to is None or self.range_to >= file_size: - self.range_to = file_size-1 + self.range_to = file_size - 1 self.send_header("Content-Range", "bytes %d-%d/%d" % (self.range_from, self.range_to, @@ -184,8 +184,8 @@ class RequestHandler(SimpleHTTPRequestHandler): def translate_path(self, path): """ Override to handle redirects. """ - path = path.split('?',1)[0] - path = path.split('#',1)[0] + path = path.split('?', 1)[0] + path = path.split('#', 1)[0] path = normpath(unquote(path)) words = path.split('/') words = filter(None, words) @@ -240,12 +240,13 @@ def get_server(port=8000, next_attempts=0, serve_path=None): else: raise + def main(args=None): if args is None: args = sys.argv[1:] PORT = 8000 - if len(args)>0: + if len(args) > 0: PORT = int(args[-1]) serve_path = DATA_DIR if len(args) > 1: @@ -256,6 +257,6 @@ def main(args=None): print("serving at port " + str(PORT)) httpd.serve_forever() -if __name__ == "__main__" : - main() +if __name__ == "__main__": + main()