KaraKaraWitch commited on
Commit
8e976dc
·
verified ·
1 Parent(s): a97b715

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +121 -0
app.py ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import time
3
+
4
+ SNOWFLAKE_EPOCH = 1288834974657
5
+
6
+
7
+ def sequence_id(id):
8
+ return id & 0b111111111111
9
+
10
+
11
+ def machine_id(id):
12
+ return (id >> 12) & 0b1111111111
13
+
14
+
15
+ def server_id(id):
16
+ return (id >> 12) & 0b11111
17
+
18
+
19
+ def datacenter_id(id):
20
+ return (id >> 17) & 0b11111
21
+
22
+
23
+ def creation_time(id):
24
+ return id >> 22
25
+
26
+
27
+ def snow_to_components(snowflake_id: int):
28
+ timestamp_ms = creation_time(snowflake_id) + SNOWFLAKE_EPOCH
29
+ datacenter_id_val = datacenter_id(snowflake_id)
30
+ server_id_val = server_id(snowflake_id)
31
+ machine_id_val = machine_id(snowflake_id)
32
+ sequence_id_val = sequence_id(snowflake_id)
33
+ readable_time = time.strftime(
34
+ "%Y-%m-%d %H:%M:%S", time.localtime(timestamp_ms / 1000)
35
+ )
36
+ return (
37
+ readable_time,
38
+ timestamp_ms,
39
+ datacenter_id_val,
40
+ server_id_val,
41
+ machine_id_val,
42
+ sequence_id_val,
43
+ )
44
+
45
+
46
+ def components_to_snow(
47
+ timestamp_ms: int,
48
+ datacenter_id_val: int,
49
+ server_id_val: int,
50
+ machine_id_val: int,
51
+ sequence_id_val: int,
52
+ ):
53
+ timestamp_bits = bin(int(timestamp_ms) - SNOWFLAKE_EPOCH)[2:].zfill(41)
54
+ datacenter_id_bits = bin(datacenter_id_val)[2:].zfill(5)
55
+ server_id_bits = bin(server_id_val)[2:].zfill(5)
56
+ machine_id_bits = bin(machine_id_val)[2:].zfill(10)
57
+ sequence_bits = bin(sequence_id_val)[2:].zfill(12)
58
+ binary_snowflake = (
59
+ timestamp_bits
60
+ + machine_id_bits
61
+ + server_id_bits
62
+ + datacenter_id_bits
63
+ + sequence_bits
64
+ )
65
+ snowflake_id = int(binary_snowflake, 2)
66
+ return snowflake_id
67
+
68
+
69
+ def update_components(snowflake_input_str):
70
+ if snowflake_input_str:
71
+ snowflake_input = int(snowflake_input_str)
72
+ return snow_to_components(snowflake_input)
73
+ return None, None, None, None, None, None
74
+
75
+
76
+ def update_snowflake(
77
+ _,
78
+ timestamp_input,
79
+ datacenter_input,
80
+ server_input,
81
+ machine_input,
82
+ sequence_input,
83
+ ):
84
+ if all(
85
+ [timestamp_input, datacenter_input, server_input, machine_input, sequence_input]
86
+ ):
87
+ snowflake_id = components_to_snow(
88
+ int(timestamp_input),
89
+ int(datacenter_input),
90
+ int(server_input),
91
+ int(machine_input),
92
+ int(sequence_input),
93
+ )
94
+ return str(snowflake_id)
95
+ return None
96
+
97
+
98
+ with gr.Blocks() as demo:
99
+ gr.Markdown("## Snowflake ID Converter")
100
+ with gr.Row():
101
+ snowflake = gr.Textbox(label="Snowflake ID", interactive=True)
102
+ with gr.Accordion("Snowflake ID Components", open=False):
103
+ readable_time = gr.Textbox(label="Timestamp (Readable)", interactive=False)
104
+ timestamp = gr.Number(label="Timestamp (ms)", interactive=True)
105
+ datacenter = gr.Number(0, label="Datacenter ID", step=1, interactive=True)
106
+ server = gr.Number(0, label="Server ID", step=1, interactive=True)
107
+ machine = gr.Number(0, label="Machine ID", step=1, interactive=True)
108
+ sequence = gr.Number(0, label="Sequence ID", step=1, interactive=True)
109
+ id_components = [
110
+ readable_time,
111
+ timestamp,
112
+ datacenter,
113
+ server,
114
+ machine,
115
+ sequence,
116
+ ]
117
+ snowflake.input(update_components, inputs=snowflake, outputs=id_components)
118
+ for component in [timestamp, datacenter, server, machine, sequence]:
119
+ component.input(update_snowflake, inputs=id_components, outputs=snowflake)
120
+
121
+ demo.launch()