class ServiceTypes(JsonObject): name = StringField() protocol = MultipleChoiceStringField(options=["_udp", "_tcp"], null=False) port = IntegerField() properties = StringField() def get_properties(self) -> Dict[str, Any]: if self.properties is None: return {} return json.loads(self.properties) # type: ignore
class Location(JsonObject): location_id: str = StringField() page_id: str = StringField() page_title: str = StringField() paragraph_id: str = StringField() section_id: List[str] = ListField(str) section_headings: List[str] = ListField(item_type=str) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.subsections = []
class EntityMention(JsonObject): entity_name: str = StringField() entity_id: str = StringField() mention: str = StringField() target_mention: bool = BooleanField() entity_aspect: str start: int = IntegerField() end: int = IntegerField() def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.entity_aspect = ""
class Interface(JsonObject): name = StringField() domain_names = ListField(item_type=str) advertise = ListField(item_type=str) ip = StringField() def get_phys(self) -> List[psutil._common.snicaddr]: """ return Physical interface from psutil """ return list( filter(lambda address: address.family == socket.AF_INET, psutil.net_if_addrs()[self.name])) def get_ip_strs(self) -> List[str]: """ get ip as a string. this also translates 'ips[n]' to the n-th ip in that interface """ address = str(self.ip) # Check for 'ips[n]' if address == "ips[*]": addresses = [] for iface in self.get_phys(): try: addresses.append(str(iface.address)) except Exception as e: logger.warning(f"unable to add ip {iface.address}: {e}") return addresses matches = re.findall(r"ips\[(\d+)]", self.ip) if len(matches) != 0: index = int(matches[0]) try: address = str(self.get_phys()[index].address) except Exception as e: logger.warning(f"unable to get {index}-th IP address: {e}") return [] # Validate ip try: socket.inet_aton(address) return [address] except OSError as e: raise InvalidIpAddress(f"Invalid IP address: {address}") from e def get_ips(self) -> List[bytes]: """ returns the ip as 4 bytes """ return [socket.inet_aton(ip) for ip in self.get_ip_strs()] def __repr__(self) -> str: return str(self.name)
class Res(JsonObject): info = StringField() proportion = StringField() maxPicNum = IntegerField() minPicNum = IntegerField() def __init__(self): super(Res, self).__init__() self.info = "" self.proportion = "square" self.maxPicNum = 0 self.minPicNum = 0 def setInfo(self, new_info): self.info = new_info def setMaxPicNum(self, new_max): self.maxPicNum = new_max def setMinPicNum(self, new_max): self.minPicNum = new_max
class Context(JsonObject): target_entity: str = StringField() location: Location = ObjectField(Location) sentence: AnnotatedText = ObjectField(AnnotatedText) paragraph: AnnotatedText = ObjectField(AnnotatedText)
class AnnotatedText(JsonObject): content: str = StringField() entities: List[EntityMention] = ObjectListField(EntityMention)
class AspectLinkExample(JsonObject): unhashed_id: str = StringField() id: str = StringField() context: Context = ObjectField(Context) true_aspect: str = StringField() candidate_aspects: List[Aspect] = ObjectListField(Aspect)
class Aspect(JsonObject): aspect_id: str = StringField() aspect_name: str = StringField() location: Location = ObjectField(Location) aspect_content: AnnotatedText = ObjectField(AnnotatedText)
class MinersKills(JsonObject): killerName = StringField() kills = IntegerField()
class WolvesKills(JsonObject): killerName = StringField() kills = IntegerField()
class DefaultSettings(JsonObject): domain_names = ListField(item_type=str) advertise = ListField(item_type=str) ip = StringField()
class Data(JsonObject): file_tracking_id = StringField() relatid = StringField() name = StringField() subtype = StringField() restype = StringField() restype_id = IntegerField() sub_restype = StringField() sub_restype_id = IntegerField() order = IntegerField() tracking_code = StringField() tj_url = StringField() reddot_type = StringField() thumb_80 = StringField() thumb_120 = StringField() size = IntegerField() needFontId = StringField() needMusicId = StringField() measure = StringField() res_arr = ObjectListField(Res) def __init__(self): super(Data, self).__init__() self.file_tracking_id = "" self.relatid = "" self.name = "" self.subtype = "normal" self.restype = "基础拼图" self.restype_id = 11 self.sub_restype = "" self.sub_restype_id = 0 self.order = 0 self.tracking_code = "" self.tj_url = "" self.reddot_type = "" self.thumb_80 = "" self.thumb_120 = "" self.size = 0 self.needFontId = "" self.needMusicId = "" self.measure = "" self.res_arr = [] def setId(self, new_id): self.file_tracking_id = new_id def setName(self, new_name): self.name = new_name def setThumb80(self, new_thumb): self.thumb_80 = new_thumb def setThumb120(self, new_thumb): self.thumb_120 = new_thumb def setOrder(self, new_order): self.order = new_order def setSize(self, new_size): self.size = new_size def setResArr(self, new_res_arr=None): if new_res_arr is None: new_res_arr = [] self.res_arr = new_res_arr